úÎHŠDK         !"#$%&'()*+, !"#$%&')*+ !$#""#$%&')*+portablelemmih@gmail.com-(Collection of Methods indexed by a Tag. DMethod container structure that hides the exact type of the method. .JMethod tags must be unique and are most commenly generated automatically. 8The control structure at the very center of acid-state. : This module provides access to a mutable state through < methods. No efforts towards durability, checkpointing or # sharding happens at this level. 4 Important things to keep in mind in this module:  * We don'+t distinguish between updates and queries. 8 * We allow direct access to the core state as well  as through events. /01?The basic Method class. Each Method has an indexed result type  and a unique tag. CConstruct a new Core using an initial state and a list of Methods. 0List of methods capable of modifying the state. Initial state value. AMark Core as closed. Any subsequent use will throw an exception. DModify the state component. The resulting state is ensured to be in  WHNF. DModify the state component. The resulting state is ensured to be in  WHNF. Access the state component. FExecute a method as given by a type identifier and an encoded string. J The exact format of the encoded string depends on the type identifier. 2 Results are encoded and type tagged before they're handed back out. M This function is used when running events from a log-file or from another G server. Events that originate locally are most likely executed with  the faster . JFind the state action that corresponds to a tagged and serialized method. (Apply an in-memory method to the state. ?Find the state action that corresponds to an in-memory method. 2 Construct a -4 from a list of Methods using their associated tag.      3456789:;<=>?@ABCDEFG 34567>ABDEFG 34564567>ABDEFGportablelemmih@gmail.comHI Context monad for Query events. JK!Context monad for Update events. LMVState container offering full ACID (Atomicity, Consistency, Isolation and Durability)  guarantees.  Atomicity4 State changes are all-or-nothing. This is what you'd expect of any state : variable in Haskell and AcidState doesn't change that.  ConsistencyJ No event or set of events will break your data invariants. This includes $ power outages,  IsolationM Transactions cannot interfere with each other even when issued in parallel.  DurabilityG Successful transaction are guaranteed to survive system failure (both + hardware and software). NOPQ"All QueryEvents are also Methods. #All UpdateEvents are also Methods. KWe distinguish between events that modify the state and those that do not. LUpdateEvents are executed in a MonadState context and have to be serialized / to disk before they are considered durable. LQueryEvents are executed in a MonadReader context and obviously do not have  to be serialized to disk. ;Events return the same thing as Methods. The exact type of   depends on the event. ROIssue an Update event and wait for its result. Once this call returns, you are Q guaranteed that the changes to the state are durable. Events may be issued in  parallel. It',s a run-time error to issue events that aren't supported by the AcidState. OIssue a Query event and wait for its result. Events may be issued in parallel. GTake a snapshot of the state and save it to disk. Creating checkpoints / makes it faster to resume AcidStates and you're free to create them as I often or seldom as fits your needs. Transactions can run concurrently  with this call. =This call will not return until the operation has succeeded. UCreate an AcidState given a list of events (aka. transactions) and an initial value. .This will create or resume a log found in the "state/ [typeOf state]/" directory. :List of events capable of updating or querying the state. AInitial state value. This value is only used if no checkpoint is  found. (Close an AcidState and associated logs. B Any subsequent usage of the AcidState will throw an exception. S      !"#$%&'()*+,-./012 345667899:;<=>?@ABCDEFGHIIJKLMNOPacid-state-0.2Data.State.Acid.CoreData.State.Acid.LocalData.State.Acid.CRCData.State.Acid.ArchiveData.State.Acid.LogData.State.AcidMethodContainerMethodTaggedCore MethodResult methodTagmkCore closeCoremodifyCoreStatemodifyCoreState_ withCoreState runColdMethodlookupColdMethod runHotMethodlookupHotMethodQueryUpdate AcidState QueryEvent UpdateEventEvent EventResultupdatequerycreateCheckpoint mkAcidStatecloseAcidState tableListtablecrc16EntriesFailNextDoneEntry entriesToListentriesToListNoFailputEntry putEntries packEntries readEntries lazyToStrict MethodMapTag coreState coreMethods mkMethodMapLogKey logDirectory logPrefixFileLog logIdentifier logCurrentlogNextEntryIdlogQueue logThreadsEntryId formatLogFile findLogFiles openFileLog closeFileLog readEntitiesentriesAfterCutoff newestEntry pushEntryaskCurrentEntryId CheckpointunQueryunUpdate localCore localEventslocalCheckpointseventsToMethods