- 
                Notifications
    You must be signed in to change notification settings 
- Fork 186
Description
WHAT?
It is proposed to add a lookup function on Set in the "containers" package. The proposal is logged here first for reference in a later discussion on the Haskell libraries mailing list.
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 Pull Request (to be added shortly) contains the straight-forward implementation of the lookup function on Set, with test cases.