Математически операция композиции функций ассоциативна. Следовательно:Почему функция композиция в Haskell право ассоциативной?
f . (g . h) = (f . g) . h
Таким образом, операцию композиции функции можно определить как левую ассоциативную, так и правую ассоциативную.
Поскольку нормальное применение функции в Haskell (то есть сопоставление терминов, а не операция $
) остается ассоциативным, по моему мнению, композиция функций также должна быть ассоциативной. Ведь большинство людей в мире (включая меня) используются для чтения слева направо.
Тем не менее композиция функций в Haskell является правильным ассоциативным:
infixr 9 .
Я знаю, что это на самом деле не делает разницы ли операция композиции функций левоассоциативно или справа ассоциативно. Тем не менее мне любопытно узнать, почему это не осталось ассоциативным. Две причины приходят на мой взгляд, для этого дизайнерского решения:
- Создатели Haskell хотели композиция функций логически похожа, как в
$
операции. - Одним из создателей Haskell был японский, который счел более интуитивно понятным, чтобы композиция композиции была правильной ассоциативной, а не левой ассоциативной.
Шутки в сторону, есть ли какая-либо полезная причина для того, чтобы композиция функций была правильной ассоциативной в Haskell? Будет ли иметь значение, если состав композиции в Haskell остался ассоциативным?
Существует лагерь, в котором утверждается, что право-ассоциативность (просто неверно) (http://www.mail-archive.com/[email protected]/msg12549.html) –
См. [Полная версия ] (http://www.mail-archive.com/[email protected]/msg12528.html) –
Интересное чтение. Я согласен, нет никакой причины, чтобы операция '' 'была правильной ассоциативной. Однако правильная ассоциативность не всегда ошибается.Например, операция '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'должна быть правильно ассоциативной, так что стоимость конкатенации минимальна и поэтому логические выражения могут быть закорочены соответственно. –