<div class="gmail_quote">On Thu, Aug 19, 2010 at 11:46 PM, wren ng thornton <span dir="ltr">&lt;<a href="mailto:wren@community.haskell.org">wren@community.haskell.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div class="im">Johan Tibell wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
    insertWithKey&#39; :: Ord k =&gt; (k -&gt; a -&gt; a -&gt; a) -&gt; k -&gt; a -&gt; Map k a -&gt;<br>
Map k a<br>
    insertWithKey&#39; f kx x t0 = kx `seq` go t0<br>
      where<br>
        go t = case t of<br>
          Tip -&gt; singleton kx $! x<br>
          Bin sy ky y l r<br>
              -&gt; case compare kx ky of<br>
                   LT -&gt; balance ky y (go l) r<br>
                   GT -&gt; balance ky y l (go r)<br>
                   EQ -&gt; let x&#39; = f kx x y in seq x&#39; (Bin sy kx x&#39; l r)<br>
</blockquote>
<br>
<br></div>
As a style issue, I&#39;d suggest using a pattern instead of the first case:<br>
<br>
    go Tip = singleton kx $! x<br>
    go (Bin sy ky y l r) =<div class="im"><br>
        case compare kx ky of<br>
        LT -&gt; balance ky y (go l) r<br>
        GT -&gt; balance ky y l (go r)<br>
        EQ -&gt; let x&#39; = f kx x y in seq x&#39; (Bin sy kx x&#39; l r)<br></div></blockquote></div><br>I&#39;ll definitely do that in the final version.<br><br>-- Johan<br><br>