Index: src/AST/SymbolTable.cpp
===================================================================
--- src/AST/SymbolTable.cpp	(revision efe89894d3b4af31a3267fefd5427da12cd6552a)
+++ src/AST/SymbolTable.cpp	(revision ded6c2a6bdba49106fabf9dcce740d46ecec4b7f)
@@ -278,5 +278,5 @@
 		} else {
 			// typedef redeclarations are errors only if types are different
-			if ( ! ResolvExpr::typesCompatible( existing->base, added->base, SymbolTable{} ) ) {
+			if ( ! ResolvExpr::typesCompatible( existing->base, added->base ) ) {
 				SemanticError( added->location, "redeclaration of " + added->name );
 			}
@@ -643,5 +643,5 @@
 	} else if ( existing.id->linkage.is_mangled
 			|| ResolvExpr::typesCompatible(
-				added->get_type(), existing.id->get_type(), SymbolTable{} ) ) {
+				added->get_type(), existing.id->get_type() ) ) {
 
 		// it is a conflict if one declaration is deleted and the other is not
Index: src/AST/TypeEnvironment.cpp
===================================================================
--- src/AST/TypeEnvironment.cpp	(revision efe89894d3b4af31a3267fefd5427da12cd6552a)
+++ src/AST/TypeEnvironment.cpp	(revision ded6c2a6bdba49106fabf9dcce740d46ecec4b7f)
@@ -178,5 +178,5 @@
 
 bool TypeEnvironment::combine(
-		const TypeEnvironment & o, OpenVarSet & open, const SymbolTable & symtab ) {
+		const TypeEnvironment & o, OpenVarSet & open ) {
 	// short-circuit easy cases
 	if ( o.empty() ) return true;
@@ -201,5 +201,5 @@
 			EqvClass & r = *rt;
 			// merge bindings
-			if ( ! mergeBound( r, c, open, symtab ) ) return false;
+			if ( ! mergeBound( r, c, open ) ) return false;
 			// merge previous unbound variables into this class, checking occurs if needed
 			if ( r.bound ) for ( const auto & u : c.vars ) {
@@ -216,5 +216,5 @@
 				} else if ( st != rt ) {
 					// bound, but not to the same class
-					if ( ! mergeClasses( rt, st, open, symtab ) ) return false;
+					if ( ! mergeClasses( rt, st, open ) ) return false;
 				}	// ignore bound into the same class
 			}
@@ -280,6 +280,5 @@
 bool TypeEnvironment::bindVar(
 		const TypeInstType * typeInst, const Type * bindTo, const TypeData & data,
-		AssertionSet & need, AssertionSet & have, const OpenVarSet & open, WidenMode widen,
-		const SymbolTable & symtab
+		AssertionSet & need, AssertionSet & have, const OpenVarSet & open, WidenMode widen
 ) {
 	// remove references from bound type, so that type variables can only bind to value types
@@ -300,5 +299,5 @@
 			if ( unifyInexact(
 					newType, target, *this, need, have, open,
-					widen & WidenMode{ it->allowWidening, true }, symtab, common ) ) {
+					widen & WidenMode{ it->allowWidening, true }, common ) ) {
 				if ( common ) {
 					it->bound = std::move(common);
@@ -321,5 +320,5 @@
 		const TypeInstType * var1, const TypeInstType * var2, TypeData && data,
 		AssertionSet & need, AssertionSet & have, const OpenVarSet & open,
-		WidenMode widen, const SymbolTable & symtab
+		WidenMode widen
 ) {
 	auto c1 = internal_lookup( *var1 );
@@ -358,5 +357,5 @@
 
 		if ( unifyInexact(
-				newType1, newType2, *this, need, have, open, newWidenMode, symtab, common ) ) {
+				newType1, newType2, *this, need, have, open, newWidenMode, common ) ) {
 			c1->vars.insert( c2->vars.begin(), c2->vars.end() );
 			c1->allowWidening = widen1 && widen2;
@@ -409,5 +408,5 @@
 
 bool TypeEnvironment::mergeBound(
-		EqvClass & to, const EqvClass & from, OpenVarSet & open, const SymbolTable & symtab ) {
+		EqvClass & to, const EqvClass & from, OpenVarSet & open ) {
 	if ( from.bound ) {
 		if ( to.bound ) {
@@ -419,5 +418,5 @@
 
 			if ( unifyInexact(
-					toType, fromType, *this, need, have, open, widen, symtab, common ) ) {
+					toType, fromType, *this, need, have, open, widen, common ) ) {
 				// unifies, set common type if necessary
 				if ( common ) {
@@ -437,10 +436,10 @@
 
 bool TypeEnvironment::mergeClasses(
-	ClassList::iterator to, ClassList::iterator from, OpenVarSet & open, const SymbolTable & symtab
+	ClassList::iterator to, ClassList::iterator from, OpenVarSet & open
 ) {
 	EqvClass & r = *to, & s = *from;
 
 	// ensure bounds match
-	if ( ! mergeBound( r, s, open, symtab ) ) return false;
+	if ( ! mergeBound( r, s, open ) ) return false;
 
 	// check safely bindable
Index: src/AST/TypeEnvironment.hpp
===================================================================
--- src/AST/TypeEnvironment.hpp	(revision efe89894d3b4af31a3267fefd5427da12cd6552a)
+++ src/AST/TypeEnvironment.hpp	(revision ded6c2a6bdba49106fabf9dcce740d46ecec4b7f)
@@ -169,5 +169,5 @@
 	/// Merge environment with this one, checking compatibility.
 	/// Returns false if fails, but does NOT roll back partial changes.
-	bool combine( const TypeEnvironment & o, OpenVarSet & openVars, const SymbolTable & symtab );
+	bool combine( const TypeEnvironment & o, OpenVarSet & openVars );
 
 	/// Add all type variables in environment to open var list
@@ -183,5 +183,5 @@
 		const TypeInstType * typeInst, const Type * bindTo, const TypeData & data,
 		AssertionSet & need, AssertionSet & have, const OpenVarSet & openVars,
-		ResolvExpr::WidenMode widen, const SymbolTable & symtab );
+		ResolvExpr::WidenMode widen );
 
 	/// Binds the type classes represented by `var1` and `var2` together; will add one or both
@@ -190,5 +190,5 @@
 		const TypeInstType * var1, const TypeInstType * var2, TypeData && data,
 		AssertionSet & need, AssertionSet & have, const OpenVarSet & openVars,
-		ResolvExpr::WidenMode widen, const SymbolTable & symtab );
+		ResolvExpr::WidenMode widen );
 
 	/// Disallows widening for all bindings in the environment
@@ -205,10 +205,9 @@
 	/// Unifies the type bound of `to` with the type bound of `from`, returning false if fails
 	bool mergeBound(
-		EqvClass & to, const EqvClass & from, OpenVarSet & openVars, const SymbolTable & symtab );
+		EqvClass & to, const EqvClass & from, OpenVarSet & openVars );
 
 	/// Merges two type classes from local environment, returning false if fails
 	bool mergeClasses(
-		ClassList::iterator to, ClassList::iterator from, OpenVarSet & openVars,
-		const SymbolTable & symtab );
+		ClassList::iterator to, ClassList::iterator from, OpenVarSet & openVars);
 
 	/// Private lookup API; returns array index of string, or env.size() for not found
