2012-12-20 17 views
7

Więc lubię Haskella, ale jestem niezadowolony z klasy Num. Więc chcę zrobić moją własną hierarchię typeclass dla typów algebraicznych.
Problem polega na tym, że nawet jeśli importuję Preludium ukrywając Num i wszystko z nim powiązane, nadal jedynym sposobem na wprowadzenie literału 1 jest wpisanie t wystąpienia Num.
chciałbym, aby moje własne klasy fromInteger i pozostawić Num z obrazu całości, jak toPrzesłaniam fromInteger w Haskell

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" 

a następnie chciałbym wdrożyć fromInteger odpowiednio dla zupełnie nowych rodzajów i nigdy nie mówi nic o Num.

Czy istnieje sposób, aby powiedzieć parserowi, aby używał innej metody fromInteger?

Dzięki!

Odpowiedz

12

Szukasz GHC's RebindableSyntax extension.

Włącz go poprzez umieszczenie

{-# LANGUAGE RebindableSyntax #-} 

na początku pliku źródłowego.

+0

Fajnie, to świetnie! –

+5

@JosephVictor Spójrz również na [Preludium numeryczne] (http://www.haskell.org/haskellwiki/Numeric_Prelude). Może się okazać, że robi to, co chcesz. – dave4420

+1

To jeszcze bardziej (w zasadzie dokładnie to, co piszę!) –