cspmchecker-0.1.1: src/Checker/Monad.hs
{-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
module Monad where
import Control.Monad.State
import CSPM
import Util.Exception
import Util.PrettyPrint
data SfdrState = SfdrState {
cspmSession :: CSPMSession,
lastWarnings :: [ErrorMessage]
}
initSfdrState :: IO SfdrState
initSfdrState = do
sess <- newCSPMSession
return $ SfdrState sess []
resetCSPM :: Sfdr ()
resetCSPM = do
sess <- liftIO $ newCSPMSession
modify (\st -> st { cspmSession = sess, lastWarnings = [] })
type Sfdr = StateT SfdrState IO
runSfdr :: SfdrState -> Sfdr a -> IO a
runSfdr st a = runStateT a st >>= return . fst
getState :: (SfdrState -> a) -> Sfdr a
getState = gets
modifyState :: (SfdrState -> SfdrState) -> Sfdr ()
modifyState = modify
instance CSPMMonad Sfdr where
getSession = gets cspmSession
setSession s = modify (\ st -> st { cspmSession = s })
handleWarnings ws = modify (\ st -> st { lastWarnings = ws })