acid-state- Add ACID guarantees to any serializable Haskell data structure.

Safe HaskellNone



A log is a stack of entries that supports efficient pushing of new entries and fetching of old. It can be considered an extendible array of entries.



data FileLog object Source #



data LogKey object Source #

openFileLog :: LogKey object -> IO (FileLog object) Source #

closeFileLog :: FileLog object -> IO () Source #

pushEntry :: FileLog object -> object -> IO () -> IO () Source #

Schedule a new log entry. This call does not block. The given IO action runs once the object is durable. The IO action blocks the serialization of events so it should be swift.

pushAction :: FileLog object -> IO () -> IO () Source #

The given IO action is executed once all previous entries are durable.

readEntriesFrom :: FileLog object -> EntryId -> IO [object] Source #

Read all durable entries younger than the given EntryId. Note that entries written during or after this call won't be included in the returned list.

rollbackTo :: LogKey object -> EntryId -> IO () Source #

Obliterate log entries younger than or equal to the EntryId. Very unsafe, can't be undone

rollbackWhile Source #


:: LogKey object 
-> (object -> Bool)

the filter function

-> IO () 

Obliterate log entries as long as the filter function returns True.

newestEntry :: LogKey object -> IO (Maybe object) Source #

Finds the newest entry in the log. Doesn't work on open logs. Do not use after the log has been opened.


  • Search the newest log files first.
  • Once a file containing at least one valid entry is found, return the last entry in that file.

archiveFileLog :: FileLog object -> EntryId -> IO () Source #

Move all log files that do not contain entries equal or higher than the given entryId into an Archive/ directory.