* 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