リコールとる(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のステートメントに<*>は指数関数も含まれます)。とにかく、私はあなたのために答えを持っていませんが、あなたが何を得ているのかをより良く理解しようとしていました:)
マップを示す
これは、任意のダイアログカテゴリ(つまり、固定オブジェクトへのクロージャを持つモノイドカテゴリ)に存在します。一般的なバイナリ関数の左から右へのCPS変換は、このマップを適用してから、二重否定モナドの関数アクションで構成することになります。
liftM2一般化を超えた何かをお探しApplicativeですか?継続適用構造から、記述したもののn項バージョンを(n項多相関数について話すことができる言語で)直接導出できます。