Я играю с объявлениями infixr
, infixl
и infix
. Я понимаю, как работают infixr
и infixl
:
-- Test expression: 40 +++ 20 +++ 50 +++ 10 * 10
-- infixr 8 +++ -- Calculated as: (40 +++ (20 +++ (50 +++ 10))) * 10. Result: 630.
-- infixl 8 +++ -- Calculated as: (((40 +++ 20) +++ 50) +++ 10) * 10. Result: 800.
-- infixr 6 +++ -- Calculated as: 40 +++ (20 +++ (50 +++ (10 * 10))). Result: 75.
-- infixl 6 +++ -- Calculated as: ((40 +++ 20) +++ 50) +++ (10 * 10). Result: 125.
(+++) :: Int -> Int -> Int
a +++ b = a + (b `div` 2)
Но я не понимаю, как работает ключевое слово infix
. Правильно ли я думаю, что при infix
вам всегда нужно указывать порядок с круглыми скобками? Если да, то почему требуется числовой аргумент, учитывая, что скобки имеют самый высокий приоритет)?