评论员recently stated:
免费monad是教会数字 - 只使用(endo-)仿函数而不是函数!
他继续to explain this说:
它们都是一个endofunct(离子|或)组成0 - n次
我得到的教会数字是一组匿名函数组合,每个数字都有一个组合。我只是不知道这对Free Monads有何影响。
我的问题是:免费的monad是教会数字吗?
答案 0 :(得分:3)
排序。
教会数字的概括是数字n
为f^n
的地方,其中f
是某些category的内同态(一个域,其中域和codomain是同一个对象的箭头) }和f^n
表示"撰写f
自己n
次"。普通教会数字属于集的类别,其中箭头是函数,因此例如应用于3
和f
的数字x
为f(f(f(x)))
。例如,如果f(x) = x + 10
,则3 f 0
为30
。
在类别的类别中,箭头为仿函数。在那里,应用于某个仿函数3
和对象f
(例如,类型)的数字x
再次为f(f(f(x)))
。如果是f
,例如类型构造函数f x = Int => x
,然后3 f String
是Int => Int => Int => String
,即带有三个Int
参数并返回String
的函数类型。
现在,对于仿函数f
,Free f
是由f
生成的免费monad ,其中Free f x
类型的实例是或者只是x
或f (Free f x)
。因此,它将采用f(f(f(...(x)))
形式的类型,将f
组合为零{或} x
。
所以它不是那个"免费的monad是教会的数字",但是免费的monad是某个仿函数的类型构造,并且该仿函数上的教会数字嵌入在那种类型中。 / p>