別の行に表示するには、 を変更せずshow
に を実行しますunlines (map show customerList)
。これにより、それぞれが表示され、改行文字を間に入れて元に戻されます。
ただし、シノニムの表示を変更することについて尋ねたtype
ので、そのためのオプションを次に示します。
show
データの基本的なシリアル化用です。何か違うことをしたい場合は、いくつかのオプションがあります。
- このインスタンスでそれを行う関数を作成します。
display
独自の Display クラスを作成し、その機能でどのようにレイアウトするかを定義します。
- a を使用し
newtype
てデータをラップします。
- 独自の顧客タイプを宣言します。
後で改行を追加する
タイプ Customer = (Int, Int, [Int])
例 1
displayC :: Customer -> String
displayC = (++"\n").show
例 2
{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}
class Display a where
display :: a -> String
instance Display Customer where
display x = show x ++ "\n"
instance Display Customer
(ではなく言う必要があることに注意してくださいinstance of Display Customer
。)
出力例:
*Main> display ((3,4,[5,6])::Customer)
"(3,4,[5,6])\n"
ただし、これらの言語拡張機能は注意して使用する必要があります。
例 3
newtype Cust = Cust Customer
displayCust (Cust c) = show c ++ "\n"
例 4
data CustomerTup = CTup Int Int [Int]
displayCTup (CTup a b cs) = show (a,b,cs) ++ "\n"
またはさらに良い、
data CustomerRec = CRec {custno::Int, custAge::Int, custMeasurements::[Int]}
deriving Show
displayCRec r = show (custno r,custAge r,custMeasurements r) ++ "\n"
Show
インスタンスのやり方に固執することさえあるかもしれません。data
より多くの型の安全性があり、レコード型により、些細な間違った位置の間違いを防ぐことができるため、この方法は良い方法です。
例 5
stuff = unlines $ map show [(1,2,[3,4]),(5,6,[7,8,9])]
あるいは
morestuff = unlines [show (1,2,[3,4]),
show (5,6,[7,8,9]),
"are all more numbery than",
show (True,4,False)]