<br><br><div class="gmail_quote">On Mon, Apr 12, 2010 at 4:32 AM, Ben Millwood <span dir="ltr">&lt;<a href="mailto:haskell@benmachine.co.uk">haskell@benmachine.co.uk</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Personally I think this approach is all rather OO. The way that seems<br>
most natural to me is:<br>
<br>
moveVehicleAcrossBridge :: Bridge -&gt; Vehicle -&gt; Maybe Move<br>
moveVehicleAcrossBridge bridge { maxWeight = max } vehicle { weight = w }<br>
 | w &gt; max = Nothing<br>
 | otherwise = {- ... moving stuff ... -}<br>
<br>
so you just test the properties directly as and when they are<br>
interesting to you.<br></blockquote><div><br>The problem with this is that it doesn&#39;t address the question the OP had.  The OP&#39;s question was how to enforce things at the type level, but this, while being a valid approach, allows heavy vehicles to attempt the bridge crossing.  I agree it&#39;s a nice way of encoding it, but if type level enforcement is called for then I don&#39;t see how it applies.<br>
<br>Jason<br></div></div>