2014-09-01 43 views
13

的派生實例,我使用ghci,該代碼段不能使民

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

顯示錯誤的

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' 

請建議的解決方案。

+3

正如GHC的錯誤信息所述:將'{ - #LANGUAGE GeneralizedNewtypeDivingiving# - }'添加到文件的頂部。 – leftaroundabout 2014-09-01 10:29:45

+3

我發現GHCi建議您很高興忽視的解決方案很有趣。 – 2014-09-01 10:45:37

+9

@BartekBanachewicz我認爲OP並不知道如何打開擴展,因此是個問題。 – AndrewC 2014-09-01 11:01:36

回答

20

您只能獲得從EqOrdEnumBoundedShowRead自動。爲了獲得其他情況下,您需要啓用GeneralizedNewtypeDeriving擴展爲GHCI提示:

{-# LANGUAGE GeneralizedNewtypeDeriving #-} 

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

注意,{-# ... #-}不是評論,而是compiler pragma,在這種情況下,使給定的語言擴展。  

+0

錯誤消息表明:不能讓「金民」的派生實例: Num是不是GHC的NEWTYPE,獲得擴展 在NEWTYPE聲明「黃金」 – 2014-09-01 10:45:24

+0

謝謝@MathematicalOrchid一個衍生類 嘗試GeneralizedNewtypeDeriving。我對Haskell很新。其實我沒有加入{ - #LANGUAGE GeneralizedNewTypeDeriving# - }行。 – 2014-09-01 10:54:03

+0

謝謝大家.. – 2014-09-01 10:56:45