这是代码:
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”?
为了使用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
,因为它们是多余的,因为函数应用程序已经具有最高优先级。
附带说明:有一个函数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]
,因为列表元素需要有一个唯一的类型。