在Haskell中,在定义数据类型时,可以选择自动派生某些实例,但我是否可以推迟自动派生,甚至可以将其放到另一个库中?
下面是一个示例:
在Haskell中自动派生是一个实时保护程序!
module MoneyModule where
data Money = Money Int
deriving Show现在我希望使用MoneyModule,但我也希望为Money提供一个Read实例
module ExternalModule where
instance Read Money where
read = error "Can't this be done automatically instead?"但是我真的更希望它是自动派生的,我知道如果MoneyModule作者有自动派生的Read实例的话,ghc是可以做到的。
我知道:
MoneyModule中的问题。在我的例子中,我无法遵循最佳实践,因为type类与数据类型无关。我怀疑类型类模块或数据类型模块是否希望保存实例,因此我创建了第三个库,因为在某些应用程序中,您需要实例声明。
发布于 2012-10-12 04:40:16
GHC有StandaloneDeriving扩展,有了这个扩展,您可以
{-# LANGUAGE StandaloneDeriving #-}
import MoneyModule
deriving instance Read Money为许多类派生实例。
发布于 2012-10-12 16:18:36
要解决独立派生的问题,请参阅daniels的解决方案。但是正如您在问题中提到的,孤儿实例不是最佳实践,ghc将生成警告。若要压制ghc孤儿警告,可以使用标志-fno-warn-orphans。您还可以将其添加到您的阴谋文件中:
...
library
exposed-modules: ...
...
ghc-options: -fno-warn-orphans
...https://stackoverflow.com/questions/12852345
复制相似问题