2

一位评论员最近表示

自由单子是教堂数字——只是使用(endo-)函子而不是函数!

他继续解释这句话:

它们都是由 0 - n 次组成的 endofunct(ion|or)

我知道教堂数字是一组匿名函数组合,每个数字都有一个组合。我只是不明白这如何适用于 Free Monads。

我的问题是:自由单子是教堂数字吗?

4

1 回答 1

3

有点。

教会数字的概括是数字nf^n哪里f是某个类别中的自同态(域和共域是同一对象的箭头) ,f^n意思是“f与自身n时间组合”。普通的 Church 数字属于集合的类别,其中箭头是功能,因此例如数字3应用于fand xis f(f(f(x)))。例如,如果f(x) = x + 10,那么3 f 030

在类别的范畴中,箭头是函子。在那里,3应用于某些函子f和对象x(例如,类型)的数字又是f(f(f(x))). 例如,如果f是类型构造函数f x = Int => x,那么3 f StringInt => Int => Int => String,接受三个Int参数并返回 a的函数的类型String

现在,对于 functor fFree f是由生成的自由 monadf,其中类型的实例Free f x只是 anx或 an f (Free f x)。所以它会有一个类型的表格f(f(f(...(x))),一个由零个或多个fs组成的应用到x

所以这并不是说“自由单子是教会数字”,而是自由单子是某个函子上的类型结构,而该函子上的教会数字嵌入在该类型中。

于 2015-12-30T02:34:44.417 回答