声明后自动导出实例
在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类模块和数据类型模块是否想要保存实例,因此我创建了第三个库,因为在某些应用程序中需要实例声明。
GHC有StandaloneDeriving
延期延长,你可以
{-# LANGUAGE StandaloneDeriving #-}
import MoneyModule
deriving instance Read Money
派生许多类的实例。
要解决关于独立导出的问题,请参阅daniels解决方案。 但正如你在你的问题中提到的,孤儿实例不是最佳实践,ghc会产生警告。 为了抑制ghc孤儿的警告,你可以使用flag -fno-warn-orphans
。 你也可以将它添加到你的cabal文件中:
...
library
exposed-modules: ...
...
ghc-options: -fno-warn-orphans
...
链接地址: http://www.djcxy.com/p/33165.html