Haskell | C | Everything else |
Yes. Yes. Yes.
a -> b -> c is actually a -> (b -> c), taking one argument of type a.
f :: a -> b -> c being parsed as f :: a -> (b -> c) means that every function can be viewed as taking only one argument.f x y is formally considered to apply the function f to x, returning a function of type (b -> c), which is then applied to y, resulting in a value of type c.