学习如何在 haskell 中编写 typeClasses
一开始写了以下
data Trivial = ATrivial
instance Eq Trivial where
(==) trVal1 trVal2 = trVal1 == trVal2
并想知道为什么它会起作用?事实上,下面的表达式不应该编译,
trVal1 == trVal2
原因==onTrivial没有定义,充其量它应该无限期地递归。事实上,如果我对 Type 类的理解是正确的,那么 trVal1 和 trVal2 唯一可能的类型就是 Trivial。这受 Type Class 的类型参数的约束Eq Trivial。
无论如何,即使我写了这个,它仍然有效
data Trivial = ATrivial
instance Eq Trivial where
(==) trVal1 trVal2 = trVal1 :: Trivial == trVal2 :: Trivial
我相信写这个的正确方法是:
data Trivial = ATrivial
instance Eq Trivial where
(==) ATrivial ATrivial = True -- Using pattern matching
我是误会还是没看到这里的东西?任何人都可以帮助消除歧义......
编辑1
在 GHCI 中编写以下内容后
ATrivial == ATrivial
我什么都没回来?有没有办法让 REPL 抱怨而不是默默地杀死递归事实上不知道 REPL 在做什么