Send Beginners mailing list submissions to
        beginners@haskell.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
        beginners-requ...@haskell.org

You can reach the person managing the list at
        beginners-ow...@haskell.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  Python's collections.defaultdict(list) in    Haskell?
      (Sylvain Henry)
   2. Re:  Python's collections.defaultdict(list) in    Haskell?
      (Sylvain Henry)


----------------------------------------------------------------------

Message: 1
Date: Tue, 10 Nov 2015 14:24:35 +0100
From: Sylvain Henry <hsy...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] Python's
        collections.defaultdict(list) in        Haskell?
Message-ID:
        <capmptcuhzsxdfohe4soo5npxuosztfwpzfan4+0jgu9u1s1...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

You can use insertWith:
http://hackage.haskell.org/package/containers-0.5.6.3/docs/Data-Map-Strict.html#g:6

E.g.:
let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"])]
let m = Map.fromList xs
Map.insertWith (++) "Item0" ["d"] m

"d" is cons'ed from the left, so it shouldn't be too slow. I don't know why
insertWith has this type instead of:
Ord k => (b -> a -> a) -> k -> b -> Map k a -> Map k a
which would allow you to write Map.insertWith (:) "Item0" "d" m

Maybe you should report it.

--
Sylvain

2015-11-10 6:23 GMT+01:00 Dan Stromberg <strom...@gmail.com>:

>
> These are some good leads.
>
> I'll be adding values one at a time, and yes, my keys aren't necessarily
> unique.
>
> Is there a way of cons'ing on the single values one at a time, that will
> avoid the slowness of ++ ?
>
> Thanks.
>
> On Mon, Nov 9, 2015 at 7:45 PM, Sylvain Henry <hsy...@gmail.com> wrote:
>
>> import qualified Data.Map as Map
>>
>> -- if your keys are unique
>> let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"]), ("Item2",
>> ["abc","def"])]
>> Map.fromList xs
>>
>> -- if you want to combine values for keys that are equal
>> let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"]), ("Item0",
>> ["abc","def"])]
>> Map.fromListWith (++) xs
>>
>> --
>> Sylvain
>>
>>
>> 2015-11-10 3:07 GMT+01:00 Dan Stromberg <strom...@gmail.com>:
>>
>>>
>>> I'm spending a little time here and there to learn some Haskell.  I'm
>>> coming from a chiefly Python/C/bash background.
>>>
>>> I want to build a Data.Map where the keys are strings, and the values
>>> are lists of strings.
>>>
>>> In Python, collections.defaultdict(list) makes this pretty
>>> straightforward. It gives a hash table ("dict") that has values that
>>> default to an empty list, since list() produces an empty list. More info
>>> here:
>>> https://docs.python.org/3/library/collections.html#collections.defaultdict
>>>
>>> Is there an equivalent in Haskell?
>>>
>>> Thanks!
>>>
>>> --
>>> Dan Stromberg
>>>
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners@haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>
>>>
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners@haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>
>>
>
>
> --
> Dan Stromberg
>
> _______________________________________________
> Beginners mailing list
> Beginners@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/20151110/52eddb42/attachment-0001.html>

------------------------------

Message: 2
Date: Tue, 10 Nov 2015 14:30:15 +0100
From: Sylvain Henry <hsy...@gmail.com>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <beginners@haskell.org>
Subject: Re: [Haskell-beginners] Python's
        collections.defaultdict(list) in        Haskell?
Message-ID:
        <CAPmptcWMjWXBto3h3_gNtC=iagcp08ekastfmdulrp1p9ha...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Oh forget the last part of my email: if the key doesn't exist, insertWith
has to insert the new value, hence its type...

--
Sylvain

2015-11-10 14:24 GMT+01:00 Sylvain Henry <hsy...@gmail.com>:

> You can use insertWith:
> http://hackage.haskell.org/package/containers-0.5.6.3/docs/Data-Map-Strict.html#g:6
>
> E.g.:
> let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"])]
> let m = Map.fromList xs
> Map.insertWith (++) "Item0" ["d"] m
>
> "d" is cons'ed from the left, so it shouldn't be too slow. I don't know
> why insertWith has this type instead of:
> Ord k => (b -> a -> a) -> k -> b -> Map k a -> Map k a
> which would allow you to write Map.insertWith (:) "Item0" "d" m
>
> Maybe you should report it.
>
> --
> Sylvain
>
> 2015-11-10 6:23 GMT+01:00 Dan Stromberg <strom...@gmail.com>:
>
>>
>> These are some good leads.
>>
>> I'll be adding values one at a time, and yes, my keys aren't necessarily
>> unique.
>>
>> Is there a way of cons'ing on the single values one at a time, that will
>> avoid the slowness of ++ ?
>>
>> Thanks.
>>
>> On Mon, Nov 9, 2015 at 7:45 PM, Sylvain Henry <hsy...@gmail.com> wrote:
>>
>>> import qualified Data.Map as Map
>>>
>>> -- if your keys are unique
>>> let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"]), ("Item2",
>>> ["abc","def"])]
>>> Map.fromList xs
>>>
>>> -- if you want to combine values for keys that are equal
>>> let xs = [("Item0", ["a","b","c"]), ("Item1", ["x","y"]), ("Item0",
>>> ["abc","def"])]
>>> Map.fromListWith (++) xs
>>>
>>> --
>>> Sylvain
>>>
>>>
>>> 2015-11-10 3:07 GMT+01:00 Dan Stromberg <strom...@gmail.com>:
>>>
>>>>
>>>> I'm spending a little time here and there to learn some Haskell.  I'm
>>>> coming from a chiefly Python/C/bash background.
>>>>
>>>> I want to build a Data.Map where the keys are strings, and the values
>>>> are lists of strings.
>>>>
>>>> In Python, collections.defaultdict(list) makes this pretty
>>>> straightforward. It gives a hash table ("dict") that has values that
>>>> default to an empty list, since list() produces an empty list. More info
>>>> here:
>>>> https://docs.python.org/3/library/collections.html#collections.defaultdict
>>>>
>>>> Is there an equivalent in Haskell?
>>>>
>>>> Thanks!
>>>>
>>>> --
>>>> Dan Stromberg
>>>>
>>>> _______________________________________________
>>>> Beginners mailing list
>>>> Beginners@haskell.org
>>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>>
>>>>
>>>
>>> _______________________________________________
>>> Beginners mailing list
>>> Beginners@haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>>>
>>>
>>
>>
>> --
>> Dan Stromberg
>>
>> _______________________________________________
>> Beginners mailing list
>> Beginners@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/20151110/a73ce130/attachment-0001.html>

------------------------------

Subject: Digest Footer

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


------------------------------

End of Beginners Digest, Vol 89, Issue 15
*****************************************

Reply via email to