Как реализовать оператор ^ в Haskell?

Я работаю над созданием группы экземпляров для типа данных Fraction в Haskell, и мне интересно, есть ли место, где я мог бы реализовать оператор ^.

Я имею в виду, что у меня есть несколько экземпляров различных типов Num, и в этих экземплярах я определяю общие операции, такие как +, -и т. д.

При этом тип данных ведет себя как обычное число, так как я хочу, чтобы он был (, что означает, что я могу вызывать такие вещи, как (Frac 1 2) + (Frac 1 4), и возвращатьFrac 3 4)

Я пытаюсь реализовать ^напрямую. Прямо сейчас я определил это так:

(|^|) :: Fraction -> Int -> Fraction
(|^|) f = foldr (*) mempty. flip replicate f  

Когда я пытаюсь изменить имя функции на ^, я получаю сообщение об ошибке, поскольку оно противоречит определению ^в Prelude. Есть ли тип Num, экземпляр которого я могу дать моему типу Fraction, чтобы я мог использовать на нем оператор ^?

Спасибо!

6
задан Jonathan Leffler 10 March 2013 в 07:02
поделиться