Minor containers API changes
wren ng thornton
wren at freegeek.org
Tue Nov 29 01:55:32 CET 2011
On 11/28/11 3:54 PM, Evan Laforge wrote:
> You know, something else I've noticed is that Data.Map is by far my
> most common haddock destination. So I think there's something to the
> idea that there are too many functions to memorize, even for frequent
> users, and we should emphasize combining forms over specific
> functions.
Agreed.
I think the factorization used in the bytestring-trie library gives a
nice balance of (a) simplicity for the basic functions you really need,
and (b) the whole kitchen sink if you really want it. In particular, the
breakdown is to have two or three modules:
Data.Foo:
- Just the basics and the super-general combinators
Data.Foo.Internal:
- The real guts, if you feel like exposing them
Data.Foo.Convenience:
- Everything else that has crept into the API over the years
- Not deprecated, but perhaps... lightly discouraged
The "basics" in the Data.Foo module include both the primitives (like
`empty`) and also extremely specialized versions of the super-general
combinators (like `insert`, `lookup`, or `delete`). This is the place
for beginners to look.
The Convenience module is just giving common names for various
specializations of the super-general combinators. While there are no
optimization benefits or anything, it can be helpful to have this shared
vocabulary for the various intermediate points between the super-general
combinators and the basic operations. It also serves as a backward
compatibility layer for people who don't want to have to change all
their code to just using the basics.
However, this sort of refactoring should be considered in a separate
proposal.
--
Live well,
~wren
More information about the Libraries
mailing list