Index: src/AST/Expr.hpp
===================================================================
--- src/AST/Expr.hpp	(revision 9b81fed3954b47cd9869551303b5c26944dfea2d)
+++ src/AST/Expr.hpp	(revision 264e69123587f0b13a2568bfb5159dd8fbdabf6b)
@@ -23,5 +23,5 @@
 #include "Fwd.hpp"        // for UniqueId
 #include "ParseNode.hpp"
-#include "Type.hpp"       // for ptr<Type>
+#include "Visitor.hpp"
 
 namespace ast {
@@ -117,11 +117,23 @@
 	bool extension = false;
 
-	Expr(const CodeLocation& loc ) : ParseNode( loc ), result(), env(), inferred() {}
+	Expr(const CodeLocation & loc ) : ParseNode( loc ), result(), env(), inferred() {}
 
 	Expr* set_extension( bool ex ) { extension = ex; return this; }
 
-	virtual Expr* accept( Visitor& v ) override = 0;
+	virtual Expr * accept( Visitor & v ) override = 0;
 private:
-	virtual Expr* clone() const override = 0;
+	virtual Expr * clone() const override = 0;
+};
+
+/// A type used as an expression (e.g. a type generator parameter)
+class TypeExpr final : public Expr {
+public:
+	ptr<Type> type;
+
+	TypeExpr( const CodeLocation & loc, const Type * t ) : Expr(loc), type(t) {}
+
+	Expr* accept( Visitor & v ) override { return v.visit( this ); }
+private:
+	TypeExpr * clone() const override { return new TypeExpr{ *this }; }
 };
 
