Я очень новичок в Haskell, и я пытаюсь обернуть голову вокруг синтаксиса (а также привыкнуть к декларативному языку). Я создал тип данных дерева, и я хочу иметь возможность сравнивать их с помощью оператора ==. Вот что у меня есть:Оператор равенства деревьев в Haskell
data Tree =
Leaf
| Twig
| Branch Tree Tree Tree
deriving Show;
instance Eq Tree where
Leaf == Leaf = True;
(Branch a b c) == (Branch a1 b1 c1) = a==a1 && b==b1 && c==c1;
Это, кажется, работает при вводе: Leaf == Leaf
или Branch Leaf Leaf Leaf == Branch Leaf Leaf Leaf
, но он продолжает давать мне ошибку, когда я добавляю Twig == Twig = True;
. Кроме того, нет способа сравнить Leaf == Branch Leaf Leaf Leaf
. Я пробовал использовать _==_ = False;
, но это также дало мне ошибку. Я потерян, любая помощь будет принята с благодарностью!
EDIT: все еще получаю ошибки, а именно:
[1 of 1] Compiling Main (Tree.hs, interpreted)
Tree.hs:15:5: parse error on input ‘_’
Failed, modules loaded: none.
Prelude> :r
[1 of 1] Compiling Main (Tree.hs, interpreted)
Tree.hs:15:3: parse error on input ‘Twig’
Failed, modules loaded: none.
Во-первых, после того, как я вынимаю проблемное Twig ==, оставляя _ == _. Второй уходят как в.
Если вы публикуете точный код, вызывающий ошибки, вы, вероятно, получите объяснение, что происходит не так. –