<span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 13px; ">Is this what you want? (note that it does not preserve ordering, but neither does Map):<div><br></div><div>
<div>import Data.List</div><div>import Data.Function</div><div><br></div></div><div><div>noDups :: (Ord b, Num a) =&gt; [(a,b)] -&gt; [(a,b)]</div><div>noDups = map sumGroup . groupBy ((==) `on` snd) . sortBy (compare `on` snd) where</div>
<div>  sumGroup xs = (sum $ map fst xs, snd $ head xs)</div><br>If you use the fact that the list has at most one value per currency, perhaps you should just keep the values in a map instead.</div><div><br></div><div>/J</div>
</span><br><div class="gmail_quote">On 7 June 2011 03:43, Tom Murphy <span dir="ltr">&lt;<a href="mailto:amindfv@gmail.com">amindfv@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi All,<br>
     This seems like an inefficient way to do what I&#39;m trying to do.<br>
I&#39;d really appreciate any suggestions or comments:<br>
<br>
<br>
import qualified Data.Map as Map<br>
<br>
data Currency = Dollar<br>
              | Yen<br>
              | XP<br>
              | Health<br>
              | Street_Cred<br>
              | Peso<br>
    deriving (Show, Eq, Ord) -- why ord?<br>
<br>
withDups = [(30, Dollar), (-20, Street_Cred), (-2, Dollar), (30, XP),<br>
(15, Peso), (30, XP)]<br>
<br>
<br>
flipAssoc (a, b) = (b, a)<br>
<br>
noDups = Map.fromListWith (+) (map flipAssoc withDups)<br>
<br>
final = map flipAssoc $ Map.toList noDups<br>
<br>
<br>
<br>
Thanks for your time!<br>
Tom<br>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</blockquote></div><br>