そのようなコードは、本「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
では、ここでのキーポイントは何ですか?ノードにvar with type を配置するとa
、関数は type のノードを出力しないa
ため、エラーが発生するということですか?