Haskell 类型类通常带有规律;例如, 的实例Monoid 预计会观察到x <> mempty = mempty <> x = x。
类型类规则通常用单等号 ( =) 而不是双等号 ( ==) 编写。这表明类型类法则中使用的平等概念不是 的概念Eq(这是有道理的,因为Eq不是 的超类Monoid)
环顾四周,我找不到任何关于=类型类法则含义的权威说法。例如:
=通常意味着外延相等或替换,但从根本上讲是依赖于上下文的。没有人为这一说法提供任何权威来源。=是外延性的,但同样未能提供来源,而且我无法找到任何联系相关编辑的作者的方式。那么问题是:类型类法律的语义是否有任何权威来源或标准=?如果是这样,那是什么?此外,是否有一些例子表明 的含义=特别奇特?
(顺便说一句,=外延处理可能会很棘手。例如,有一个Monoid (IO a)实例,但并不清楚IO值的外延相等是什么样子。)
我怀疑大多数人用来=表示“道德平等”的意思是“快速而宽松的推理在道德上是正确的”,你可以将其视为定义性的外延平等。
但这里没有硬性规定。有很多图书馆和很多作者,如果你选择任何两位作者,他们可能有一些=他们不同意的小细节。
类型类法则不是 Haskell 语言的一部分,因此它们不受与语言本身相同的语言理论语义分析的影响。
相反,这些定律通常以非正式的数学符号表示。大多数演示不需要更详细的数学阐述,因此他们没有提供。