Index: src/ResolvExpr/TypeEnvironment.cc
===================================================================
--- src/ResolvExpr/TypeEnvironment.cc	(revision 5c4d27f29930c3ac488913ca34878f36a647f694)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision 98a249fbb9735b5f15e5de97f07784fc1d3f2032)
@@ -212,4 +212,8 @@
 	}
 
+	std::ostream & operator<<( std::ostream & out, const TypeEnvironment & env ) {
+		env.print( out );
+		return out;
+	}
 } // namespace ResolvExpr
 
Index: src/ResolvExpr/TypeEnvironment.h
===================================================================
--- src/ResolvExpr/TypeEnvironment.h	(revision 5c4d27f29930c3ac488913ca34878f36a647f694)
+++ src/ResolvExpr/TypeEnvironment.h	(revision 98a249fbb9735b5f15e5de97f07784fc1d3f2032)
@@ -86,5 +86,5 @@
 		TypeEnvironment *clone() const { return new TypeEnvironment( *this ); }
 
-		/// Iteratively adds the environment of a new actual (with allowWidening = false), 
+		/// Iteratively adds the environment of a new actual (with allowWidening = false),
 		/// and extracts open variables.
 		void addActual( const TypeEnvironment& actualEnv, OpenVarSet& openVars );
@@ -114,4 +114,6 @@
 		return sub.applyFree( type );
 	}
+
+	std::ostream & operator<<( std::ostream & out, const TypeEnvironment & env );
 } // namespace ResolvExpr
 
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 5c4d27f29930c3ac488913ca34878f36a647f694)
+++ src/SynTree/Expression.cc	(revision 98a249fbb9735b5f15e5de97f07784fc1d3f2032)
@@ -324,7 +324,7 @@
 			return makeSub( refType->get_base() );
 		} else if ( StructInstType * aggInst = dynamic_cast< StructInstType * >( t ) ) {
-			return TypeSubstitution( aggInst->get_baseParameters()->begin(), aggInst->get_baseParameters()->end(), aggInst->get_parameters().begin() );
+			return TypeSubstitution( aggInst->get_baseParameters()->begin(), aggInst->get_baseParameters()->end(), aggInst->parameters.begin() );
 		} else if ( UnionInstType * aggInst = dynamic_cast< UnionInstType * >( t ) ) {
-			return TypeSubstitution( aggInst->get_baseParameters()->begin(), aggInst->get_baseParameters()->end(), aggInst->get_parameters().begin() );
+			return TypeSubstitution( aggInst->get_baseParameters()->begin(), aggInst->get_baseParameters()->end(), aggInst->parameters.begin() );
 		} else {
 			assertf( false, "makeSub expects struct or union type for aggregate, but got: %s", toString( t ).c_str() );
