2017-06-20 36 views

答えて

1

これは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) 

、このタイプの機能はaf S上の変換にa S上の述語を変換する:関数矢印タイプは右結合であるので、これらは等価であること

注s。

簡単な代数との関係もあります:型理論では、タプル(a, b)製品(× B)に対応し、機能はa → bを矢印(B )の累乗に対応。あなたは(C B)との間で変換することができます同じ理由a → b → c(a, b) → cとC B ×を変換することができます。

+0

説明のためにありがとうが、私はまだかっこで表示されません。 'Filterable f =>(a→Boolean)'はマップが取り込む関数を表しますが、取り込むことができる配列パラメータはどこにありますか? – stackjlei

+1

@stackjlei: 'Filterable f 'は、'(a→Boolean)→f a→f a'型全体に対する制約です。配列のパラメータは 'f'です。例えば、 'Number→Boolean'型の関数を最初の引数として渡すと、' a' = 'Number'となります。配列を2番目の引数として渡すと 'f' =' Array'となるので、型全体は '(Number→Boolean)→配列番号→配列番号 'に特化しています。 JavaScriptは型が欠けているので、これはすべて手作業です。彼らは説明ツールとしてHaskellのような表記法を使っています。 –

関連する問題