明確にするために、フリーモナドが functor に適用された fixpoint コンビネータにどのように似ているかについて話しているのではありません。(これは面白くないというわけではありません!)Free f
f
私が話しているのは の不動点Free, Cofree :: (*->*) -> (*->*)
、つまりそれ自体に同形f
な関手です。Free f
f
背景: 今日、自由モナドについての理解不足を補うために、 forFree
とfor のCofree
両方で、さまざまな単純な関手についてそれらのいくつかを書き出すことにしました。 . 私が特に興味をそそられたのは、 と同型 (つまり、任意の型を無人にマップする関手) であるという発見Cofree Empty
でしEmpty
たConst Void
。OK、これはばかげているかもしれません。空のゴミを入れると、空のゴミが出てくることを発見しました。– でもねえ、これは圏論であり、宇宙全体が一見些細なことから立ち上がる... ですよね?
当面の問題は、そのCofree
ような不動点がある場合、どうなるかということFree
です。まあ、それEmpty
はモナドではないので、確かにあり得ません。Const ()
手っ取り早い容疑者は、またはのような近くのものですが、そうIdentity
ではありません:
Free (Const ()) ~~ Either () ~~ Maybe
Free Identity ~~ (Nat,) ~~ Writer Nat
実際、Free
常に余分なコンストラクターを追加するという事実は、不動点であるファンクターの構造がすでに無限でなければならないことを示唆しています。Cofree
しかし、そのような単純な固定点がある場合、( Reid Barton がコメントで取り上げたFree
fix-by-construction のように) はるかに複雑な固定点しか持たないのは奇妙に思えます。FixFree a = C (Free FixFree a)
退屈な真実は「偶然の不動点」Free
がなくCofree
、あるのは単なる偶然なのか、それとも何かが欠けているのでしょうか?