Я работаю над созданием группы экземпляров для типа данных Fraction в Haskell, и мне интересно, есть ли место, где я мог бы реализовать оператор ^
.
Я имею в виду, что у меня есть несколько экземпляров различных типов Num
, и в этих экземплярах я определяю общие операции, такие как +
, -
и т. д.
При этом тип данных ведет себя как обычное число, так как я хочу, чтобы он был (, что означает, что я могу вызывать такие вещи, как (Frac 1 2) + (Frac 1 4)
, и возвращатьFrac 3 4
)
Я пытаюсь реализовать ^
напрямую. Прямо сейчас я определил это так:
(|^|) :: Fraction -> Int -> Fraction
(|^|) f = foldr (*) mempty. flip replicate f
Когда я пытаюсь изменить имя функции на ^
, я получаю сообщение об ошибке, поскольку оно противоречит определению ^
в Prelude. Есть ли тип Num
, экземпляр которого я могу дать моему типу Fraction
, чтобы я мог использовать на нем оператор ^
?
Спасибо!