自由单子是教会数字吗?
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 数字的概括是其中数字 n
是 f^n
其中 f
是一些 category 和 f^n
表示 "compose f
with itself n
times"。普通的教会数字属于 sets 的类别,其中箭头是 functions,例如应用于 f
和 x
的数字 3
是 f(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 String
是 Int => Int => Int => String
,函数类型采用三个 Int
参数和 return 一个 String
.
现在,对于函子 f
,Free 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 数字嵌入到该类型中。
评论员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 数字的概括是其中数字 n
是 f^n
其中 f
是一些 category 和 f^n
表示 "compose f
with itself n
times"。普通的教会数字属于 sets 的类别,其中箭头是 functions,例如应用于 f
和 x
的数字 3
是 f(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 String
是 Int => Int => Int => String
,函数类型采用三个 Int
参数和 return 一个 String
.
现在,对于函子 f
,Free 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 数字嵌入到该类型中。