Index: src/AST/Decl.cpp
===================================================================
--- src/AST/Decl.cpp	(revision c36a4198e8f7c0fb7cafec586aebca035adef800)
+++ src/AST/Decl.cpp	(revision d787828d13d57d1f8171523e352bccf1fa513216)
@@ -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 c36a4198e8f7c0fb7cafec586aebca035adef800)
+++ src/AST/Decl.hpp	(revision d787828d13d57d1f8171523e352bccf1fa513216)
@@ -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,
