もし私が value を持っている場合、 free モナドによって結合された 2 つの s が 1 つに折りたたまれるようにa: Free[Op, A]
、 の構造を「平坦化」することは可能ですか?a
Op
コンテキスト:Op
のセマンティックは操作が冪等であるため、これを解釈前の最適化ステップとして実行したいと思います。したがって、2 つが「連続して」表示される場合、2 番目は、プログラムのセマンティクスを犠牲にすることなく削除できます。
もし私が value を持っている場合、 free モナドによって結合された 2 つの s が 1 つに折りたたまれるようにa: Free[Op, A]
、 の構造を「平坦化」することは可能ですか?a
Op
コンテキスト:Op
のセマンティックは操作が冪等であるため、これを解釈前の最適化ステップとして実行したいと思います。したがって、2 つが「連続して」表示される場合、2 番目は、プログラムのセマンティクスを犠牲にすることなく削除できます。
私が理解している限り、Free Monad プログラムのこの種のイントロスペクションは、各ステップが別のステップの結果に依存する順次計算を表すため、方法がありません。
Free Monad と Free Applicative の長所と短所について、John de Goes による素晴らしい講演があります ( https://www.youtube.com/watch?v=H28QqxO7Ihc )。後者は内省の力を与えます。