我在“Real World Haskell”一书中找到了这样的代码,p68
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))
......
但是当我尝试比较“Just”和“No Just”版本之间的类型差异时:
nodeAreSameJust :: (Eq t) => Tree t -> Tree t -> Maybe t
nodeAreSameNoJust :: (Eq a) => Tree (Maybe a) -> Tree (Maybe a) -> Maybe a
那么这里的关键点是什么?这是否意味着当我在节点中放置一个带有 type 的 var 时a
,该函数不会输出一个带有 type 的节点a
,所以会出错?