Haskell 显示通常每个记录字段显示一行的实现
我有很长的数据类型,上面有很多记录。当使用派生(show)时,默认的show实现不再适用,因为它在几行上传播(并且变得不可读)。这就是为什么我想为我的数据类型显示一个实例,每个记录字段输出一行 考虑以下代码片段,其中show Dog是我想要的:Haskell 显示通常每个记录字段显示一行的实现,haskell,Haskell,我有很长的数据类型,上面有很多记录。当使用派生(show)时,默认的show实现不再适用,因为它在几行上传播(并且变得不可读)。这就是为什么我想为我的数据类型显示一个实例,每个记录字段输出一行 考虑以下代码片段,其中show Dog是我想要的: data Cat = Cat { catname :: String , catcolor :: String } deriving (Eq, Show) cat1 = Cat "Garfield" "orange" cats = [ cat1 , Ca
data Cat = Cat { catname :: String , catcolor :: String } deriving (Eq, Show)
cat1 = Cat "Garfield" "orange"
cats = [ cat1 , Cat "Tom" "grey"]
data Dog = Dog { dogname :: String , dogcolor :: String } deriving (Eq)
instance Show ( Dog ) where
show (Dog named colord)= "Dog {\n dogname = "++named++" \n dogcolor = " ++ colord ++ "\n }\n"
dog1 = Dog "comet" "white"
dog2 = Dog "Odie" "yellow"
dogs = [dog1, dog2 ]
main = do { print cat1;
print cats;
print dog1;
print dogs
}
运行时,它给出以下信息:
*Main> main
Cat {catname = "Garfield", catcolor = "orange"}
[Cat {catname = "Garfield", catcolor = "orange"},Cat {catname = "Tom", catcolor = "grey"}]
Dog {
dogname = comet
dogcolor = white
}
[Dog {
dogname = comet
dogcolor = white
}
,Dog {
dogname = Odie
dogcolor = yellow
}
]
*Main>
如何以通用的方式实现此结果,即不特定于数据类型?
(例如,在Java中,它将与内省一起使用)
我有许多数据类型和许多记录字段,因此每个数据执行一个实现不是一个选项我不知道注释中提到的包
非常简单
为了得到一张漂亮的照片,我使用了套装pretty show
(顺便说一句,没有这个套装我就活不下去了)
这使得:
Cat { catname = "Garfield" , catcolor = "orange" }
[ Cat { catname = "Garfield" , catcolor = "orange" }
, Cat { catname = "Tom" , catcolor = "grey" }
]
Dog { dogname = "comet" , dogcolor = "white" }
[ Dog { dogname = "comet" , dogcolor = "white" }
, Dog { dogname = "Odie" , dogcolor = "yellow" }
]
pretty show
中另一个有用的函数是ppShow::show a=>a->String
,它将通用值转换为pretty字符串(如果可能的话)。那么pPrint
函数就是
pPrint = putStrLn . ppShow
为什么不
非常简单
@威廉·瓦农森:天哪,这就是我需要的!谢谢或
pPrint = putStrLn . ppShow