什么意味着"在函子内部的功能"

Car*_*s00 10 haskell category-theory

在类别理论中,仿函数是两个类别之间的同态.在Haskell中,它表示applicative functor允许我们在"functor"中应用函数.是否可以将"函数内部的函数"转换为数学或提供其他一些见解?(我知道,仿函数可以Maybe,[]等等,但仍然在努力理解这一概念.)

Ben*_*Ben 6

我的类别理论根本不强(我从Haskell的编程方面开始,最近一直在尝试学习其某些概念的类别理论基础).但这就是我所拥有的:

在Haskell中,仿函数是一种类型构造函数,这意味着它从一般类型映射到"仿函数中的类型".

在类别理论中,仿函数从一个类别的对象映射到另一个类别的对象.

在将类别理论应用于Haskell时,我们想象我们正在使用Haskell 类别Hask类别.

所以Haskell仿函数不是一般的类别理论仿函数; 他们从所有地图Hask到的一个子类Hask(因为类型f a的一些仿函数f和任意类型a还是一个Haskell类型).例如Maybe,仿函数将Hask中的对象(类型)映射到表单类型的类别Maybe a.

函数在Haskell中是第一类的,因此函数类型是完全普通的类型(并且是Hask的对象),因此函子将函数类型映射到"函子中的函数类型".因此,短语"仿函数内部的函数"是对函数类型应用仿函数产生的类型的简写.例如Just (+1),类型中的一个特定值Maybe (Int -> Int),即Maybe仿函数映射对象的对象(类型)Int -> Int.

因此,一个"适用函子"是有一些特殊规则,这些都足以采取了仿函数,它是其中的函子的"目的地"类的对象类型的功能,并在目的地类适用于各类这些值与其它值.

使用Maybe再次作为一个例子,如果我们只知道这是一个仿函数,让我们的对象之间的对应关系Int -> CharMaybe (Int -> Char)和之间的对象IntMaybe Int,和对象之间的CharMaybe Char.但是,虽然我们能够获取值Int -> Char和值Int并生成值Char,Maybe但作为仿函数并不能保证我们有能力使用值Maybe (Int -> Char)和值进行相应的操作Maybe Int.

当我们也知道它是一个应用程序仿函数时,我们就有能力获取值Maybe (Int -> Char)和值Maybe Int并生成值Maybe Char,并且这满足了将Int -> Char值应用于Int值时的某些属性.

据我所知,从纯粹的类别理论的角度来看,应用仿函数并不是非常有趣.也许这是因为类别理论关注的是对象之间的关系,它们对应于Haskell中的类型,但是从编程的角度来看,应用函子是由这些类型中的之间的关系驱动的?(我们希望通过使用仿函数获得的"函数类型"中的值仍然能够应用于要进行计算的事物).