packages feed

g2-0.2.0.0: src/G2/Language/Monad/ExprEnv.hs

module G2.Language.Monad.ExprEnv ( memberE
                                 , lookupE
                                 , insertE
                                 , insertSymbolicE
                                 , mapE
                                 , mapME
                                 , mapWithKeyME ) where

import G2.Language

import qualified G2.Language.ExprEnv as E
import G2.Language.Monad.Support

import Prelude hiding ( filter
                      , lookup
                      , map
                      , null)

liftEE :: ExprEnvM s m => (ExprEnv -> a) -> m a
liftEE f = return . f =<< exprEnv

memberE :: ExprEnvM s m => Name -> m Bool
memberE n = liftEE (E.member n)

lookupE :: ExprEnvM s m => Name -> m (Maybe Expr)
lookupE n = liftEE (E.lookup n)

insertE :: ExprEnvM s m => Name -> Expr -> m ()
insertE n e = do
    eenv <- exprEnv
    let eenv' = E.insert n e eenv
    putExprEnv eenv'

insertSymbolicE :: ExprEnvM s m => Id -> m ()
insertSymbolicE i = do
    eenv <- exprEnv
    let eenv' = E.insertSymbolic i eenv
    putExprEnv eenv'

mapE :: ExprEnvM s m => (Expr -> Expr) -> m ()
mapE f = do
    eenv <- exprEnv
    let eenv' = E.map f eenv
    putExprEnv eenv'

mapME :: ExprEnvM s m => (Expr -> m Expr) -> m ()
mapME f = do
    eenv <- exprEnv
    eenv' <- E.mapM f eenv
    putExprEnv eenv'

mapWithKeyME :: ExprEnvM s m => (Name -> Expr -> m Expr) -> m ()
mapWithKeyME f = do
    eenv <- exprEnv
    eenv' <- E.mapWithKeyM f eenv
    putExprEnv eenv'