Index: src/AST/Decl.cpp
===================================================================
--- src/AST/Decl.cpp	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/AST/Decl.cpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -41,25 +41,9 @@
 
 FunctionDecl::FunctionDecl( const CodeLocation & loc, const std::string & name,
-	std::vector<ptr<TypeDecl>>&& forall,
 	std::vector<ptr<DeclWithType>>&& params, std::vector<ptr<DeclWithType>>&& returns,
 	CompoundStmt * stmts, Storage::Classes storage, Linkage::Spec linkage,
 	std::vector<ptr<Attribute>>&& attrs, Function::Specs fs, ArgumentFlag isVarArgs )
-: DeclWithType( loc, name, storage, linkage, std::move(attrs), fs ),
-	type_params(std::move(forall)), assertions(),
-	params(std::move(params)), returns(std::move(returns)), stmts( stmts ) {
-	FunctionType * ftype = new FunctionType( isVarArgs );
-	for (auto & param : this->params) {
-		ftype->params.emplace_back(param->get_type());
-	}
-	for (auto & ret : this->returns) {
-		ftype->returns.emplace_back(ret->get_type());
-	}
-	for (auto & tp : this->type_params) {
-		ftype->forall.emplace_back(new TypeInstType(tp));
-		for (auto & ap: tp->assertions) {
-			ftype->assertions.emplace_back(new VariableExpr(loc, ap));
-		}
-	}
-	this->type = ftype;
+: FunctionDecl( loc, name, {}, {}, std::move(params), std::move(returns),
+		stmts, storage, linkage, std::move(attrs), fs, isVarArgs ) {
 }
 
Index: src/AST/Decl.hpp
===================================================================
--- src/AST/Decl.hpp	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/AST/Decl.hpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -135,15 +135,11 @@
 	std::vector< ptr<Expr> > withExprs;
 
-	// The difference between the two constructors is in how they handle
-	// assertions. The first constructor uses the assertions from the type
-	// parameters, in the style of the old ast, and puts them on the type.
-	// The second takes an explicite list of assertions and builds a list of
-	// references to them on the type.
-
-	FunctionDecl( const CodeLocation & loc, const std::string & name, std::vector<ptr<TypeDecl>>&& forall,
+	/// Monomorphic Function Constructor:
+	FunctionDecl( const CodeLocation & locaction, const std::string & name,
 		std::vector<ptr<DeclWithType>>&& params, std::vector<ptr<DeclWithType>>&& returns,
 		CompoundStmt * stmts, Storage::Classes storage = {}, Linkage::Spec linkage = Linkage::Cforall,
 		std::vector<ptr<Attribute>>&& attrs = {}, Function::Specs fs = {}, ArgumentFlag isVarArgs = FixedArgs );
 
+	/// Polymorphic Function Constructor:
 	FunctionDecl( const CodeLocation & location, const std::string & name,
 		std::vector<ptr<TypeDecl>>&& forall, std::vector<ptr<DeclWithType>>&& assertions,
Index: src/Concurrency/Actors.cpp
===================================================================
--- src/Concurrency/Actors.cpp	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/Concurrency/Actors.cpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -265,5 +265,4 @@
                 decl->location,
                 "__CFA_receive_wrap",
-                {},                     // forall
                 {
                     new ObjectDecl(
@@ -288,5 +287,5 @@
                     )
                 },                      // params
-                { 
+                {
                     new ObjectDecl(
                         decl->location,
@@ -400,5 +399,5 @@
 				)
 			));
-            
+
             // Generates: return receiver;
             sendBody->push_back( new ReturnStmt( decl->location, new NameExpr( decl->location, "receiver" ) ) );
@@ -408,5 +407,4 @@
                 decl->location,
                 "?|?",
-                {},                     // forall
                 {
                     new ObjectDecl(
@@ -421,5 +419,5 @@
                     )
                 },                      // params
-                { 
+                {
                     new ObjectDecl(
                         decl->location,
@@ -434,5 +432,5 @@
                 { Function::Inline }
             );
-            
+
             // forward decls to resolve use before decl problem for '|' routines
             forwardDecls.insertDecl( *actorIter, *messageIter , ast::deepCopy( sendOperatorFunction ) );
Index: src/Concurrency/Corun.cpp
===================================================================
--- src/Concurrency/Corun.cpp	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/Concurrency/Corun.cpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -113,5 +113,4 @@
             new FunctionDecl( loc,
                 fnName,                                             // name
-                {},                                                 // forall
                 {
                     new ObjectDecl( loc,
@@ -261,5 +260,4 @@
             new FunctionDecl( loc,
                 fnName,                                             // name
-                {},                                                 // forall
                 {},                                                 // params
                 {},                                                 // return
Index: src/Concurrency/KeywordsNew.cpp
===================================================================
--- src/Concurrency/KeywordsNew.cpp	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/Concurrency/KeywordsNew.cpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -482,5 +482,4 @@
 		location,
 		getter_name,
-		{}, // forall
 		{ this_decl }, // params
 		{ ret_decl }, // returns
@@ -499,5 +498,4 @@
 			location,
 			"main",
-			{},
 			{ ast::deepCopy( this_decl ) },
 			{},
@@ -575,5 +573,4 @@
 		location,
 		"lock",
-		{ /* forall */ },
 		{
 			// Copy the declaration of this.
@@ -607,5 +604,4 @@
 		location,
 		"unlock",
-		{ /* forall */ },
 		{
 			// Last use, consume the declaration of this.
Index: src/Concurrency/Waituntil.cpp
===================================================================
--- src/Concurrency/Waituntil.cpp	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/Concurrency/Waituntil.cpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -553,5 +553,4 @@
     return new FunctionDecl( loc,
         predName,
-        {},                     // forall
         {
             new ObjectDecl( loc,
@@ -560,5 +559,5 @@
             )
         },
-        { 
+        {
             new ObjectDecl( loc,
                 "sat_ret",
Index: src/ControlStruct/ExceptTranslateNew.cpp
===================================================================
--- src/ControlStruct/ExceptTranslateNew.cpp	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/ControlStruct/ExceptTranslateNew.cpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -253,5 +253,4 @@
 		location,
 		"try",
-		{}, //forall
 		{}, //no param
 		{}, //no return
@@ -267,5 +266,4 @@
 		location,
 		"catch",
-		{}, //forall
 		{ make_index_object( location ), make_exception_object( location ) },
 		{}, //return void
@@ -281,5 +279,4 @@
 		location,
 		"match",
-		{}, //forall
 		{ make_exception_object( location ) },
 		{ make_unused_index_object( location ) },
@@ -295,5 +292,4 @@
 		location,
 		"handle",
-		{}, //forall
 		{ make_exception_object( location ) },
 		{ make_bool_object( location ) },
@@ -309,5 +305,4 @@
 		location,
 		"finally",
-		{}, //forall
 		{ make_voidptr_object( location ) },
 		{}, //return void
Index: src/InitTweak/FixGlobalInit.cc
===================================================================
--- src/InitTweak/FixGlobalInit.cc	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/InitTweak/FixGlobalInit.cc	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -84,5 +84,5 @@
 		if (inLibrary) ctorParams.emplace_back(ast::ConstantExpr::from_int(location, 200));
 		auto initFunction = new ast::FunctionDecl(location,
-			"__global_init__", {}, {}, {},
+			"__global_init__", {}, {}, {}, {},
 			new ast::CompoundStmt(location, std::move(fixer.core.initStmts)),
 			ast::Storage::Static, ast::Linkage::C,
@@ -96,5 +96,5 @@
 		if (inLibrary) dtorParams.emplace_back(ast::ConstantExpr::from_int(location, 200));
 		auto destroyFunction = new ast::FunctionDecl( location,
-			"__global_destroy__", {}, {}, {},
+			"__global_destroy__", {}, {}, {}, {},
 			new ast::CompoundStmt(location, std::move(fixer.core.destroyStmts)),
 			ast::Storage::Static, ast::Linkage::C,
Index: src/InitTweak/FixInitNew.cpp
===================================================================
--- src/InitTweak/FixInitNew.cpp	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/InitTweak/FixInitNew.cpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -74,4 +74,5 @@
 		fname,
 		std::move(typeParams),
+		{},
 		{dstParam},
 		{},
@@ -899,5 +900,5 @@
 
 					// void __objName_dtor_atexitN(...) {...}
-					ast::FunctionDecl * dtorCaller = new ast::FunctionDecl(loc, objDecl->mangleName + dtorCallerNamer.newName(), {}, {}, {}, new ast::CompoundStmt(loc, {dtor}), ast::Storage::Static, ast::Linkage::C );
+					ast::FunctionDecl * dtorCaller = new ast::FunctionDecl(loc, objDecl->mangleName + dtorCallerNamer.newName(), {}, {}, {}, {}, new ast::CompoundStmt(loc, {dtor}), ast::Storage::Static, ast::Linkage::C );
 					dtorCaller->fixUniqueId();
 					// dtorCaller->stmts->push_back( dtor );
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/InitTweak/InitTweak.cc	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -342,5 +342,5 @@
 	if (!assign) {
 		auto td = new ast::TypeDecl(CodeLocation(), "T", {}, nullptr, ast::TypeDecl::Dtype, true);
-		assign = new ast::FunctionDecl(CodeLocation(), "?=?", {td},
+		assign = new ast::FunctionDecl(CodeLocation(), "?=?", {td}, {},
 		{ new ast::ObjectDecl(CodeLocation(), "_dst", new ast::ReferenceType(new ast::TypeInstType("T", td))),
 		  new ast::ObjectDecl(CodeLocation(), "_src", new ast::TypeInstType("T", td))},
Index: src/Virtual/Tables.cc
===================================================================
--- src/Virtual/Tables.cc	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/Virtual/Tables.cc	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -165,5 +165,4 @@
 		location,
 		functionName,
-		{ /* forall */ },
 		{ new ast::ObjectDecl(
 			location,
Index: src/Virtual/VirtualDtor.cpp
===================================================================
--- src/Virtual/VirtualDtor.cpp	(revision 4bc4b4cec0733ff958ac176d48cfdd174ada1a31)
+++ src/Virtual/VirtualDtor.cpp	(revision 37273c8cb34ce14d7da1cb9d4d43491327ff6807)
@@ -248,5 +248,4 @@
             decl->location,
             "__CFA_set_dtor",
-            {},                     // forall
             {
                 new ObjectDecl(
@@ -320,5 +319,4 @@
             decl->location,
             "delete",
-            {},                     // forall
             {
                 new ObjectDecl(
