Haskell中的算子如何与类别理论中的算子相关?

22 haskell functor category-theory

据我所知,仿函数是两个类别之间的映射,例如从C http://mathurl.com/32qch9w.png中的对象到D http://mathurl.com/36b8r37.png中的对象,其中C http://mathurl.com/32qch9w.pngD http://mathurl.com/36b8r37.png是类别.

在Haskell中有Hask,其中对象是Haskell类型,而态射是Haskell函数.但是,Functor类型类有一个函数fmap,它在这些类型之间进行映射(因此它们是对象而不是类别本身):

fmap :: (a -> b) -> f a -> f b
Run Code Online (Sandbox Code Playgroud)

f a并且f b都是Hask中的对象.这是否意味着FunctorHaskell中的每个实例都是一个endofunctor,如果不是Functor真的代表一个仿函数?

我在这里错过了什么?类型也是Haskell中的类别吗?

Dan*_*ner 26

的一个实例Functor类型构造:指定两点F* -> *,也就是,从到Hask的对象Hask的对象的映射,和类型的函数(a -> b) -> (F a -> F b),也就是,从Hask的箭头与物体兼容Hask的箭头的映射- 映射F.所以,是的,所有实例Functor都是endofunctors.Hackage有几种可用的概括,例如Control.Categorical.Functor.

  • @Zoidberg Yup,它是Hask的子类别,其对象是最外层类型构造函数为`F`的类型. (3认同)

C. *_*ann 18

是的,所有Functor实例都是Hask上的endofunctors - 事实上,来自所有Hask的endofunctors到一个适当的子类,其对象是通过应用特定类型构造函数获得的类型.该类型构造函数与Functor实例关联,并提供对象的映射; 对于态射的映射是fmap(因为我们只关注笛卡尔封闭范畴上的endofunctors)本身就是Hask中的态射系列.

除了那些可以有Functor实例的函数之外,考虑其他函子是有意义的,例如逆变函子(从Hask到它的相反类别).的arr函数Arrow也对应于一个算符,从所有的Hask到其对象是相同的类别Hask并且其通过态射的类型构造函数被描述Arrow实例与相关联.

进一步的概括也是可能的(正如Daniel Wagner指出的那样),但使用起来往往变得越来越尴尬.