Я хотел бы понять, почему следующее выражение является допустимым в Haskell:
Prelude> let e = (+) (-)
Prelude> :type e
e :: (Num (a -> a -> a), Num a) => (a -> a -> a) -> a -> a -> a
Более странно, что любое выражение в форме
e 1 2 3 4 ... N
все N - все допустимые выражения непонятного типа. Например,
Prelude> :t e 1 2 3 4 5
e 1 2 3 4 5
:: (Num ((a -> a1 -> t) -> (a -> a1 -> t) -> a -> a1 -> t),
Num (a -> a1 -> t), Num a1, Num a) =>
t
Является ли это неудачным следствием каррирования и вывода типа?
Разъяснения приветствуются.