Coyoneda和free-functors有什么区别

xgr*_*mmx 5 haskell category-theory

据我所知,我们可以通过Coyoneda免费获得仿函数.但是存在一些haskell包http://hackage.haskell.org/package/free-functors

我的问题是,Coyoneda和http://hackage.haskell.org/package/free-functors-0.8.1/docs/src/Data-Functor-Free.html#Free之间有什么区别

Bar*_*ski 11

这里的关键是要理解类型构造函数对于不是函子的含义.这意味着它是在对象上而不是在态射上定义的.但是,如果我们选择不同的源类别,我们也可以将其描述为仿函数.对于每个类别C,您可以定义离散类别| C |,它具有与C相同的对象,但除了身份态射之外没有其他态射."非函子"只是来自| C |的函子 来自| C |有一个简单的注射函子J C是对象和态射的身份(其中只有身份态射).所以让我们看看:

Coyoneda被定义为沿着身份仿函数的函子f的左Kan扩展.它需要f成为一个仿函数.

自由仿函数看起来像Coyoneda,但它实际上是来自| C |的函子f的左Kan延伸 从J到严格来说,J不是身份,但它足够接近,因此滥用了符号.

来自Sjoerd Visscher图书馆的免费探险家进一步扩展了这一想法.粗略地说,Haskell中的类型类定义了Hask的子类别.然后,他的自由函子是从子类别(或它的离散版本)到Hask的左边的一个函数f的扩展,沿着该子类别注入Hask.