Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision 4b6ef7029b7327923c4ddf07c1f9b0f8d4d1af9f)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 1fdfc232a699adc53d34403e6ac291a624b88d41)
@@ -625,6 +625,6 @@
 
 		/// Clones and adds an actual, returns this
-		ArgPack& withArg( Expression* expr ) {
-			actuals.emplace_back( expr->clone(), this->env, Cost::zero );
+		ArgPack& withArg( Expression* expr, Cost cost = Cost::zero ) {
+			actuals.emplace_back( expr->clone(), this->env, cost );
 			if ( ! tupleEls.empty() ) ++tupleEls.back();
 			return *this;
@@ -686,4 +686,5 @@
 						// add details of actual to result
 						aResult.env.addActual( actual.env, aResult.openVars );
+						Cost cost = actual.cost;
 		
 						// explode argument
@@ -693,5 +694,6 @@
 						// add exploded argument to tuple
 						for ( Alternative& aActual : exploded ) {
-							aResult.withArg( aActual.expr );
+							aResult.withArg( aActual.expr, cost );
+							cost = Cost::zero;
 						}
 						++aResult.nextArg;
@@ -777,5 +779,5 @@
 				if ( unify( formalType, actualType, aResult.env, aResult.need, aResult.have, aResult.openVars, indexer ) ) {
 					// add argument
-					aResult.withArg( aActual.expr );
+					aResult.withArg( aActual.expr, actual.cost );
 					if ( exploded.size() == 1 ) {
 						// argument consumed
