packages feed

g2-0.1.0.0: src/G2/Language/Monad/TypeEnv.hs

module G2.Language.Monad.TypeEnv ( lookupT
                                           , insertT ) where

import G2.Language

import G2.Language.Monad.Support

import qualified Data.Map as M

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

liftTE :: ExState s m => (TypeEnv -> a) -> m a
liftTE f = return . f =<< typeEnv

lookupT :: ExState s m => Name -> m (Maybe AlgDataTy)
lookupT n = liftTE (M.lookup n)

insertT :: ExState s m => Name -> AlgDataTy -> m ()
insertT n t = do
    tenv <- typeEnv
    let tenv' = M.insert n t tenv
    putTypeEnv tenv'