[Haskell-beginners] Adapting code from an imperative loop

Matt Williams matt.williams45.mw at gmail.com
Fri Jun 19 07:05:53 UTC 2015


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.

Have now got it partially working with fromListWith.

Thanks a lot,
Matt

On Fri, 19 Jun 2015 07:18 Bob Ippolito <bob at redivi.com> wrote:

> On Friday, June 19, 2015, Matt Williams <matt.williams45.mw at gmail.com>
> wrote:
>
>> Dear All,
>>
>> I have been wrestling with this for a while now.
>>
>> 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.
>>
>> In an imperative language this might look like:
>>
>> myMap = new map()
>> for elem in myElems:
>>     key = makeKey(elem)
>>     myMap[key] = myMap[key] + elem
>>
>> I have been trying to do this in Haskell, but am stuck on how to hand the
>> Map back to itself each time.
>>
>> I have a function :: elem -> [p,q] to make the key, but the Map.insert
>> function has the following signature:
>>
>> insert :: (Hashable
>> <https://hackage.haskell.org/package/hashmap-1.0.0.2/docs/Data-Hashable.html#t:Hashable>
>>  k, Ord
>> <https://hackage.haskell.org/packages/archive/base/4.2.0.2/doc/html/Data-Ord.html#t:Ord> k)
>> => k -> a -> HashMap
>> <https://hackage.haskell.org/package/hashmap-1.0.0.2/docs/Data-HashMap.html#t:HashMap> k
>> a -> HashMap
>> <https://hackage.haskell.org/package/hashmap-1.0.0.2/docs/Data-HashMap.html#t:HashMap> k
>> a
>>
>> 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.
>>
>
> This is typically done with fromListWith or a combination of foldl' and
> insertWith or alter.
>
> -bob
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20150619/e02ff95c/attachment-0001.html>


More information about the Beginners mailing list