<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Aug 24, 2015 at 1:37 PM, Clinton Mead wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I see the problem now Sean. So in your example, is this correct:<div><br></div><div>"To use the machinery of 'Show', I have to add and instance Show T. But that would be an orphan instance. So there is no way for T to use show machinery without adding an orphan instance (aside from modifying a module not under your control)?"</div></div></blockquote><div><br></div><div>Correct.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Even newtype doesn't seem to help in your example. Show has all this machinery, but it seems completely unusable without adding an orphan instance or re-writing other people's modules. Is there no other way? This situation seems incredibly against re-usability, which I thought was Haskell's strength. Am I missing something?</div></div></blockquote></div><br>Orphan instances are one of unfortunate pain points of Haskell, though they are sometimes a necessary “evil.” Erik's first response describes a common technique for publishing and sharing orphan instances. See, for example, <a href="https://hackage.haskell.org/packages/search?terms=instances">https://hackage.haskell.org/packages/search?terms=instances</a> .</div><div class="gmail_extra"><br></div><div class="gmail_extra">Regards,</div><div class="gmail_extra">Sean</div></div>