--------------------------------------------------------------------------------
--                                                                            --
-- interpreter building block for variables                                   --
--                                                                            --
--------------------------------------------------------------------------------

-- V

data V x = Var Name

instance Functor V where
  map g (Var x) = Var x

-- parse

instance Parser m x => Parser m (V x) where
  parser 
    = do { x <- pLow ; result (Var x) } 

-- unparse

instance Algebra V (IO ()) where
  phi (Var x) = uLow x

-- interpret

instance EnvMonad (Table (m v)) m => Algebra V (m v) where
  phi (Var x) = do { tab <- read ; lookupT x tab }
 
--------------------------------------------------------------------------------
