module CSPM.Evaluator.Environment (
    Environment,
    new, lookup, newLayerAndBind, toList,
) where

import qualified Data.Map as M
import Prelude hiding (lookup)

import CSPM.DataStructures.Names
import {-# SOURCE #-} CSPM.Evaluator.Values
import Util.Exception

type Environment = M.Map Name Value

new :: Environment
new = M.empty

toList :: Environment -> [(Name, Value)]
toList = M.toList

lookup :: Environment -> Name -> Value
lookup env n = M.findWithDefault (panic ("lookup not found: "++show n)) n env

newLayerAndBind :: Environment -> [(Name, Value)] -> Environment
newLayerAndBind env nvs = 
    foldr (\ (n,v) env -> M.insert n v env) env nvs