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

David Feuer david.feuer at gmail.com
Wed Jun 29 21:02:00 UTC 2016


I suspect we may want both functions.

On Wed, Jun 29, 2016 at 4:57 PM, David Thomas <davidleothomas at gmail.com> wrote:
> 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