【发布时间】:2012-10-02 20:56:07
【问题描述】:
在 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中通过使用缺少的实例进行修补来解决问题。 - 认为拥有孤儿实例是不好的。实例声明 最好放在类型类或数据所在的模块中 类型已定义。
在我的情况下,我无法遵循最佳实践,因为类型类是不相关的 到数据类型。我怀疑类型类模块和数据类型模块 想要保存该实例,因此我正在创建第三个库,因为在某些 您需要实例声明的应用程序。
【问题讨论】: