I ve在《Real World Haskell》一书第68页找到了这种守则。
data Tree a = Node a (Tree a) (Tree a)
| Empty
deriving (Show)
nodeAreSame (Node a _ _) (Node b _ _)
| a == b = Just a
nodeAreSame _ _ = Nothing
我的问题是:<代码>Just数据构造者做了哪些工作? 在我删除时,我会收到错误信息,如错误信息。
(in ghci)
......
<Main *> nodeAreSame (Node 3 Empty Empty) (Node 3 Empty Empty))
<interactive>:1:16:
No instance for (Num (Maybe a))
......
但是,当我试图比较“司法”和“无公正”二者的类型差异时:
nodeAreSameJust :: (Eq t) => Tree t -> Tree t -> Maybe t
nodeAreSameNoJust :: (Eq a) => Tree (Maybe a) -> Tree (Maybe a) -> Maybe a
因此,这里的关键点是什么? 这是否意味着,如果我把一个带“条码”(a)条码>的斜体放在 no子中,则该功能不会产生一个与“条码”(a)/条码”相同的节点,从而产生错误?