2014-09-01 12 views
13

ich ghci verwende, diesen Code Abschnittkann nicht abgeleitet Instanz von Num machen

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

wird der Fehler als

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' 

Bitte legen nahe, die Lösung zeigt.

+3

Wie von GHC Fehlermeldung: add '{- # Language GeneralizedNextypeDeriving # -} 'an den Anfang der Datei. – leftaroundabout

+3

Ich finde es lustig, dass GHCi eine Lösung vorgeschlagen hat, die Sie gerne ignoriert haben. –

+9

@BartekBanachewicz Ich denke, die OP wusste _how_ nicht, Erweiterungen zu aktivieren, daher die Frage. – AndrewC

Antwort

20

können Sie nur ableiten aus Eq, Ord, Enum, Bounded, Show und Read automatisch. Um andere Fälle abzuleiten, müssen Sie die GeneralizedNewtypeDeriving Erweiterung ermöglichen, wie GHCi schlagen vor:

{-# LANGUAGE GeneralizedNewtypeDeriving #-} 

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

Beachten Sie, dass die {-# ... #-} keinen Kommentar, sondern ein compiler pragma, in diesem Fall ermöglicht die gegebene Spracherweiterung.  

+0

Fehlermeldung angezeigt: Kann nicht eine abgeleitete Instanz von ‚Num Gold‘ machen: Num ist kein ableitbare Klasse Try GeneralizedNewtypeDeriving für GHC der newtype-Ableitung Erweiterung In der newtype Erklärung für ‚Gold‘ –

+0

Danke @MathematicalOrchid. Ich bin sehr neu in Haskell. Eigentlich habe ich die Zeile {- # LANGUAGE GeneralizedNewTypeDeriving # -} nicht eingefügt. –

+0

Vielen Dank alle .. –

Verwandte Themen