Portability | non-portable (uses GHC extensions) |
---|---|
Maintainer | lemmih@gmail.com |
Safe Haskell | None |
Data.Acid.Common
Description
Common structures used by the various backends (local, memory).
- runGetLazyFix :: Get a -> ByteString -> Either String a
- class SafeCopy st => IsAcidic st where
- acidEvents :: [Event st]
- newtype Update st a = Update {}
- newtype Query st a = Query {}
- runQuery :: Query st a -> Update st a
- type EventResult ev = MethodResult ev
- type EventState ev = MethodState ev
- data Event st where
- 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
- class Method ev => QueryEvent ev
- eventsToMethods :: [Event st] -> [MethodContainer st]
Documentation
runGetLazyFix :: Get a -> ByteString -> Either String aSource
class SafeCopy st => IsAcidic st whereSource
Methods
Arguments
:: [Event st] | List of events capable of updating or querying the state. |
Context monad for Update events.
Instances
MonadState st (Update st) | |
Monad (Update st) | |
Functor (Update st) | |
Applicative (Update st) |
Context monad for Query events.
Instances
MonadReader st (Query st) | |
Monad (Query st) | |
Functor (Query st) | |
Applicative (Query st) |
type EventResult ev = MethodResult evSource
Events return the same thing as Methods. The exact type of EventResult
depends on the event.
type EventState ev = MethodState evSource
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.
eventsToMethods :: [Event st] -> [MethodContainer st]Source