自由单子是教会数字吗?

时间:2015-12-29 23:49:48

标签: monads free-monad church-encoding

评论员recently stated

  

免费monad是教会数字 - 只使用(endo-)仿函数而不是函数!

他继续to explain this说:

  

它们都是一个endofunct(离子|或)组成0 - n次

我得到的教会数字是一组匿名函数组合,每个数字都有一个组合。我只是不知道这对Free Monads有何影响。

我的问题是:免费的monad是教会数字吗?

1 个答案:

答案 0 :(得分:3)

排序。

教会数字的概括是数字nf^n的地方,其中f是某些category的内同态(一个域,其中域和codomain是同一个对象的箭头) }和f^n表示"撰写f自己n次"。普通教会数字属于的类别,其中箭头是函数,因此例如应用于3f的数字xf(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参数并返回String的函数类型。

现在,对于仿函数fFree f是由f生成的免费monad ,其中Free f x类型的实例是或者只是xf (Free f x)。因此,它将采用f(f(f(...(x)))形式的类型,将f组合为零{或} x

所以它不是那个"免费的monad是教会的数字",但是免费的monad是某个仿函数的类型构造,并且该仿函数上的教会数字嵌入在那种类型中。 / p>