from experience in BQN

What's this!?

まずは復習、以下の二つの関数:

f : A -> B -> X
: A × B  -> X

の変換過程はカリー化として知られている。正確には

-> f : curry
f  ->: uncurry

となる。

さて、ここでリストに対する基本操作

fold(+,l)

を考えよう。

fold(+,l) ≡ a + b + c + d...
	where l = {a, b, c, d...}

ここで、curry braceは(なぜだか)リストを意味するものとする。

注目すべき簡単な例を示す:

fold(+,l) ≡ a + b
	where l = {a, b}

ここでHaskellが持つ関数-オペレータ間の変換機能・構文を使って書き直すと、

+ `fold` l = a + b
	where l = {a, b}

となるし、さらに部分適用を使ってポイントフリー的な感じに表記し直すと、

(+): A -> B -> C
(+).fold: {A,B} -> C

ということで fold の話と繋がった: もしA × B{A,B}と同じなら(そのような言語なら)、

fold = uncurry

なんてこった。BQNにハマるまで気づかなかった。