假设我Distributive
为某些复杂的自定义类型编写了一个实例,Foo
. 是否可以仅使用其实例中可用的属性来编写Foo
's实例?而且,如果不是,那么为什么是的超类?Representable
Distributive
Distributive
Representable
1 回答
Distributive
和Representable
...之间的超类关系
class Distributive f => Representable f where
... 意味着如果f
是 a Representable
,那么它也必须是 a Distributive
,而不是相反。当用于子类化时,=>
应读作“是先决条件”,而不是“暗示”。(事实上,这与何时=>
用于类型签名中的约束相反。出于这个原因, Purescript用于<=
子类化。)
对于大多数其他成对的超类和子类,故事到此结束。Distributive
和Representable
,但是,有一个特殊的关系,因为Distributive
函子实际上是可表示的,正如两者的文档所述Distributive
......
绝对每个
Distributive
函子实际上是一个右伴随,因此它必须是内函子Representable
并保留所有限制。这是一种奇特的说法,它与(->) x
某些x
.
...和Representable
:
A
Functor
f
是Representable
iftabulate
并且index
见证 的同构(->) x
。每一个
Distributive
Functor
其实都是Representable
。
Representable
Functor
从 Hask 到 Hask 的每一个都是正确的伴随。
层次结构按照它的方式设置,Distributive
作为超类,因为Distributive
它意味着有一个更简单的接口,可以在 Haskell 98 中表达,不像Representable
(它使用类型族)和Adjunction
(它是一个多参数类型类)。从更概念的角度来看,虽然分配律暗示每个Distributive
人都是可表示的,但它们不足以弄清楚表示是什么。获得表示需要直接(如Representable
)或间接(如Adjunction
)指定它。