Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision 4d6d62ed4859b907bfb967784da082be0112c77a)
+++ src/SynTree/Expression.cc	(revision 629a497eefbe9afd7d57d24b513bf0f82516905b)
@@ -50,4 +50,11 @@
 }
 
+void Expression::spliceInferParams( Expression * other ) {
+	if ( ! other ) return;
+	for ( auto p : other->inferParams ) {
+		inferParams[p.first] = std::move( p.second );
+	}
+}
+
 Expression::~Expression() {
 	delete env;
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision 4d6d62ed4859b907bfb967784da082be0112c77a)
+++ src/SynTree/Expression.h	(revision 629a497eefbe9afd7d57d24b513bf0f82516905b)
@@ -76,4 +76,7 @@
 	InferredParams & get_inferParams() { return inferParams; }
 
+	// move other's inferParams to this
+	void spliceInferParams( Expression * other );
+
 	virtual Expression * clone() const override = 0;
 	virtual void accept( Visitor & v ) override = 0;
