Index: src/CompilationState.cc
===================================================================
--- src/CompilationState.cc	(revision 309012709e091dfaf06aaeec56491e73a68b71a1)
+++ src/CompilationState.cc	(revision 76e21136a1c0bd25b9c248fb398e4bb5222916b9)
@@ -27,4 +27,5 @@
 	nopreludep = false,
 	genproto = false,
+	deterministic_output = false,
 	nomainp = false,
 	parsep = false,
Index: src/CompilationState.h
===================================================================
--- src/CompilationState.h	(revision 309012709e091dfaf06aaeec56491e73a68b71a1)
+++ src/CompilationState.h	(revision 76e21136a1c0bd25b9c248fb398e4bb5222916b9)
@@ -28,4 +28,5 @@
 	nopreludep,
 	genproto,
+	deterministic_output,
 	nomainp,
 	parsep,
Index: src/ResolvExpr/TypeEnvironment.cc
===================================================================
--- src/ResolvExpr/TypeEnvironment.cc	(revision 309012709e091dfaf06aaeec56491e73a68b71a1)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision 76e21136a1c0bd25b9c248fb398e4bb5222916b9)
@@ -20,4 +20,5 @@
 #include <utility>                     // for pair, move
 
+#include "CompilationState.h"          // for deterministic_output
 #include "Common/utility.h"            // for maybeClone
 #include "SynTree/Type.h"              // for Type, FunctionType, Type::Fora...
@@ -106,7 +107,9 @@
 
 	void EqvClass::print( std::ostream &os, Indenter indent ) const {
-		os << "( ";
-		std::copy( vars.begin(), vars.end(), std::ostream_iterator< std::string >( os, " " ) );
-		os << ")";
+		if( !deterministic_output ) {
+			os << "( ";
+			std::copy( vars.begin(), vars.end(), std::ostream_iterator< std::string >( os, " " ) );
+			os << ")";
+		}
 		if ( type ) {
 			os << " -> ";
@@ -235,5 +238,5 @@
 		// check safely bindable
 		if ( r.type && occursIn( r.type, s.vars.begin(), s.vars.end(), *this ) ) return false;
-		
+
 		// merge classes in
 		r.vars.insert( s.vars.begin(), s.vars.end() );
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 309012709e091dfaf06aaeec56491e73a68b71a1)
+++ src/main.cc	(revision 76e21136a1c0bd25b9c248fb398e4bb5222916b9)
@@ -443,5 +443,5 @@
 
 
-static const char optstring[] = ":c:ghlLmNnpP:S:twW:D:";
+static const char optstring[] = ":c:ghlLmNnpdP:S:twW:D:";
 
 enum { PreludeDir = 128 };
@@ -456,4 +456,5 @@
 	{ "no-prelude", no_argument, nullptr, 'n' },
 	{ "prototypes", no_argument, nullptr, 'p' },
+	{ "deterministic-out", no_argument, nullptr, 'd' },
 	{ "print", required_argument, nullptr, 'P' },
 	{ "prelude-dir", required_argument, nullptr, PreludeDir },
@@ -476,4 +477,5 @@
 	"do not read prelude",                                // -n
 	"generate prototypes for prelude functions",		// -p
+	"don't print output that isn't deterministic",        // -d
 	"print",                                              // -P
 	"<directory> prelude directory for debug/nodebug",	// no flag
@@ -580,4 +582,7 @@
 			genproto = true;
 			break;
+		  case 'd':                                     // don't print non-deterministic output
+		    deterministic_output = true;
+			break;
 		  case 'P':										// print options
 			for ( int i = 0;; i += 1 ) {
