sig
  type ('a, 'b) t
  val lookup : ('a, 'b) Env.t -> 'a -> 'b
  val filter : ('a, 'b) Env.t -> ('b -> bool) -> 'b list
  val empty : ('a, 'b) Env.t
  val add : ('a, 'b) Env.t -> 'a -> 'b -> ('a, 'b) Env.t
  val concat : ('a, 'b) Env.t -> ('a, 'b) Env.t -> ('a, 'b) Env.t
  val iter : ('a * 'b -> unit) -> ('a, 'b) Env.t -> unit
  val fold_left : ('c -> 'a * 'b -> 'c) -> 'c -> ('a, 'b) Env.t -> 'c
  val map : ('a * 'b -> 'c) -> ('a, 'b) Env.t -> 'c list
end