Proposal for containers: Add 'lookup' function to Data.Set

David Thomas davidleothomas at gmail.com
Wed Jun 29 20:57:36 UTC 2016


Well, "intern" includes a "and if it is not there, add it".  Calling
this "intern" without that behavior would be highly misleading.  That
said, maybe we just want an "intern" function?  It would save us a dip
into the set, for new strings and leave (marginally) less room to make
a mistake.  Are there many cases where we want `lookup` where we don't
actually want `intern`?

On Tue, Jun 28, 2016 at 2:22 AM, Chris Wong <lambda.fairy at gmail.com> wrote:
> Python uses "intern", so perhaps that can serve as the name.
>
> (See https://docs.python.org/2/library/functions.html#intern)
>
> On Tue, Jun 28, 2016 at 9:47 AM, David Feuer <david.feuer at gmail.com> wrote:
>> +1 on the function. -1/2 on the name.
>>
>> On Jun 27, 2016 5:45 PM, "Nicolas Godbout" <nicolas.godbout at gmail.com>
>> wrote:
>>>
>>>
>>> WHAT
>>>
>>> It is proposed to add a ‘lookup' function on 'Set' in the "containers"
>>> package. Feedback during the next two weeks is welcome.
>>>
>>> The function
>>>
>>> > lookup :: Ord a => a -> Set a -> Maybe a
>>>
>>> is almost indentical to the 'member' function but, in addition, returns
>>> the value
>>> stored in the set.
>>>
>>> WHY
>>>
>>> The point of this proposal is to facilitate program-wide data sharing. The
>>> 'lookup'
>>> function gives access to a pointer to an object already stored in a Set
>>> and equal
>>> to a given argument. The 'lookup' function is a natural extension to the
>>> current
>>> 'lookupLT', 'lookupGT', 'lookupLE' and 'lookupGE' functions, with obvious
>>> semantics.
>>>
>>> Example use case: In a parser, the memory footprint can be reduced by
>>> collapsing
>>> all equal strings to a single instance of each string. To achieve this,
>>> one needs
>>> a way to get a previously seen string (internally, a pointer) equal to a
>>> newly
>>> parsed string. Amazingly, this is very difficult with the current
>>> "containers" library interface.
>>> One current option is to use a Map instead, e.g., 'Map String String'
>>> which stores twice as many pointers as necessary.
>>>
>>> HOW
>>>
>>> The git pull request at
>>> https://github.com/haskell/containers/pull/291
>>> contains the straight-forward implementation of the 'lookup’ function on
>>> 'Set', with test cases,
>>> as a patch against the current containers master branch.
>>>
>>>
>>> Salutations,
>>> Nicolas.
>>>
>>> _______________________________________________
>>> Libraries mailing list
>>> Libraries at haskell.org
>>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>
>
>
>
> --
> Chris Wong (https://lambda.xyz)
>
> "I had not the vaguest idea what this meant and when I could not
> remember the words, my tutor threw the book at my head, which did not
> stimulate my intellect in any way." -- Bertrand Russell
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries


More information about the Libraries mailing list