Reins is a collection of persistent data structures for OCaml.
In addition to providing a large collection of data structures, the
O'Caml Reins project also includes several features that I hope will
make developing O'Caml applications easier such as a random testing
framework and a collection of "standard" modules.
Current features:
* List data types:
o Single linked lists (compatible with the standard library type)
o O(1) catenable lists
o Acyclic double linked lists
o Random access lists with O(1) hd/cons/tl and O(log i) lookup/update
for i'th element
* Double ended queues
* Sets/Maps:
o AVL
o Red/Black
o Big-endian Patricia
o Splay
* Heaps:
o Binomial
o Skew Binomial
* Zipper style cursor interfaces
* Persistent, bi-directional cursor based iterators (currently only
for lists and sets)
* All standard types hoisted into the module level (Int, Bool, etc...)
* A collection of functor combinators to minimize boilerplate (e.g.,
constructing compare or to_string functions)
* Quickcheck testing framework
o Each structure provides a gen function that can generate a random
instance of itself
* Completely safe code. No -unsafe or references to Obj.*
* Consistent function signatures. For instance, all fold functions take
the accumulator in the same position.
* All operations use no more than O(log n) stack space (except for a
few operations on splay trees which currently have O(log n) expected
time, but O(n) worst case)