ハスケルでは、fmap
を2つの関数に適用することができます。これは基本的に関数の構成です。 fmap
を構成して、高いアリティ(fmap . fmap
)の関数の関数合成を有効にすることもできます。マップを2つの関数に適用できるようにファンクタを実装するにはどうすればよいですか?
これは関数がファンクタであるために機能します。
このようなファンクタ(または適切なmap
メソッド)をJavascriptで実装するにはどうすればよいですか?
これは私がこれまでにしようとしているものです:
funcProto = {
map(f) { return y => f(this.x(y)) }
};
function func(x) {
return Object.assign(Object.create(funcProto), {x: x});
}
const comp = f => g => x => f(g(x));
const map = f => ftor => ftor.map(f);
const sub = y => x => x - y;
const sqr = x => x * x;
const inc = x => x + 1;
を。これは、通常の関数合成のために働く:
:func(sqr).map(inc)(2); // 5
しかし、それはmap
の合成バージョンでは動作しません。
const map2 = comp(map)(map);
map2(sub)(sub)(10)(5)(4); // Error
私は自分自身を伝統的な方法にあまりにも多くのファンクタが適応していると思うJavascriptで実装されています。ファンクタとしての機能は、リストとは多分異なる振る舞いをします。
"*伝統的な方法ファンクタはJavascriptで実装されています*" - ありません。 – Bergi