The persistent-vector package
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
Properties
| Versions | 0.1.0.0, 0.1.0.1 |
|---|---|
| Dependencies | base (4.*), deepseq |
| License | BSD3 |
| Author | Tristan Ravitch |
| Maintainer | travitch@cs.wisc.edu |
| Category | Data |
| Home page | https://github.com/travitch/persistent-vector |
| Bug tracker | https://github.com/travitch/persistent-vector/issues |
| Source repository | git clone git://github.com/travitch/persistent-vector.git |
| Upload date | Wed Aug 29 04:31:20 UTC 2012 |
| Uploaded by | TristanRavitch |
| Built on | ghc-7.4 |
Modules
- Data
- Vector
Downloads
- persistent-vector-0.1.0.1.tar.gz (Cabal source package)
- package description (included in the package)