Tar*_*sch 13 haskell typeclass
在Haskell中,在定义数据类型时,您可以选择自动派生某些实例,但是我可以推迟自动派生,甚至可以将其放在另一个库中吗?
这是一个例子:
在Haskell中自动导出是一个实时节省!
module MoneyModule where
data Money = Money Int
  deriving Show
现在我想使用MoneyModule,但我也想要一个Read实例Money:
module ExternalModule where
instance Read Money where
  read = error "Can't this be done automatically instead?"
但我真的更喜欢它自动派生,我知道如果只有MoneyModule作者自动派生Read实例,ghc可以做到.
我知道:
MoneyModule通过使用缺少的实例修补问题来解决实际问题.在我的情况下,我无法遵循最佳实践,因为类型类与数据类型无关.我怀疑类型类模块和数据类型模块是否想要保存实例,因此我创建了第三个库,因为在某些应用程序中需要实例声明.
Dan*_*her 19
GHC有StandaloneDeriving扩展,你可以
{-# LANGUAGE StandaloneDeriving #-}
import MoneyModule
deriving instance Read Money
派生许多类的实例.
要解决有关独立推导的问题,请参阅丹尼尔斯解决方案。但正如您在问题中提到的,孤立实例不是最佳实践,并且 ghc 会生成警告。要抑制 ghc 孤儿警告,您可以使用该标志-fno-warn-orphans。您还可以将其添加到您的 cabal 文件中:
...
library
  exposed-modules: ...
  ...
  ghc-options: -fno-warn-orphans
...