<p dir="ltr">I tried doing it as a fold (the pattern of accumulating a value, where the accumulated value was the resulting Map), but couldn't manage the syntax.</p>
<p dir="ltr">Have now got it partially working with fromListWith.</p>
<p dir="ltr">Thanks a lot,<br>
Matt</p>
<br><div class="gmail_quote"><div dir="ltr">On Fri, 19 Jun 2015 07:18 Bob Ippolito <<a href="mailto:bob@redivi.com">bob@redivi.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Friday, June 19, 2015, Matt Williams <<a href="mailto:matt.williams45.mw@gmail.com" target="_blank">matt.williams45.mw@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Dear All,</p>
<p dir="ltr">I have been wrestling with this for a while now.</p>
<p dir="ltr">I have a list of data items, and want to be able to access them, in a Hash Map, via a short summary of their characteristics.</p>
<p dir="ltr">In an imperative language this might look like:</p>
<p dir="ltr">myMap = new map()<br>
for elem in myElems:<br>
    key = makeKey(elem)<br>
    myMap[key] = myMap[key] + elem</p>
<p dir="ltr">I have been trying to do this in Haskell, but am stuck on how to hand the Map back to itself each time.</p>
<p dir="ltr">I have a function :: elem -> [p,q] to make the key, but the Map.insert function has the following signature:</p>
<p dir="ltr">insert :: (<a href="https://hackage.haskell.org/package/hashmap-1.0.0.2/docs/Data-Hashable.html#t:Hashable" target="_blank">Hashable</a> k, <a href="https://hackage.haskell.org/packages/archive/base/4.2.0.2/doc/html/Data-Ord.html#t:Ord" target="_blank">Ord</a> k) => k -> a -> <a href="https://hackage.haskell.org/package/hashmap-1.0.0.2/docs/Data-HashMap.html#t:HashMap" target="_blank">HashMap</a> k a -> <a href="https://hackage.haskell.org/package/hashmap-1.0.0.2/docs/Data-HashMap.html#t:HashMap" target="_blank">HashMap</a> k a</p>
<p dir="ltr">My thought was that I needed to go through the list of the elems, and at each point add them to the Hash Map, handing the updated Map onto the next step - but this is what I cannot write.</p></blockquote><div><br></div><div>This is typically done with fromListWith or a combination of foldl' and insertWith or alter.</div><div><br></div><div>-bob</div>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div>