In Haskell, when defining a data type you can choose to automatically derive some instances, but can I defer the automatic deriving, perhaps even put it in another library?
Here is an example:
Automatic deriving in Haskell is a real time saver!
module MoneyModule where
data Money = Money Int
deriving Show
Now I wish to use the MoneyModule
, but I also want a Read
instance for Money
:
module ExternalModule where
instance Read Money where
read = error "Can't this be done automatically instead?"
But I would really have preferred for it to be derived automatically, which I know ghc could have done if only the MoneyModule author had auto-derived the Read
instance.
I know that:
- It's better to fix the problem in the actual
MoneyModule
by patching it with the missing instance. - That it's considered bad to have orphan instances. Instance declarations are preferably put in the module where either the type class or the data type was defined.
In my case I can't follow best practices since the type class is unrelated to the data type. I doubt that the type class module nor the data type module wants to hold the instance, so therefore I'm creating a third library because in some applications you need the instance declaration.