Index: src/Tuples/Tuples.cc
===================================================================
--- src/Tuples/Tuples.cc	(revision b910d1581964a9cd195951b58c7496d1e853b46f)
+++ src/Tuples/Tuples.cc	(revision 898ae07083cd0f415efeb25ebe9102635dffaa82)
@@ -10,6 +10,6 @@
 // Created On       : Mon Jun 17 14:41:00 2019
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Jun 12 15:43:00 2019
-// Update Count     : 0
+// Last Modified On : Tue Jun 18  9:31:00 2019
+// Update Count     : 1
 //
 
@@ -27,31 +27,28 @@
 	/// impure.
     struct ImpurityDetector : public ast::WithShortCircuiting {
-		ImpurityDetector( bool ignoreUnique ) : ignoreUnique( ignoreUnique ) {}
 		bool maybeImpure = false;
-		bool ignoreUnique;
 
 		void previsit( ast::ApplicationExpr const * appExpr ) {
-			visit_children = false;
 			if ( ast::DeclWithType const * function = InitTweak::getFunction( appExpr ) ) {
 				if ( function->linkage == ast::Linkage::Intrinsic
 						&& ( function->name == "*?" || function->name == "?[?]" ) ) {
-					visit_children = true;
 					return;
 				}
 			}
-			maybeImpure = true;
+			maybeImpure = true; visit_children = false;
 		}
 		void previsit( ast::UntypedExpr const * ) {
 			maybeImpure = true; visit_children = false;
 		}
+	};
+	struct ImpurityDetectorIgnoreUnique : public ImpurityDetector {
 		void previsit( ast::UniqueExpr const * ) {
-			if ( ignoreUnique ) {
-				visit_children = false;
-			}
+			visit_children = false;
 		}
 	};
 
-	bool detectImpurity( const ast::Expr * expr, bool ignoreUnique ) {
-		ast::Pass<ImpurityDetector> detector( ignoreUnique );
+	template<typename Detector>
+	bool detectImpurity( const ast::Expr * expr ) {
+		ast::Pass<Detector> detector;
 		expr->accept( detector );
 		return detector.pass.maybeImpure;
@@ -59,6 +56,10 @@
 } // namespace
 
+bool maybeImpure( const ast::Expr * expr ) {
+	return detectImpurity<ImpurityDetector>( expr );
+}
+
 bool maybeImpureIgnoreUnique( const ast::Expr * expr ) {
-	return detectImpurity( expr, true );
+	return detectImpurity<ImpurityDetectorIgnoreUnique>( expr );
 }
 
Index: src/Tuples/Tuples.h
===================================================================
--- src/Tuples/Tuples.h	(revision b910d1581964a9cd195951b58c7496d1e853b46f)
+++ src/Tuples/Tuples.h	(revision 898ae07083cd0f415efeb25ebe9102635dffaa82)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Andrew Beach
-// Last Modified On : Wed Jun 12 10:39:00 2017
-// Update Count     : 17
+// Last Modified On : Tue Jun 18 09:36:00 2019
+// Update Count     : 18
 //
 
@@ -56,4 +56,5 @@
 	/// returns true if the expression may contain side-effects.
 	bool maybeImpure( Expression * expr );
+	bool maybeImpure( const ast::Expr * expr );
 
 	/// Returns true if the expression may contain side-effect,
