繁体   English   中英

如果我们在创建数据类型时派生Ord而不是Eq会发生什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM