-fun bindType (ts, vs) name = (SS.add (ts, name), vs)
-fun bindVal (ts, vs) (name, t, eqo) = (ts, SM.insert (vs, name, (t, eqo)))
+fun bindType (ts, vs, cs) name = (SS.add (ts, name), vs, cs)
+fun bindVal (ts, vs, cs) (name, t, eqo) = (ts, SM.insert (vs, name, (t, eqo)), cs)
+fun bindContext (ts, vs, cs) name = (ts, vs, SS.add (cs, name))
+
+fun types (ts, _, _) = ts
+fun vals (_, vs, _) = SM.foldli (fn (name, _, vs) => SS.add (vs, name)) SS.empty vs
+fun contexts (_, _, cs) = cs