Грамматика Haskell имеет специальную поддержку для такой конструкции, называемой «операторными секциями». Если у вас есть какой-нибудь инфиксный оператор, например, скажем #$%
, то поддерживаются следующие обозначения:
(#$%) = \x y -> x #$% y
(#$% y) = \x -> x #$% y
(x #$%) = \y -> x #$% y
Так что вы ожидаете, что некоторая математическая последовательность нарушит это, и если бы Haskell был крошечным языком, таким как Forth, я был бы склонен согласиться с вашей интуицией. Причина, по которой это работает, в основном «потому что они написали так, чтобы работать так».
(Он был добавлен также для уменьшения неоднозначности - означает f + x
означает f
применяется к двум аргументам или означает +
применяется к двум аргументам? Поскольку на самом деле это означает последний, как мы можем представлять первое? Ответ: используя ()
, чтобы ввести раздел оператора.)