Подтвердить что ты не робот

Определение локального инфикс-оператора в Haskell

В этой программе Haskell @@ - это инфиксный оператор, который я хочу определить только локально внутри тела функции f. (Естественно, моя фактическая программа сложнее, чем это, и есть веская причина использовать нотацию infix.)

infixl 5 @@

(@@) = undefined

f x = x @@ 5 where x @@ y = (x+1) * (y+1)

main = print (f 7)

Однако, если я также не сделаю глобальное определение, написанное здесь как (@@) = undefined, GHC жалуется, что "подпись четности для @@ отсутствует сопровождающая привязка". Есть ли способ обойти это без глобального определения символа оператора?

4b9b3361

Ответ 1

Просто размещение объявления fixity в предложении where кажется хорошим:

f x = x @@ 5 where
    infixl 5 @@
    x @@ y = (x+1) * (y+1)