Я нашел такой код в книге "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))
......
Но когда я пытаюсь сравнить разницу типов между версиями «Just» и «No Just»:
nodeAreSameJust :: (Eq t) => Tree t -> Tree t -> Maybe t
nodeAreSameNoJust :: (Eq a) => Tree (Maybe a) -> Tree (Maybe a) -> Maybe a
Итак, что здесь является ключевым моментом? Означает ли это, что когда я помещаю переменную с типом a
в узел, функция не выводит узел с типом a
, поэтому она получает ошибку?