我一直在阅读Applicative Functors并且我很难调和类别理论和函数式编程各自术语中的不匹配。
虽然我浏览了各种博客,但我用于这项研究的最完整的资源是:
- McBride & Paterson -带效果的应用程序编程(PDF)
- Gibbons & Oliveira -迭代器模式的精髓(PDF)
- Tomas Petricek -在 LINQ 中编写成语
在范畴论中,函子是从源范畴到目标范畴(在范畴的范畴中)的态射。“category of categories”有一个包含源类别和目标类别的对象集合,以及一个包含以下内容的函子集合:源类别的恒等函子;目标类别的恒等函子;并且,连接源和目标的函子(如果源类别与目标类别相同,并且所讨论的函子是恒等式,则只需要一个函子)。
在函数式编程中,应用函子被描述为一对操作:
pure : a -> f a
<*> : f ( a -> b) -> f a -> f b
.
这是我的问题
什么解释清楚了应用函子的函数式编程定义和函子的范畴理论定义之间的对应关系?
更具体地说,元组的哪些部分(pure,<*>)
对应于:
- 源类别
- 目标类别
- 函子所在的范畴
- 函子对源类别对象的结构保持效果
- 函子对源范畴态射的结构保持效应
笔记:我承认这可能是一个不完整的比喻,我提到的每个概念可能都没有一一对应的关系。我故意避免在这里分享我对明显对应关系的猜测,以保持我的问题简单并避免进一步混淆问题。