2011-05-21 8 views
22

Bu tür bir tanıma sahibim:Haskell: Özel tip için Show Türetme

data Operace = Op (Int->Int->Int) String (Int->Int->Int) deriving Show 

Bu türü interaktif kabukta (GHCi) yazdırmak istiyorum. Tüm yazdırılması gereken String alanıdır.

Bunu denedim:

Ama hala devam ediyor

No instance for (Show (Int -> Int -> Int)) 
    arising from the 'deriving' clause of a data type declaration 
Possible fix: 
    add an instance declaration for (Show (Int -> Int -> Int)) 
    or use a standalone 'deriving instance' declaration, 
     so you can specify the instance context yourself 
When deriving the instance for (Show Operace) 

Show için Show eklemek istemiyorum, tek istediğim dize.

Yardımlarınız için teşekkürler!

DÜZENLEME:

Gelecekte referans olması için sabit sürüm:

data Operace = Op (Int->Int->Int) String (Int->Int->Int) 

instance Show Operace where 
    show (Op op str inv) = str 

cevap

20

örneği beyanı gitmek doğru yoldur. Orijinal data bildirgesindeki bu hatalı deriving yan tümcesini kaldırmayı unutmuşsunuz gibi görünüyor.

data Operace = Op (Int->Int->Int) String (Int->Int->Int) 

instance Show Operace where 
    show (Op op str inv) = show str 
+1

Evet, öyleydi, teşekkürler. Sınıf tanımında ana türlerin listesini bildirdiğiniz C-benzeri dillerdeki gibi çalışmasını bekledim. –

+1

@mzabsky: Bu, varolan bir tür için tanımına dokunmadan ek tip sınıf örnekleri tanımlayabileceğiniz gibi güçlü bir mekanizmadır. – hammar

19

sadece ilk Text.Show.Functions içe Show türetebilirsiniz.