This package provides persistent vectors based on array mapped
tries. The implementation is based on the persistent vectors used
in clojure, but in a Haskell-style API. The API is modeled after
Data.Sequence from the containers library.
Technically, the element-wise operations are O(log(n)), but the
underlying tree cannot be more than 7 or 8 levels deep so this is
effectively constant time.
One change from the clojure implementation is that this version supports
O(1) slicing, though it does cheat a little. Slices retain references
to elements that cannot be indexed. These extra references (and the space
they occupy) can be reclaimed by shrinking the slice. This seems like
a reasonable tradeoff, and, I believe, mirrors the behavior of the vector
library.
Highlights:
O(1) append element, indexing, updates, length, and slicing
Reasonably compact representation