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.
WHAT?
It is proposed to add a
lookupfunction onSetin the "containers" package. The proposal is logged here first for reference in a later discussion on the Haskell libraries mailing list.The function
is almost indentical to the
memberfunction but, in addition, returns the value stored in the set.WHY?
The point of this proposal is to facilitate program-wide data sharing. The
lookupfunction gives access to a pointer to an object already stored in a Set and equal to a given argument. Thelookupfunction is a natural extension to the currentlookupLT,lookupGT,lookupLEandlookupGEfunctions, 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 Stringwhich stores twice as many pointers as necessary.HOW?
The Pull Request (to be added shortly) contains the straight-forward implementation of the
lookupfunction onSet, with test cases.