使用show和Haskell中的列表列表

时间:2012-12-12 19:08:34

标签: list haskell types

我在使用show打印由列表列表给出的矩阵行时遇到了一些麻烦。

我有这个:

data Matrix = Mat Int [[Bit]] 
    deriving Eq

参数Int是平方矩阵的阶数,Bit是Int(0或1)。我需要我的代码才能执行以下操作,Matrix作为Show的实例:

Main> Mat 3 [[0,0,1],[1,0,1],[1,1,1]
[0,0,1]
[1,0,1]
[0,0,1]

到目前为止我只有:

instance Show Matrix where
    show (Mat i (x:xs)) = (show x) ++ "\n"

但这显然只返回第一个列表。你能帮我解决这个问题吗? 提前谢谢。

1 个答案:

答案 0 :(得分:8)

简单的方法是show所有行,并将它们分别放在各自的行上:

instance Show Matrix where
    show (Mat _ rows) = unlines $ map show rows

它的一个小缺点就是它在最后一行之后还添加了换行符,为了避免这种情况,可以使用

instance Show Matrix where
    show (Mat _ rows) = intercalate "\n" $ map show rows

(需要导入Data.List intercalate