Es ist, weil f x
ist die Funktion f
mit seinem ersten Parameter bereits angewendet, so dass es nur zwei weitere benötigt, um das Ergebnis zu erhalten. Dies nennt man currying.
In Haskell gibt es nicht wirklich eine Funktion mit drei Parametern. a -> a -> a -> a
bedeutet "Eine Funktion, die eine a
nimmt und eine Funktion zurückgibt, die eine a
nimmt und eine Funktion zurückgibt, die eine a
nimmt und eine a
zurückgibt".
Das ist eine Menge von einem Mund zu schreiben, so einfach einige Parens setzen und es wird klarer: a -> (a -> (a -> a))
.
So f x
gibt Ihnen a -> (a -> a)
. Es passiert einfach, dass die Haskell-Syntax f x y z
lautet und sich so verhält, als würde man eine Funktion mit drei Parametern aufrufen, und der Compiler ist schlau genug, all diese Zwischen-Curry-Funktionen nicht zu konstruieren, wenn es nicht nötig ist.
Da die Art der Funktionsanwendung ist '(a -> b) -> a -> b ', nicht' (a - > b) -> a -> (a -> b) '. – user2407038