以下是代码:
data Tree t = NilT
| Node t (Tree t) (Tree t)
instance Show (Tree t) where
show NilT = ""
show Node t l r = (show t) ++ ", " ++ (show l) ++ ", " ++ (show r)
如何使用默认设置在“t show”中使用“show”,并使用“show”和树形数据以及我自己给出的定义?
答案 0 :(得分:4)
要使用show t
,您必须将约束Show t
添加到实例定义中。
instance Show t => Show (Tree t) where
show NilT = ""
show (Node t l r) = show t ++ ", " ++ show l ++ ", " ++ show r
你的模式Node t l r
周围也缺少括号,我删除了show
调用的括号,因为它们是多余的,因为函数应用程序已经具有最高优先级。
答案 1 :(得分:1)
只是旁注:有一个函数Data.List.intersperse
用于在列表元素之间放置一个值。
show (Node t l r) = concat $ intersperse ", " [show t, show l, show r]
或更短,正如哈马尔指出的那样:
show (Node t l r) = intercalate ", " [show t, show l, show r]
不幸的是,您无法编写map show [t, l, r]
,因为列表元素需要具有唯一类型。