【发布时间】:2017-04-03 08:43:45
【问题描述】:
我在 Haskell 中为数字表示制作了一些自定义数据类型,现在我想为其实现 Eq 实例,但不知何故我被卡住了。所以我已经做了:
data Digit = Zero | One | Two
type Digits = [Digit]
data Sign = Pos | Neg -- Pos fuer Positive, Neg fuer Negative
newtype Numeral = Num (Sign,Digits)
instance Eq Sign where
(==) Pos Pos = True
(==) Neg Neg = True
(==) _ _ = False
instance Eq Digit where
(==) Zero Zero = True
(==) One One = True
(==) Two Two = True
(==) _ _ = False
现在我想在我的自定义类型 Numeral 中检查登录,所以我尝试了这个:
instance (Eq Sign) => Eq (Numeral) where
(==) Num(x,_)== Num(y,_) = x==y
但我收到此错误:Parse error in pattern : (==)
【问题讨论】:
-
(==) (Num (x,_)) (Num (y,_)) = x==y或Num (x,_) == Num (y,_) = x==y。 -
另外你为什么用
newtype代替Numeral。为什么不data Numeral = Num Sign Digits? -
当我输入你写的第一个案例时,它说模棱两可的出现 '==' 但在此之前它说它被多次声明(我猜在以前的例子中),而第二种情况不起作用好
-
因为我想从书中解决问题
-
您必须缩进实例功能的定义。在 Haskell 中,空格很重要。
标签: haskell typeclass instances custom-type