
* Would using a snapshot-based revision control system like Git be an option? If yes, you could use the [filestore] library.
It's not exactly what I had in mind but I'll think about it.
* Another option is to run an insertion-only relational model on really any database system you want like PostgreSQL. There is nothing about preserving history that needs special handling to be efficient.
I assume that some sort of structural sharing is needed once the collections grow above a certain size. Also some support for caching would be nice.
* Yet another option is to model your application state with history and use [acid-state]. However, acid-state only makes an in-memory Haskell value (the "database") persistent with ACID guarantees. If you mostly work with the current state, keeping the whole history in memory all the time would be a waste. Therefore this option may be less useful.
The database will probably grow bigger than the memory so this is not an option. ...and thanks for the pointers