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