22 haskell functor category-theory
据我所知,仿函数是两个类别之间的映射,例如从C http://mathurl.com/32qch9w.png中的对象到D http://mathurl.com/36b8r37.png中的对象,其中C http://mathurl.com/32qch9w.png和D 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中的对象.这是否意味着Functor
Haskell中的每个实例都是一个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.
C. *_*ann 18
是的,所有Functor
实例都是Hask上的endofunctors - 事实上,来自所有Hask的endofunctors到一个适当的子类,其对象是通过应用特定类型构造函数获得的类型.该类型构造函数与Functor
实例关联,并提供对象的映射; 对于态射的映射是fmap
(因为我们只关注笛卡尔封闭范畴上的endofunctors)本身就是Hask中的态射系列.
除了那些可以有Functor
实例的函数之外,考虑其他函子是有意义的,例如逆变函子(从Hask到它的相反类别).的arr
函数的Arrow
类也对应于一个算符,从所有的Hask到其对象是相同的类别Hask并且其通过态射的类型构造函数被描述Arrow
实例与相关联.
进一步的概括也是可能的(正如Daniel Wagner指出的那样),但使用起来往往变得越来越尴尬.