在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?"
但我真的寧願爲它自動導出,這我知道GHC能如果只有MoneyModule作者自動派生了Read
實例,則完成此操作。
我知道:
- 這是更好地與丟失的情況下修補它來解決實際
MoneyModule
問題。 - 有孤兒實例被認爲是不好的。實例聲明 最好放在定義了類型類型或數據類型的模塊中。
在我的情況下,我無法遵循最佳實踐,因爲類型類與數據類型無關 。我懷疑類型模塊和數據類型模塊 想要保存實例,因此我創建了第三個庫,因爲在某些 應用程序中,您需要實例聲明。