2014-09-01 16 views
13

Sto usando ghci, questa sezione di codicenon può fare un esempio derivato di Num

newtype Gold = Gold Int 
    deriving (Eq, Ord, Show, Num) 

sta mostrando l'errore come

Can't make a derived instance of 'Num Gold': 
    'Num' is not a derivable class 
    Try GeneralizedNewTypeDeriving for GHC's newtype-deriving extension in the newtype declaration for 'Gold' 

prega di suggerire la soluzione.

+3

Come detto dal messaggio di errore di GHC: aggiungere '{- # LANGUAGE GeneralizedNewtypeDeriving # -}' all'inizio del file. – leftaroundabout

+3

Trovo divertente il fatto che GHCi abbia suggerito una soluzione che è stata felicemente ignorata. –

+9

@BartekBanachewicz Penso che l'OP non conoscesse _how_ per attivare le estensioni, da qui la domanda. – AndrewC

risposta

20

è possibile derivare da Eq, Ord, Enum, Bounded, Show e Read automaticamente solo. Al fine di ricavare altri casi, è necessario abilitare l'estensione GeneralizedNewtypeDeriving come suggerisce GHCi:

{-# LANGUAGE GeneralizedNewtypeDeriving #-} 

newtype Gold = Gold Int 
    deriving (Eq, Ord, Show, Num) 

Si noti che il {-# ... #-} non è un commento, ma un compiler pragma, in questo caso consentendo l'estensione data lingua.  

+0

messaggio di errore viene visualizzato: Non può fare un esempio derivato di 'Num Gold': Num non è un derivabile classe Prova GeneralizedNewtypeDeriving per di GHC Newtype-derivante estensione Nella dichiarazione newtype per 'Gold' –

+0

Grazie @MathematicalOrchid. Sono molto nuovo per Haskell. In realtà non ho incluso la riga {- # LANGUAGE GeneralizedNewTypeDeriving # -}. –

+0

Grazie a tutti .. –

Problemi correlati