用分类术语解释应用函子-单向函子


40

我想Applicative从范畴论的角度理解。

文档Applicative说,这是一个强烈的宽松monoidal仿函数

首先,维基百科有关单调子函子的页面说,单调子函子要么松懈要么强大。因此在我看来,其中一个来源是错误的,或者它们使用的术语不同。有人可以解释吗?

其次,哪些Applicative是单曲面函子的单曲面类别?我假设函子是标准Haskell类别(对象=类型,态射=功能)上的内函子,但我不知道该类别上的单曲面结构是什么。

感谢帮助。

Answers:


35

实际上,“力量”一词在这里有两种用法。

  • 强endofunctor 在monoidal范畴Ç 是一个其中带有一个天然转化σ ˚F ˚F ,满足相对于一些相干性条件我会掩饰的伙伴。有时也称这种情况为“ F有力量”。F:CC(C,,I)σ:AF(B)F(AB)F

  • 涣散monoidal算符 是2个Monoidal范畴之间的算符ç d Ĵ 与自然变换φ ˚F ˚F ˚F B i J F I F:CD(C,,I)(D,,J)ϕ:F(A)F(B)F(AB)i:JF(I),再次满足关联者的一致性条件。

  • 强monoidal算符 是其中φ是天然同构。即,˚F ˚F ˚F ,用φ和它的逆描述同构。F:CDϕiF一种F一种Fϕ

在Haskell程序的意义上,一个应用函子是具有强度松散单调函数,其单调结构是笛卡尔积。因此,这就是为什么您会听到听起来有些矛盾的术语“强松散单极子函子”的原因。

顺便说一句,在笛卡尔封闭类别,具有强度相当于一个天然转化存在一个p˚F ˚F 。即,具有强度意味着可以将函数作用定义为编程语言中的高阶函数。F一种p一种F一种F

最后,如果您对Haskell样式的应用函子的类型理论感兴趣,那么我就写了一篇博客。


1
感谢您的回答。我是否正确理解所有实例Functor都具有强度(WRT产品),仅仅是因为它们是使用fmap语言内部定义的?另外,令您感到困惑的是,您对i的定义与您的博客文章和Wikipedia文章相比都被颠倒 -是错字吗?我试图定义使用as ,这显然需要。ϕ一世pureipure' = \v -> fmap (\() -> v) (i ())i :: (Applicative f) => () -> f ()
PetrPudlák2012年

1
我在此答案中有错别字-现在已解决。是的,所有实例Functor都是很强的(wrt产品)。
Neel Krishnaswami,2012年

您能否也请详细说明Monad的位置?如果我理解正确,那也是单调的终结者。
egdmitry

@egdmitry Monoidal,不是monadal。这意味着我们处理的是单调类的终结符(在这种情况下,是相对于笛卡尔乘积(即,对)的单调)。哈斯克
kirelagin

我提议用这个词颇具实力与“强”符号的避免冲突?这是苏格兰语“ strong”的方言变体(在这里特别特别),最早在Wycliffe的圣经中使用。
Fosco

3

为了理解由单子驱动的Applicative,我想指出以下结构:

Yoneda引理暗示n a tH o mA B F B 之间存在同构。在Haskell类型类别,这是映射 一个˚F 型的 ˚F ˚F F A评估FAnat(Hom(A,B),FB)

一种GFG一种
F一种一种F
F一种,然后将函子箭头映射应用于结果函数-如果自然变换的组成部分像箭头一样有意义-并再次抽象化,我们将获得类型为F A F的映射 F一种 现在,如果函子带有从 F F B映射到 F B的单子“ join”,并且如果我们在lambda抽象和前两个参数槽之间切换,我们可以得到类型为 F的函数
F一种F一种FF
FFF 用<*>表示。(这也是你通过得到的大号˚F ŧ 中号2 ð在Haskell)。
F一种F一种F
大号一世FŤ中号2 一世d
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.