Haskell中的类实例和不明确事件
代码如下:Haskell中的类实例和不明确事件,haskell,instance,ambiguous,Haskell,Instance,Ambiguous,代码如下: 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
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
您的模式
节点tlr
周围也缺少括号,我删除了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
您的模式
节点tlr
周围也缺少括号,我删除了show
调用周围的括号,因为它们是多余的,因为函数应用程序已经具有最高的优先级。只是一个旁注:有一个函数Data.List。用于在列表元素之间插入一个值
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]
不幸的是,您无法编写映射显示[t,l,r]
,因为列表元素需要有一个唯一的类型。只是一个旁注:有一个函数Data.list。用于在列表元素之间插入一个值
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]
很遗憾,您无法编写映射显示[t,l,r]
,因为列表元素需要具有唯一的类型。这是一个家庭作业问题吗?它看起来与最近的问题很相似,这是一个家庭作业问题吗?它看起来与最近的问题可疑地相似,还有数据.List.interlate
,它也连接结果。哦,谢谢,我已经在想,因为我在文本
和ByteString
中看到了它。还有数据.List.interlate
,它也连接结果。哦,谢谢,正如我在Text
和ByteString
中看到的那样,我已经在想了。你可能还想看看hlint
,它为你做了一些括号固定的事情(除其他外)。你也可能想看看hlint
它为你做了一些括号固定的事情(除其他外)。