acid-state-tls-0.9.0: examples/RemoteCommon.hs
{-# LANGUAGE TemplateHaskell, DeriveDataTypeable, TypeFamilies #-}
module RemoteCommon where
import Data.Acid
import Control.Monad.State
import Control.Monad.Reader
import System.Environment
import System.IO
import Data.SafeCopy
import Data.Typeable
------------------------------------------------------
-- The Haskell structure that we want to encapsulate
data StressState = StressState !Int
deriving (Typeable)
$(deriveSafeCopy 0 'base ''StressState)
------------------------------------------------------
-- The transaction we will execute over the state.
pokeState :: Update StressState ()
pokeState = do StressState i <- get
put (StressState (i+1))
queryState :: Query StressState Int
queryState = do StressState i <- ask
return i
clearState :: Update StressState ()
clearState = put $ StressState 0
$(makeAcidic ''StressState ['pokeState, 'queryState, 'clearState])