Haskell 二叉树的Eq实例

Haskell 二叉树的Eq实例,haskell,Haskell,我正在尝试为二叉树创建自己的Eq实例: data Tree a = Empty | Node a (Tree a) (Tree a) instance Eq a => Eq (Tree a) where (Empty == Empty) = True (Empty == _) = False (_ == Empty) = False (Node x xl xr) == (Node y yl yr) = (x == y) &&

我正在尝试为二叉树创建自己的
Eq
实例:

data Tree a = Empty | Node a (Tree a) (Tree a) 
instance Eq a => Eq (Tree a) where
    (Empty == Empty) = True
    (Empty == _)     = False
    (_ == Empty)     = False
    (Node x xl xr) == (Node y yl yr) = (x == y) && xl == yl && xr == yr
我收到以下错误消息:

Parse error in pattern: Empty == Empty

您能告诉我哪里错了吗?

在定义运算符或函数时,不能使用括号。记住

a ???? b
只是语法上的糖

(????) a b
因此,您的模式应该如下所示:

Empty == Empty = True
Empty == _     = False
_ == Empty     = False
Node x xl xr == Node y yl yr = ...

删除括号,
(x==y)
应该是
x==y
谢谢,通常这样可以吗?注意:您必须删除最外层图案周围的括号,但应该删除代码中除类型
树a
周围的括号以外的所有括号。这些都不是必需的。是的,它是有效的。据我所知,我应该知道何时需要括号?在模式匹配(定义的左侧)中,括号用于对各个参数的结构进行分组。因为
==
是一个有两个参数的函数,所以您不应该让参数对包括该函数名在内的所有内容进行分组,否则编译器会感到困惑。