誤読してるような気もするので、こっちにこっそり書く
ML(やHaskell)で
let f x y z = () in (* = let f = fun x -> (fun y -> (fun z -> ())) *) f 1 2 3
と
let f (x, y, z) = () in f (1, 2, 3)
の違いは、部分適用できるかどうかで、
let g f y z = g f (y z) in g (f 1) 2 3
とできたら嬉しい場合があるのです。let g f (y,z) = f (y,z) in g (fun (x,y) -> f (1, x, y)) (2, 3)との違い。
つまり、Haskell(やML)の場合は、高階関数があるので、関数適用の返り値が関数であっても良い。逆にCやRubyでは高階関数は無いから、メソッドの返り値がメソッドになることはありません。
あとHaskellの場合は、純粋関数型なので、関数適用の時点で引数の値は決定しているような気がします。
ということなのかなぁ。
()の有無については良くわかりません。OCamlだと、f 1, 2, 3 = ((f 1), 2, 3)とf (1, 2, 3)で意味変わっちゃうし。逆に意味が変わらない言語なら、まったく一緒ですけど。(あ、そういう意味か。)