
The concept is simple: an orphan instance is an instance instance Class Type ... which is in neither the module where Class is declared, nor the module where Type is declared. In your case, both 'Num' and 'Data.Vector' are defined elsewhere. One reason you might not want this is because many people might define identical or similar instances for the same types, so if/when that instance is actually added to the module defining the type or class in question it will break a lot of code. But in my mind this is not an argument *against* orphan instances but rather an argument *for* contributing instances back upstream (which is certainly a good idea when it makes sense). For example if you think the Num instance for Data.Vector is something that would be generally useful you can submit a patch to the Data.Vector maintainer, and then delete the instance from your module when a new version of Data.Vector is released. However, sometimes there are good reasons not to do this -- for example if (say) the implementation of the Num instance for Data.Vector relied on some *other* package and it was desirable not to add this other package as a dependency for Data.Vector. I seem to recall there is also something about GHC having to do more work for orphan instances, but I don't recall the details. And I am not sure why I should have to change my code to save GHC some work -- I want *GHC* to work harder to save *me* work, not the other way around. -Brent On Mon, Feb 06, 2012 at 04:25:05PM +0100, Adrien Haxaire wrote:
Thank you.
It will save me some time, and I will be happy using the nice API of Data.Vector without having to wrap everything.
I will still read more on orphan instances to be sure I understand the concept and the consequences, even if now I know they are minor for me.
Adrien
On Mon, 6 Feb 2012 08:53:14 -0500, Brent Yorgey wrote:
Yes: don't bother. Having an orphan instance is really not that big of a deal. And it's certainly not worth making a newtype just to avoid the warning. If you want to turn off the warning you can add
{-# OPTIONS_GHC -fno-warn-orphans #-}
to the top of your file.
-Brent
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners
_______________________________________________ Beginners mailing list Beginners@haskell.org http://www.haskell.org/mailman/listinfo/beginners