2012-12-12 20 views
1

使用show打印由列表列表給出的矩陣行時遇到了一些麻煩。在Haskell中使用顯示列表列表

我有這樣的:

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

當參數Int是平方矩陣的順序和Bit是一個Int(0或1)。我需要我的代碼才能夠做到以下幾點,以MatrixShow一個實例:

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" 

但這顯然只是返回第一個列表。你能幫我解決這個問題嗎? 在此先感謝。

回答

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.Listintercalate進口)