%
% (c) The Foo Project, University of Glasgow, 1998
%
% @(#) $Docid: Oct. 16th 2001 10:39 Sigbjorn Finne $
% @(#) $Contactid: sof@galconn.com $
%
A basic environment abstraction, hiding its representation
(currently, finite maps..oops, wasn't suppose to tell you this :-( )
\begin{code}
module Env
(
Env
, newEnv
, addToEnv
, addToEnv_C
, replaceElt
, delFromEnv
, addListToEnv
, addListToEnv_C
, lookupEnv
, envToList
, mapEnv
, mapMaybeEnv
, unionEnvs
) where
import FiniteMap
\end{code}
\begin{code}
type Env a b = FiniteMap a b
newEnv :: Env a b
newEnv = emptyFM
addToEnv :: Ord a => Env a b -> a -> b -> Env a b
addToEnv fm key elt = addToFM fm key elt
delFromEnv :: Ord a => Env a b -> a -> Env a b
delFromEnv fm key = delFromFM fm key
addToEnv_C :: Ord a => (b -> b -> b) -> Env a b -> a -> b -> Env a b
addToEnv_C f fm key elt = addToFM_C f fm key elt
replaceElt :: Ord a => Env a b -> a -> b -> Env a b
replaceElt fm key new_elt = addToFM_C (\ _ new -> new) fm key new_elt
addListToEnv :: Ord a => Env a b -> [(a, b)] -> Env a b
addListToEnv fm ls = addListToFM fm ls
addListToEnv_C :: Ord a => (b -> b -> b) -> Env a b -> [(a, b)] -> Env a b
addListToEnv_C f fm ls = addListToFM_C f fm ls
lookupEnv :: Ord a => Env a b -> a -> Maybe b
lookupEnv fm k = lookupFM fm k
envToList :: Env a b -> [(a,b)]
envToList fm = fmToList fm
mapEnv :: (a -> b -> c) -> Env a b -> Env a c
mapEnv f fm = mapFM f fm
mapMaybeEnv :: Ord a => (a -> b -> Maybe c) -> Env a b -> Env a c
mapMaybeEnv f fm = mapMaybeFM f fm
unionEnvs :: (Ord a) => [Env a b] -> Env a b
unionEnvs ls = foldl (\ acc x -> plusFM x acc) newEnv ls
\end{code}