2012-12-20 21 views
7

Haskell'i seviyorum, ama Num sınıfından memnun değilim. Bu yüzden, cebirsel türler için kendi sınıfım hiyerarşik yapmak istiyorum.
Sorun, Prelude saklanan Num ve onunla ilişkili her şeyi almama rağmen, literal 1'i t türünde yapmak için tek yol hala t örneğini Num yapmaktır.
buIşkert'te Hashell'den Geçersiz

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" 

gibi ben kendi fromInteger sınıfını yapmak ve tamamen resmin dışında Num bırakmak isterdim , sonra yepyeni türleri için uygun fromInteger uygulayacağını ve asla Num hakkında bir şey söylemek zorundayım.

Ayrıştırıcıya farklı bir fromInteger yöntemi kullanmanın bir yolu var mı?

Teşekkürler!

cevap

12

GHC'ler için RebindableSyntax extension'u arıyoruz.

kaynak dosyasının en üstünde

{-# LANGUAGE RebindableSyntax #-} 

koyarak etkinleştirin.

+0

Harika, bu harika! –

+5

@JosephVictor [Sayısal Prelüd] (http://www.haskell.org/haskellwiki/Numeric_Prelude) 'a da bakın. Ne istersen onu bulabilirsin. – dave4420

+1

Bu daha da havalı (temel olarak tam olarak yazdığım şey!) –