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

CopyrightPublicDomain
Maintainerlemmih@gmail.com
Portabilitynon-portable (uses GHC extensions)
Safe HaskellNone
LanguageHaskell2010

Data.Acid.Common

Description

Common structures used by the various backends (local, memory).

Synopsis

Documentation

class SafeCopy st => IsAcidic st where Source #

Methods

acidEvents Source #

Arguments

:: [Event st]

List of events capable of updating or querying the state.

newtype Update st a Source #

Context monad for Update events.

Constructors

Update 

Fields

Instances
MonadState st (Update st) Source # 
Instance details

Defined in Data.Acid.Common

Methods

get :: Update st st #

put :: st -> Update st () #

state :: (st -> (a, st)) -> Update st a #

Monad (Update st) Source # 
Instance details

Defined in Data.Acid.Common

Methods

(>>=) :: Update st a -> (a -> Update st b) -> Update st b #

(>>) :: Update st a -> Update st b -> Update st b #

return :: a -> Update st a #

fail :: String -> Update st a #

Functor (Update st) Source # 
Instance details

Defined in Data.Acid.Common

Methods

fmap :: (a -> b) -> Update st a -> Update st b #

(<$) :: a -> Update st b -> Update st a #

Applicative (Update st) Source # 
Instance details

Defined in Data.Acid.Common

Methods

pure :: a -> Update st a #

(<*>) :: Update st (a -> b) -> Update st a -> Update st b #

liftA2 :: (a -> b -> c) -> Update st a -> Update st b -> Update st c #

(*>) :: Update st a -> Update st b -> Update st b #

(<*) :: Update st a -> Update st b -> Update st a #

newtype Query st a Source #

Context monad for Query events.

Constructors

Query 

Fields

Instances
MonadReader st (Query st) Source # 
Instance details

Defined in Data.Acid.Common

Methods

ask :: Query st st #

local :: (st -> st) -> Query st a -> Query st a #

reader :: (st -> a) -> Query st a #

Monad (Query st) Source # 
Instance details

Defined in Data.Acid.Common

Methods

(>>=) :: Query st a -> (a -> Query st b) -> Query st b #

(>>) :: Query st a -> Query st b -> Query st b #

return :: a -> Query st a #

fail :: String -> Query st a #

Functor (Query st) Source # 
Instance details

Defined in Data.Acid.Common

Methods

fmap :: (a -> b) -> Query st a -> Query st b #

(<$) :: a -> Query st b -> Query st a #

Applicative (Query st) Source # 
Instance details

Defined in Data.Acid.Common

Methods

pure :: a -> Query st a #

(<*>) :: Query st (a -> b) -> Query st a -> Query st b #

liftA2 :: (a -> b -> c) -> Query st a -> Query st b -> Query st c #

(*>) :: Query st a -> Query st b -> Query st b #

(<*) :: Query st a -> Query st b -> Query st a #

liftQuery :: Query st a -> Update st a Source #

Run a query in the Update Monad.

type EventResult ev = MethodResult ev Source #

Events return the same thing as Methods. The exact type of EventResult depends on the event.

data Event st where Source #

We distinguish between events that modify the state and those that do not.

UpdateEvents are executed in a MonadState context and have to be serialized to disk before they are considered durable.

QueryEvents are executed in a MonadReader context and obviously do not have to be serialized to disk.

Constructors

UpdateEvent :: UpdateEvent ev => (ev -> Update (EventState ev) (EventResult ev)) -> Event (EventState ev) 
QueryEvent :: QueryEvent ev => (ev -> Query (EventState ev) (EventResult ev)) -> Event (EventState ev) 

class Method ev => UpdateEvent ev Source #

All UpdateEvents are also Methods.

class Method ev => QueryEvent ev Source #

All QueryEvents are also Methods.