Переопределение fromInteger в Haskell

поэтому мне нравится Haskell, но я недоволен классом Num. Поэтому я хочу сделать свой собственный иерархический класс для алгебраических типов.
Проблема в том, что даже если я импортирую Prelude hiding Num и все, что с ним связано, все равно единственный способ сделать литерал 1 иметь тип t-это сделать экземпляр t Num.
Я хотел бы сделать свой собственный класс fromInteger и полностью исключить Num из картины, как это

import Prelude hiding (everything having to do with Num)
import qualified Prelude (everything having to do with Num)

class (Eq fi) => FromInteger fi where
  fromInteger :: Integral -> fi

foo :: (FromInteger fi) => fi -> String
foo 1 = "that was a one"
foo 0 = "that was a zero"
foo n = "that was neither zero nor one"

и тогда я бы реализовал fromInteger подходит для совершенно новых типов и никогда не должен ничего говорить о Num.

есть ли способ сказать парсеру использовать другой метод fromInteger?

спасибо!

1 ответов


вы ищете GHC в расширение RebindableSyntax.

включите его, поставив

{-# LANGUAGE RebindableSyntax #-}

в верхней части исходного файла.