Jon*_*ing 30 haskell functor category-theory
我有点困惑,需要有人帮我.让我们概述一下我目前的理解:
E
endofunctor 在哪里,是一个A
类别:
E : A -> A.
Run Code Online (Sandbox Code Playgroud)
由于Haskell中的所有类型和态射都属于该Hask
类别,Haskell中的任何函子都不是一个endofunctor?F : Hask -> Hask
.
我有一种很好的感觉,我错了,并以某种方式过度简化了这一点,我希望有人告诉我,我是一个多么的白痴.谢谢.
C. *_*ann 34
您可能想澄清一下您是否在询问"Haskell中的函子"或Functor
s.在Haskell中使用类别理论术语时,并不总是清楚假设什么类别.
但是,是的,默认假设是Hask,它被认为是具有函数作为态射的Haskell类型的类别.在这种情况下,在一个endofunctor˚F Hask将任何类型A映射到类型F(A)和任何功能˚F甲两种类型之间和B的函数F(˚F)一些类型之间F(A)和F(B) .
然后如果我们自己限制在只有那些地图的任何类型endofunctors a
的类型(f a)
,其中f
是一种构造与实物* -> *
的话,我们可以描述的功能相关联的地图为A型高阶函数(a -> b) -> (f a -> f b)
,这当然是叫类型的类Functor
.
然而,人们可以很容易想象上表现良好endofunctors Hask不能被(直接地)写为一个实例Functor
,诸如仿函数映射类型a
来Either a t
.虽然从Hask到其他类别的仿函数显然没有多大意义,但考虑从Hask到Hask op的(逆变)仿函数是合理的.
除此之外,Functor
必须从整个类别Hask映射到其某个子集的实例,因此也形成一个类别.但是在Hask的子集之间讨论仿函数也是合理的.例如,考虑发送的类型函子Maybe a
来[a]
.
您可能希望仔细阅读category-extras
包,它提供了嵌入在Hask中的一些类别理论启发的结构,而不是假设其全部.
Ale*_* C. 14
即使最终你操纵Hask
,也可以构建许多其他类别Hask
,这对于手头的问题是有意义的:
Hask
^ op,Hask
与所有箭头相反Hask * Hask
,它上面的算子是bifunctorsa
态射,态射是交换三角形抓住Mac Lane的工作数学家类别的副本来定义,并尝试自己找到他们在Haskell中解决的问题.尤其是伴随仿函数(它们是正确类别中的初始/终端对象)以及它们与monad的关系.
你会看到即使有一个大的类别(Hask
或者也许是" Hask
使用正确的箭头/产品/ ...... 提升了对象",它封装了Haskell的语言选择,如非严格性和懒惰性),适当派生类别是富有表现力的.
关于monad的可能相关(或至少是有趣的)讨论可以在文章"Monads need not be endofunctors"中找到:
http://www.cs.nott.ac.uk/~txa/publ/Relative_Monads.pdf