无法创建Num的派生实例

15
我正在使用 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'

请提供解决方案。

4
根据 GHC 的错误提示:在你的文件顶部添加 {-# LANGUAGE GeneralizedNewtypeDeriving #-} - leftaroundabout
9
我认为提问者不知道如何打开扩展程序,因此提出了这个问题。 - AndrewC
1个回答

25

您只能自动推导出 EqOrdEnumBoundedShowRead 类型类的实例。如果要推导其他类型类的实例,您需要启用 GHCi 建议的 GeneralizedNewtypeDeriving 扩展:

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

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

请注意,{-# ... #-} 不是注释,而是一种编译器指示,在此情况下启用了特定的语言扩展。


错误信息显示:无法创建“Num Gold”的派生实例: Num不是可派生的类 尝试使用GHC的newtype-deriving扩展的GeneralizedNewtypeDeriving 在“Gold”的newtype声明中。 - Ammlan Ghosh
谢谢@MathematicalOrchid。我对Haskell非常陌生。实际上,我没有包含这一行 {-# LANGUAGE GeneralizedNewTypeDeriving #-}。 - Ammlan Ghosh
10
没必要这么无礼。考虑到句法,楼主可能会误以为这是一条评论,这是可以理解的。 - AndrewC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接