You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell如何自定义Show实例实现二维数组按行格式化打印

Haskell 自定义Show实例打印二维数组实现

问题修正点

原有代码存在几处语法和逻辑问题:

  • Haskell要求类型名、数据构造器首字母必须大写,小写开头标识符属于变量/类型参数
  • 原有show实现直接调用了二维列表的默认show方法,没有拆分每行单独打印
  • 自定义Show实例需要添加类型约束,保证数组存储的元素本身支持Show操作

完整实现代码

-- 定义二维数组泛型类型,数据构造器为Array2D
data Array2D a = Array2D [[a]]

-- 自定义Show实例,约束元素类型a实现Show类
instance Show a => Show (Array2D a) where
  show (Array2D rows) = unlines (map show rows)

-- 测试用例
sampleArray :: Array2D (Int, Int)
sampleArray = Array2D [[(1, 2), (3, 4)], [(5, 6), (7, 8)]]

效果验证

直接调用print sampleArray即可得到预期输出:

[(1,2),(3,4)]
[(5,6),(7,8)]

实现逻辑说明:map show rows会把二维数组的每一行子列表转为字符串,unlines方法会自动给每个字符串末尾添加换行符并拼接为完整字符串,正好匹配打印需求。

如果不需要最后一行末尾的多余换行,可以将unlines (map show rows)替换为intercalate "\n" (map show rows),使用前需要先导入Data.List模块。

内容的提问来源于stack exchange,提问作者Marcin Poniatowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:15:05