Index: src/ResolvExpr/TypeEnvironment.cc
===================================================================
--- src/ResolvExpr/TypeEnvironment.cc	(revision 550e8199e34e770198bf42e022b1f7d3e33effc9)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision ec91336e1da50de8d071fdfa4b13b9ecf8e6ecc7)
@@ -69,6 +69,6 @@
 	}
 
-	EqvClass::EqvClass( EqvClass &&other ) 
-	: vars{std::move(other.vars)}, type{other.type}, 
+	EqvClass::EqvClass( EqvClass &&other )
+	: vars{std::move(other.vars)}, type{other.type},
 	  allowWidening{std::move(other.allowWidening)}, data{std::move(other.data)} {
 		  other.type = nullptr;
@@ -85,5 +85,5 @@
 		if ( this == &other ) return *this;
 		delete type;
-		
+
 		vars = std::move(other.vars);
 		type = other.type;
@@ -132,5 +132,5 @@
 			++next;
 			std::set<std::string> intersection;
-			std::set_intersection( i->vars.begin(), i->vars.end(), eqvClass.vars.begin(), eqvClass.vars.end(), 
+			std::set_intersection( i->vars.begin(), i->vars.end(), eqvClass.vars.begin(), eqvClass.vars.end(),
 				std::inserter( intersection, intersection.begin() ) );
 			if ( ! intersection.empty() ) { env.erase( i ); }
@@ -240,4 +240,6 @@
 			// ttype unifies with any tuple type
 			return dynamic_cast< TupleType * >( type ) || Tuples::isTtype( type );
+		  default:
+			assertf(false, "Unhandled tyvar kind: %d", data.kind);
 		} // switch
 		return false;
@@ -245,5 +247,5 @@
 
 	bool TypeEnvironment::bindVar( TypeInstType *typeInst, Type *bindTo, const TypeDecl::Data & data, AssertionSet &need, AssertionSet &have, const OpenVarSet &openVars, WidenMode widenMode, const SymTab::Indexer &indexer ) {
-		
+
 		// remove references from other, so that type variables can only bind to value types
 		bindTo = bindTo->stripReferences();
@@ -291,5 +293,5 @@
 		auto class1 = internal_lookup( var1->get_name() );
 		auto class2 = internal_lookup( var2->get_name() );
-		
+
 		// exit early if variables already bound together
 		if ( class1 != env.end() && class1 == class2 ) {
