Ivan Lazar Miljenovic schrieb:
Henning Thielemann
writes: My conclusion was: Never define orphan instances privately. If an instance cannot be added to the packages that provide the associated type or the class, then discuss the orphan instance with the maintainers of the type and the class and setup a package that provides that instance.
So you recommend having packages specifically for instances?
My main problem with this is if you want a custom variant of that instance. Let's take FGL graphs for example with instances for QuickCheck's Arbitrary class. Maybe you want arbitrary graphs that are simple, or maybe multiple edges are fine. Even when considering Arbitrary instances for something like String you may wish to have a custom variant that makes sense for what you're testing.
Especially multiple instances warrant a lot of trouble: http://www.haskell.org/haskellwiki/Multiple_instances If there isn't one natural instance, then define no instance at all and instead define 'newtypes' and instances on them.