<div class="gmail_quote">On Thu, Aug 19, 2010 at 11:46 PM, wren ng thornton <span dir="ltr"><<a href="mailto:wren@community.haskell.org">wren@community.haskell.org</a>></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' :: Ord k => (k -> a -> a -> a) -> k -> a -> Map k a -><br>
Map k a<br>
insertWithKey' f kx x t0 = kx `seq` go t0<br>
where<br>
go t = case t of<br>
Tip -> singleton kx $! x<br>
Bin sy ky y l r<br>
-> case compare kx ky of<br>
LT -> balance ky y (go l) r<br>
GT -> balance ky y l (go r)<br>
EQ -> let x' = f kx x y in seq x' (Bin sy kx x' l r)<br>
</blockquote>
<br>
<br></div>
As a style issue, I'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 -> balance ky y (go l) r<br>
GT -> balance ky y l (go r)<br>
EQ -> let x' = f kx x y in seq x' (Bin sy kx x' l r)<br></div></blockquote></div><br>I'll definitely do that in the final version.<br><br>-- Johan<br><br>