Index: src/ResolvExpr/Alternative.h
===================================================================
--- src/ResolvExpr/Alternative.h	(revision aefcc3b4bc74c06dfe70a46ab130a8295ab26c3c)
+++ src/ResolvExpr/Alternative.h	(revision 65660bd065cbc0b68c92db2425b5984d675dff58)
@@ -45,45 +45,4 @@
 		TypeEnvironment env;
 	};
-
-	/// helper function used by explode
-	template< typename OutputIterator >
-	void explodeUnique( Expression * expr, const Alternative & alt, OutputIterator out ) {
-		Type * res = expr->get_result();
-		if ( TupleType * tupleType = dynamic_cast< TupleType * > ( res ) ) {
-			if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * >( expr ) ) {
-				// can open tuple expr and dump its exploded components
-				for ( Expression * expr : tupleExpr->get_exprs() ) {
-					explodeUnique( expr, alt, out );
-				}
-			} else {
-				// tuple type, but not tuple expr - need to refer to single instance of the argument
-				// expression and index into its components
-				UniqueExpr * unq = new UniqueExpr( expr->clone() );
-				for ( unsigned int i = 0; i < tupleType->size(); i++ ) {
-					TupleIndexExpr * idx = new TupleIndexExpr( unq->clone(), i );
-					explodeUnique( idx, alt, out );
-					delete idx;
-				}
-				delete unq;
-			}
-		} else {
-			// atomic (non-tuple) type - output a clone of the expression in a new alternative
-			*out++ = Alternative( expr->clone(), alt.env, alt.cost, alt.cvtCost );
-		}
-	}
-
-	/// expands a tuple-valued alternative into multiple alternatives, each with a non-tuple-type
-	template< typename OutputIterator >
-	void explode( const Alternative &alt, OutputIterator out ) {
-		explodeUnique( alt.expr, alt, out );
-	}
-
-	// explode list of alternatives
-	template< typename OutputIterator >
-	void explode( const AltList & alts, OutputIterator out ) {
-		for ( const Alternative & alt : alts ) {
-			explode( alt, out );
-		}
-	}
 } // namespace ResolvExpr
 
