函子之于透镜犹如应用函子之于Biplate:引入Multiplate
编程语言
2011-07-12 v2
摘要
本文给出了透镜的两种新的范畴论刻画:一种是存储余单子的余代数,另一种是某类余代数范畴上的幺半自然变换。第一种刻画中的存储余单子可以推广为笛卡尔存储余单子,而该笛卡尔存储余单子的余代数恰好是Uniplate泛型编程库中的Biplate。另一方面,函子上的幺半自然变换可以推广以在更具体的余代数范畴上运作。这种推广恰好是Compos泛型编程库中的compos类型。一个最初由van Laarhoven猜想的定理证明了这两种推广是同构的,因此Uniplate和Compos库中支持单一递归类型泛型编程的核心数据类型是相同的。Uniplate和Compos库以不同方式将此核心功能推广以支持互递归类型。本文提出了支持互递归数据类型的第三种推广,它具有与Compos同等的表达力,且与Uniplate一样易于使用。这个名为Multiplate的方案,除了Haskell常规的类型类机制外,仅需3阶多态。
引用
@article{arxiv.1103.2841,
title = {Functor is to Lens as Applicative is to Biplate: Introducing Multiplate},
author = {Russell O'Connor},
journal= {arXiv preprint arXiv:1103.2841},
year = {2011}
}
备注
To appear in ACM SIGPLAN 7th Workshop on Generic Programming, Tokyo, 18th September 2011