Warum akzeptiert Haskell nach einer Funktionskomposition keine Argumente?

Da Haskell-Funktionen nur ein Argument haben, bei dem die restlichen Argumente wie bei Lambdas bleiben, können wir dies tun:

foo a b = a + b -- this is like foo a = \b -> a + b

foo 1 2 -- ok

Nun, mir ist aufgefallen, dass, wenn ich die Funktion deklariere, die ein Lambda zurückgibt, genau wie im Kommentar, dasfoo 1 2 wird genauso gut funktionieren.

Aber wenn ich diese Funktionen komponiere, wie folgt:

foo a b = a + b
bar x = x * x

bar . foo 1 2 -- oh, it's wrong, I need do '(bar . foo 1) 2'

... Dies gibt einen Fehler zurück.

Ok, die Frage ist: Warum funktioniert die Rückgabe eines Lambdas von einer Funktion nicht so wie die Funktionszusammensetzung? Ich meine, in der Komposition muss ich Klammern um die eine setzen, und es werden keine Klammern benötigt, wenn ein Lambda von der Funktion zurückgegeben wird.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage