# Eventium Memory In-memory event store for Eventium, backed by STM. ## Overview `eventium-memory` provides thread-safe, in-memory implementations of `EventStoreReader` and `EventStoreWriter` for development, testing, and prototyping. No external database is required. ## API ```haskell -- Create a TVar-backed store eventMapTVar :: IO (TVar (EventMap event)) -- TVar-based (for use inside STM or lifted to IO) tvarEventStoreReader :: TVar (EventMap event) -> VersionedEventStoreReader STM event tvarEventStoreWriter :: TVar (EventMap event) -> VersionedEventStoreWriter STM event tvarGlobalEventStoreReader :: TVar (EventMap event) -> GlobalEventStoreReader STM event -- MonadState-based (for pure state threading) stateEventStoreReader :: (MonadState (EventMap event) m) => VersionedEventStoreReader m event stateEventStoreWriter :: (MonadState (EventMap event) m) => VersionedEventStoreWriter m event stateGlobalEventStoreReader :: (MonadState (EventMap event) m) => GlobalEventStoreReader m event ``` Use `runEventStoreReaderUsing atomically` / `runEventStoreWriterUsing atomically` to lift the STM stores into IO. ## Usage ```haskell import Control.Concurrent.STM (atomically) import Eventium import Eventium.Store.Memory main :: IO () main = do tvar <- eventMapTVar let writer = runEventStoreWriterUsing atomically (tvarEventStoreWriter tvar) reader = runEventStoreReaderUsing atomically (tvarEventStoreReader tvar) result <- applyCommandHandler writer reader myHandler aggregateId cmd print result ``` ## When to Use - **Testing** -- fast, isolated, no I/O overhead. - **Prototyping** -- iterate on domain logic without database setup. - **Examples** -- the counter-cli example uses this backend. For persistent storage, use `eventium-sqlite` or `eventium-postgresql`. ## Installation ```yaml dependencies: - eventium-core - eventium-memory ``` ## Documentation - [Main README](../README.md) - [Design](../DESIGN.md) - [Examples](../examples/) ## License MIT -- see [LICENSE.md](LICENSE.md)