自由单子是教会数字吗?

Are Free monads are Church numerals?

评论员recently stated:

Free monads are Church numerals -- just using (endo-) functors instead of functions!

他继续 to explain this 说:

they are both an endofunct(ion|or) composed 0 - n times

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

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

有点。

Church 数字的概括是其中数字 nf^n 其中 f 是一些 categoryf^n 表示 "compose f with itself n times"。普通的教会数字属于 sets 的类别,其中箭头是 functions,例如应用于 fx 的数字 3f(f(f(x)))。例如,如果 f(x) = x + 10,那么 3 f 0 就是 30.

类别的类别中,箭头是仿函数。在那里,应用于某些函子 f 和对象 x(例如,一种类型)的数字 3 又是 f(f(f(x)))。如果 f 是例如类型构造函数 f x = Int => x,然后 3 f StringInt => Int => Int => String,函数类型采用三个 Int 参数和 return 一个 String.

现在,对于函子 fFree f 是由 f 生成的 free monad,其中类型的实例 Free f x 只是一个 x 或一个 f (Free f x)。因此它将具有 f(f(f(...(x))) 形式的类型,零个或多个 f 的组合应用于 x.

所以不是 "free monads are Church numerals",而是自由 monad 是某个函子上的类型构造,并且该函子上的 Church 数字嵌入到该类型中。