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

David Turner dct25-561bs at mythic-beasts.com
Tue Jun 28 16:38:17 UTC 2016


+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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20160628/5063bc21/attachment.html>


More information about the Libraries mailing list