--------------------------------------------------------------------------------
--                                                                            --
-- Table code                                                                 --
--                                                                            --
--------------------------------------------------------------------------------

type Table x = [(Name,x)]
                          
instance Initial (Table x) where
  initial = []
  
updateT :: ErrMonad m => (Name,m v) -> Table (m v) -> m (Table (m v))  
updateT (x,m) tab = result ((x,m):tab)

lookupTerr x = err ("lookupT : name " ++ x ++ " not bound") 

lookupT :: ErrMonad m => Name -> Table (m v) -> m v
lookupT x ((y,m):tab) = if x == y then m else lookupT x tab
lookupT x _           = lookupTerr x

--------------------------------------------------------------------------------
