[英]What happens if we derive Ord but not Eq while making a data type?
我理解在haskell中如果我们创建一个数据类型派生Ord它也应该派生Eq,但为什么我们必须在定义中明确地写出它们?
人们可以合理地推导Ord
但是手工实例化Eq
:
data Foo = Foo deriving Ord
instance Eq Foo where
_ == _ = True
我不能想到这个有用的地方,但是没有理由阻止它。
您需要编写Eq
,原因与在为Ord
编写实例之前必须为Eq
编写实例的原因相同(或者至少在编译之前)。 可以推导出一个,但该属性不适用于所有类型类上下文,因此您需要明确。
编译器可以很容易地知道派生Eq
(这可能是相当无害的),但它可能会导致一些惊喜,有一个类型类的实例而没有明确要求它。 如果它以某种方式发生在更复杂的类型类中,这可能会非常混乱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.