<div class="gmail_quote">On Tue, Jun 23, 2009 at 2:20 AM,  <span dir="ltr">&lt;<a href="mailto:papa.eric@free.fr">papa.eric@free.fr</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">&gt; Simple: the definition of MonadState uses those extensions.<br>
<br>
</div>Thanks, yes it helps and explains all. :^)<br>
<br>
I suppose then that if -XFlexibleContexts is indeed required by the standard libraries, it is a &quot;safe&quot; extension, meaning supported by all compilers? Are many such extensions de-facto standard that anyone can enable by default?</blockquote>
<div><br></div><div>You should treat &quot;all compilers&quot; the same way as a universal quantifier in mathematics.  It&#39;s not just all the compilers you know about, but all possible compilers.  In which case the answer to your question is of course no.</div>
<div><br></div><div>(Beware: incoming my &quot;recurring rant of the month&quot;, which I am trying ferociously to cram down the throats of my peers :-p)</div><div><br></div><div>By measuring your software&#39;s portability on this stricter criterion, you contribute to the exponential growth of our field.  It means that <i>every </i>future compiler can compile your code for 10% less effort<i>.  </i>A future innovation may rely on one such compiler, which means it can use your code 10% sooner -- which may be the difference between your good code being used and it being badly reimplemented (and future bug fixes in the new code does not benefit yours).  And so on, ad infinitum.</div>
<div><br></div><div>When you think about potability, think about it from the perspective of twenty years in the future.  Fundeps are becoming obsolete now, will your code still work when they are gone?  Will it still work when the typeclass resolution algorithm is obsoleted by a superior algorithm (I&#39;m looking at you, Oleg! :-)?  When Haskell is obsolete, how hard will it be to port?</div>
<div><br></div><div>Of course, there is definitely a place for extensions -- we should be testing them, to help refine the language that will one day obsolete Haskell. A culture of extension users helps us to know that, for example, even though implicit params are cool, nobody cares.</div>
<div><br></div><div>I think &quot;works on all existing compilers&quot; is a fine definition of &quot;portable&quot; -- let&#39;s just realize that there is a level of portability beyond that, a level which gives our whole field a little boost.</div>
<div><br></div><div>&lt;/rant&gt;</div><div><br></div><div>Luke</div></div>