Proposal: export more Data.Sequence internals

David Feuer david.feuer at
Fri Feb 5 21:22:27 UTC 2021

I'd like containers to export more Data.Sequence internals, and to do
so in a way that allows external users to rely on them. I propose the

1. Add a module, Data.FingerTree.IntPlus, abstractly exporting the
finger trees used to represent sequences. These can also be used for
other finger trees with measurements in the (Int, +) monoid. This
would include various basic operations for cons, snoc, and splitting,
with most names the same as for sequences.
2. Add a module, Data.FingerTree.IntPlus.Unsafe, exporting efficient
mapping/traversing functions that rely on specific preconditions to
maintain the internal fingertree annotation invariant.
3. Add a module, Data.Sequence.StableInternal, exporting the internal
structure of sequences and also some internal functions that may be
useful elsewhere (I'm particularly interested in the `splitMap`
function and future variants thereof). Unlike the `.Internal` module,
this module would be subject to the package version policy, and would
therefore be more suitable for use by other packages.

I am very open to suggestions for modifications to the module names.
One option might be to put all the FingerTree.IntPlus stuff in the
Data.Sequence.StableInternal hierarchy, if folks think it should be
buried a bit.


More information about the Libraries mailing list