形式陈述
递归类型把类型变量在自身定义中再次出现,常写为
在等递归解释中,
直觉
递归类型为“数据中还包含同种数据”的形状求一个类型方程不动点;fold 把展开的一层封装回来,unfold 则观察一层结构。
例子与边界
二叉树可表示为
推论与应用
递归类型支持列表、树、对象编码、循环数据结构和递归模块。其不动点视角连接域论、代数数据类型与余代数数据类型,也要求区分有限归纳数据和潜在无限的余递归数据。
参考资料
- Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002,Chs. 20–21, iso-recursive and equi-recursive types。
- Robert Harper, Practical Foundations for Programming Languages, 2nd ed., Cambridge University Press, 2016,Ch. 16, recursive types。