在 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
最好通过使用丢失的实例修补它来解决实际问题。- 拥有孤儿实例被认为是不好的。实例声明最好放在定义类型类或数据类型的模块中。
就我而言,我无法遵循最佳实践,因为类型类与数据类型无关。我怀疑类型类模块和数据类型模块想要保存实例,因此我创建了第三个库,因为在某些应用程序中您需要实例声明。