Index: src/ResolvExpr/AlternativeFinder.h
===================================================================
--- src/ResolvExpr/AlternativeFinder.h	(revision 43bd69d845b53866c0b7c623879cfefde2b5a415)
+++ src/ResolvExpr/AlternativeFinder.h	(revision 6f326b18619413c184048ffa17183130ed64766d)
@@ -126,4 +126,7 @@
 	void printAlts( const AltList &list, std::ostream &os, unsigned int indentAmt = 0 );
 
+	/// Adds type variables to the open variable set and marks their assertions
+	void makeUnifiableVars( Type *type, OpenVarSet &unifiableVars, AssertionSet &needAssertions );
+
 	template< typename InputIterator >
 	void simpleCombineEnvironments( InputIterator begin, InputIterator end, TypeEnvironment &result ) {
Index: src/ResolvExpr/Resolver.cc
===================================================================
--- src/ResolvExpr/Resolver.cc	(revision 43bd69d845b53866c0b7c623879cfefde2b5a415)
+++ src/ResolvExpr/Resolver.cc	(revision 6f326b18619413c184048ffa17183130ed64766d)
@@ -544,5 +544,9 @@
 							OpenVarSet openVars;
 							AssertionSet resultNeed, resultHave;
-							TypeEnvironment resultEnv;
+							TypeEnvironment resultEnv( func.env );
+							makeUnifiableVars( function, openVars, resultNeed );
+							// add all type variables as open variables now so that those not used in the parameter
+							// list are still considered open.
+							resultEnv.add( function->forall );
 
 							// Load type variables from arguemnts into one shared space
