2012-12-20 14 views
7

Quindi mi piace Haskell, ma sono insoddisfatto della classe Num. Quindi voglio creare il mio tipo gerarchico di tipografia per i tipi algebrici.
Il problema è, anche se importassi Prelude nascondendo Num e tutto ciò che è associato ad esso, ancora l'unico modo per rendere il letterale 1 ha tipo t è quello di rendere t instance Num.
Mi piacerebbe fare il mio classe fromInteger e lasciare Num fuori dal quadro del tutto, come questoOverride fromInteger in 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" 

e poi vorrei implementare fromInteger in modo appropriato per tipi di nuovo e non hanno mai dire nulla su Num.

C'è un modo per dire al parser di utilizzare un metodo diverso da Intero?

Grazie!

risposta

12

Siete alla ricerca di GHC RebindableSyntax extension.

abilitarlo mettendo

{-# LANGUAGE RebindableSyntax #-} 

nella parte superiore del file di origine.

+0

Fantastico, è fantastico! –

+5

@JosephVictor Guarda anche [Prelude numerico] (http://www.haskell.org/haskellwiki/Numeric_Prelude). Potresti scoprire che fa quello che vuoi. – dave4420

+1

Questo è ancora più bello (in pratica, esattamente quello che sto scrivendo!) –