Partial Application 是當 Function 提供不足 Argument 時,會回傳以剩下 Argument 所構成的新 Function,這種看似神奇的概念,事實上 bind() 就能實現。
Version
macOS Catalina 10.15.4
VS Code 1.43.2
Quokka 1.0.285
ECMAScript 2015
Ramda
import { add } from 'ramda'
let add5 = add(5)
add5(2) // ?
Ramda 所提供的 function 都支援 partial application,如 add() 原本需要兩個 argument,若僅提供 5 亦可回傳新的 add5() 而不會 runtime 錯誤。

bind()
let add = (x, y) => x + y
let add5 = add.bind(null, 5)
add5(2) // ?
add() 為普通 function,可使用 Array.prototype.bind() 實現 partial application,第一個 argument 因為沒有要取代 this,因此傳入 null 即可,之後可傳入 argument,bind() 將以剩下的 argument 成為新的 function。

Conclusion
- Partial application 為 FP 重要概念,也是 point-free 與 function composition 的理論基礎,事實上
bind()已經支援 partial application,只是語法不夠漂亮而已