(* Env: environments that map keys of type 'key to data of type 'data *) type ('key, 'data) env val empty : (''key, 'data) env val lookup : (''key, 'data) env -> ''key -> 'data val bind1 : (''key, 'data) env -> ''key * 'data -> (''key, 'data) env val bind : (''key, 'data) env -> (''key * 'data) list -> (''key, 'data) env val bindZip : (''key, 'data) env -> ''key list * 'data list -> (''key, 'data) env val fromList : (''key * 'data) list -> (''key, 'data) env val plus : (''key, 'data) env * (''key, 'data) env -> (''key, 'data) env