カリー化と部分適用の違い

以下の記事とtwitterで頂いたコメントから自分なりに整理 (自分が悩んでいるときコメント頂けるのとても助かります。ありがとうございます)

参考にした記事 weblike-curtaincall.ssl-lolipop.jp

頂いたコメント抜粋

カリー化が fun f(x: X, y: Y): Z を fun f(x: X): Y -> Z に変換することで、部分適用はこの前者または後者にXを適用することです🙆

val x: X = 何か val g: Y -> Z = f(x) // 部分適用

つまるところ、カリー化は「Xを適用する」という意味を持たない……みたいな!

-

例えばレキシカルクロージャを使えば部分適用は実現できるんじゃないですかね。boostのbindとかもカリー化はしてないけど部分適用していたような。 どっちかというとカリー化の方が実現は困難と思いますけどね。言語によっては実現できないので。

自分の理解

  • カリー化は部分適用可能な状態に関数を定義すること
  • カリー化を用いなくても部分適用自体はやろうと思えばできる(bindなどを使用して)

部分適用自体の恩恵はまだよく見えていない。 たとえば引数を全部用意しなくても部分的に適用して使えるようなオブジェクトを用意するときに適用すればいいのだろうか