为了清楚起见,我不是在谈论free monad 看起来很像应用于 functorFree f
的定点组合器,即基本上是f
. (并不是说这不有趣!)
我所说的是 的定点,即与自身同构的Free, Cofree :: (*->*) -> (*->*)
函子。f
Free f
f
背景:今天,为了巩固我对自由 monad 相当缺乏的理解,我决定只为不同的简单函子写一些它们,forFree
和forCofree
,看看它们会同构到哪些更知名的 [co] monad . 令我特别感兴趣的是与(意思是,将任何类型映射到无人居住的函子)同构的发现。Cofree Empty
Empty
Const Void
好吧,也许这只是愚蠢的——我发现如果你把空垃圾放进去,你就会把空垃圾拿出来,是的!——但是,嘿,这是范畴论,整个宇宙从看似微不足道的事物中升起……对吧?
直接的问题是,如果Cofree
有这样一个固定点,那么Free
呢?好吧,它当然不可能Empty
,因为那不是单子。快速嫌疑人将是附近的东西,例如Const ()
or Identity
,但不是:
Free (Const ()) ~~ Either () ~~ Maybe
Free Identity ~~ (Nat,) ~~ Writer Nat
事实上,Free
总是添加一个额外的构造函数的事实表明,任何作为不动点的函子的结构都必须已经是无限的。但奇怪的是,如果Cofree
有这样一个简单的固定点,Free
应该只有一个更复杂的固定点(就像FixFree a = C (Free FixFree a)
Reid Barton 在评论中提出的修复)。
无聊的事实只是Free
没有“偶然的固定点”,只是巧合而已Cofree
,还是我错过了什么?