リストモナド(フラットリストを持つもの、リストとマップ要素を連結したもの)はフリーモナドではないことを自信を持って考えています(正確には、フリーモナドファンクタT)。私の知る限り理解し、私は フラットリストとフリーモナド
最初の通常の事業者のFMAP間モナドリストの関係を見つけることによって、などに参加することを達成することができるはずです無料モナド一線を画している、リストモナドに保持している独特の関係でどのようなすべてのT.
ために、関手T以上の任意の空きモナドで開催?私はTが何であるか分からない場合、どのようにstep2を処理できますか?フラットリストが無料でないことを示すための他の戦略はありますか?
用語の衝突を解消するには、ペアファンクタに関連付けられたフリーモナドがツリーモナド(またはネストされたリストモナド)であることに注意しましょう。フラットリストモナドではありません。
編集者:haskellプログラミング言語を知っている人には、次のように公式化することができます:List a = Free T a(すべてのTと最大モナド同型異性)?
無料モナドは、外部標識の木を一般化しています。 'a'は' Free'コンストラクタではなく 'Return'コンストラクタに現れます。リストは内部でラベル付けされています。彼らは葉の上だけでなく、リストに沿ってすべてを持っています。 –
@ Hodgson私はあなたのコメントを理解しているかどうかはわかりません。木ではない無料のモナドがあります。例えば、整数のモノイドは、1つのオブジェクトのカテゴリ(および単一のモーフ)で識別ファンクタに関連付けられたフリーモナドとして実現できます。 – stackman
あなたは 'type Nat = Free Identity()'を参照していますか?これは分岐係数が1のツリーです( 'Identity a'には' a'が含まれているため)。 'Free(( - >)r)'はブランチングファクター 'r'のツリー、' Free(Const Void) 'はブランチングファクターが0のツリーです。その他 –