リコールとる(CPS変換)変換通過継続に(固定され)、とによって定義 実際、単位を持つ継続モナドがあり定義され 及び乗算によって定義 F :A → B β F :β A → β B β
ここで、バイナリマップf:A \ to B \ to Cを変換する方法について考えてみましょう。つまり、です。一つはすぐに思い付く
ここに私の質問があります:には、プログラミングの観点から見て正しいという以外に、より深い理由がありますか?たとえば、が理にかなっていると考えるためのカテゴリ理論的またはその他の「理論的」な理由はありますか?たとえば、体系的な方法でモナドから\ gammaを作成できますか?
関数のCPS変換についての洞察を探しています。
Applicative
。それは持っているliftA2
私である、参照hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/...
liftA2
私が提案していたことの一部でした。「イディオムブラケット」の概念(に(| f x y z ... |)
変換pure f <*> x <*> y <*> z <*> ...
)Applicative
は、質問のn項形式を取得する体系的な方法のようです。私はCTを知っていますが、標準的なプログラミング用語でそれについて話すのが最も簡単に思えました。Applicative
以前に出会ったことがない場合は、緩いモノイダルファンクターを調べてください(Haskellのステートメントに<*>
は指数関数も含まれます)。とにかく、私はあなたのために答えを持っていませんが、あなたが何を得ているのかをより良く理解しようとしていました:)
liftM2
一般化を超えた何かをお探しApplicative
ですか?継続適用構造から、記述したもののn項バージョンを(n項多相関数について話すことができる言語で)直接導出できます。