Я определил свой собственный оператор:Как использовать правую ассоциативную оп в выражении?
infixr 6 >+
x >+ y = (+ x) y
Это право ассоциативно.
А теперь я хочу, чтобы использовать в следующем выражении:
(`mod` 14) (>+ 5) 10
Но я получаю сообщение об ошибке:
<interactive>:11:1:
Non type-variable argument in the constraint: Integral (a -> a)
(Use FlexibleContexts to permit this)
When checking that ‘it’ has the inferred type
it :: forall a. (Integral (a -> a), Num a) => a
Как я могу это исправить?
Ни один из предоставленных вами кодов не содержит ничего о правильной ассоциативности. Правильная ассоциативность только делает что-то, когда вы используете функцию infix. Функция-приложение _always_ имеет самый высокий приоритет. –
@LouisWasserman Теперь я понимаю, откуда возникла путаница OP! – Jubobs
Я думаю, что OP ожидает '(> + 5)' применять к '10' перед' (\ 'mod \' 14) ', но это никогда не произойдет, в основном. –