I think we actually agree more than we disagree;  I do think distinguishing hard and soft upper bounds (no matter what they are called)  would help,  and I&#39;m just trying to justify them to some of the more dismissive attitudes towards the idea <div>
<br></div><div>The only thing I think we (might) disagree on is the relative importance of distinguishing hard and soft bounds versus being able to change bounds easily after the fact (and *without* changing the version number associated with the package.)   </div>
<div><br></div><div>And on that count,  given the choice,  I pick being able to change bounds after the fact, hands down.   I believe this is more likely to significantly improve the current situation than distinguishing the two types of bound alone.   However,  being able to specify both (and change both) after the fact may prove to be even better.</div>
<div><br></div><div>Best,</div><div>Leon<br><br><div class="gmail_quote">On Sat, Aug 18, 2012 at 11:52 PM, wren ng thornton <span dir="ltr">&lt;<a href="mailto:wren@freegeek.org" target="_blank">wren@freegeek.org</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">On 8/17/12 11:28 AM, Leon Smith wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
And the<br>
difference between reactionary and proactive approaches I think is a<br>
potential justification for the &quot;hard&quot; and &quot;soft&quot; upper bounds;  perhaps we<br>
should instead call them &quot;reactionary&quot; and &quot;proactive&quot; upper bounds instead.<br>
</blockquote>
<br></div>
I disagree. A hard constraint says &quot;this package *will* break if you violate me&quot;. A soft constraint says &quot;this package *may* break if you violate me&quot;. These are vastly different notions of boundary conditions, and they have nothing to do with a proactive vs reactionary stance towards specifying constraints (of either type).<br>

<br>
The current problems of always giving (hard) upper bounds, and the previous problems of never giving (soft) upper bounds--- both stem from a failure to distinguish hard from soft! The current/proactive approach fails because the given constraints are interpreted by Cabal as hard constraints, when in truth they are almost always soft constraints. The previous/reactionary approach fails because when the future breaks noone bothered to write down when the last time things were known to work.<br>

<br>
To evade both problems, one must distinguish these vastly different notions of boundary conditions. Hard constraints are necessary for blacklisting known-bad versions; soft constraints are necessary for whitelisting known-good versions. Having a constraint at all shows where the grey areas are, but it fails to indicate whether that grey is most likely to be black or white.<span class="HOEnZb"><font color="#888888"><br>

<br>
-- <br>
Live well,<br>
~wren</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
______________________________<u></u>_________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/<u></u>mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br></div>