マップ方法については、なぜ1行目の代わりに2行目が似ていませんか?それは2つのパラメータ、関数、および何か他のものを必要とするので、なぜそれは2つの矢印を持っていますか?ramdaドキュメンテーションマップがありませんコンマがありません
Filterable f => (a → Boolean) → f a → f a
Filterable f => (a → Boolean) , f a → f a
マップ方法については、なぜ1行目の代わりに2行目が似ていませんか?それは2つのパラメータ、関数、および何か他のものを必要とするので、なぜそれは2つの矢印を持っていますか?ramdaドキュメンテーションマップがありませんコンマがありません
Filterable f => (a → Boolean) → f a → f a
Filterable f => (a → Boolean) , f a → f a
これはcurryingです。 1つの引数の一連の機能で
const f = (x, y) => x + y;
f(1, 2) // 3
:簡単に言えば、あなたは複数の引数の機能を置き換えることができます
const f = x => y => x + y;
f(1)(2) // 3
一つの利点は、それがpartially applyカリー化関数に簡単だということで:
const add1 = f(1);
add1(2) // 3
これはHaskellで広く使用されています。これはramda.jsのインスピレーションの源であると思われ、Haskellが基づいているlambda calculusです。このように見
Filterable f => (a → Boolean) → f a → f a
Filterable f => (a → Boolean) → (f a → f a)
、このタイプの機能はa
のf
S上の変換にa
S上の述語を変換する:関数矢印タイプは右結合であるので、これらは等価であること
注s。
簡単な代数との関係もあります:型理論では、タプル(a, b)
は製品(× B)に対応し、機能はa → b
を矢印(B )の累乗に対応。あなたは(C B)との間で変換することができます同じ理由a → b → c
と(a, b) → c
間とC B ×を変換することができます。
説明のためにありがとうが、私はまだかっこで表示されません。 'Filterable f =>(a→Boolean)'はマップが取り込む関数を表しますが、取り込むことができる配列パラメータはどこにありますか? – stackjlei
@stackjlei: 'Filterable f 'は、'(a→Boolean)→f a→f a'型全体に対する制約です。配列のパラメータは 'f'です。例えば、 'Number→Boolean'型の関数を最初の引数として渡すと、' a' = 'Number'となります。配列を2番目の引数として渡すと 'f' =' Array'となるので、型全体は '(Number→Boolean)→配列番号→配列番号 'に特化しています。 JavaScriptは型が欠けているので、これはすべて手作業です。彼らは説明ツールとしてHaskellのような表記法を使っています。 –