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

David Feuer david.feuer at gmail.com
Wed Jun 29 06:12:47 UTC 2016


Would we also want something similar for `Data.Map`, looking up a key
and returning the copy of the key found in the map along with the
associated value?

lookupWithInternedKeyOrWhatever :: Ord k => k -> Map k v -> (k, v)

If so, it might pay to think about a naming scheme that will make
sense for both Data.Map and Data.Set.

On Tue, Jun 28, 2016 at 12:38 PM, David Turner
<dct25-561bs at mythic-beasts.com> wrote:
> +1
>
> When I previously searched for (and failed to find) this function in order
> to implement an intern table, I remember trying 'lookup', 'lookupEQ' and
> 'find' in approximately that order, so that's my order if preference for its
> name.
>
> 'lookupInterned' or similar could work for me too if you want to scare off
> beginners although I don't see a strong need myself. Certainly a mention of
> interning in the haddocks would help.
>
>
> 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
>


More information about the Libraries mailing list