(* Environments *) module type ENV = sig type 'a env val empty: 'a env val bind : string -> 'a -> 'a env -> 'a env val bindall : string list -> 'a list -> 'a env -> 'a env val make : string list -> 'a list -> 'a env val lookup : string -> 'a env -> 'a option end module Env : ENV = struct module T = Map.Make(String) (* String Tables *) type 'a env = 'a T.t let empty = T.empty let bind name valu env = T.add name valu env let bindall names vals env = List.fold_right2 bind names vals env let make names vals = bindall names vals empty let lookup name env = (try Some(T.find name env) with Not_found -> None) end