id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
29	Implement checks on the use of forall-quantified types	nibro	nibro	"Currently the parser treats all the forall-enabling extensions as equivalent. As long as one of them is on, to allow the forall keyword, then all uses of that keyword are allowed. We need checks on where they are allowed.

EDIT: The following is no longer valid:

First we have the data constructor uses.[[BR]]
 * ExistentialQuantification: Allow forall-quantified data constructors.[[BR]]
 * PolymorphicComponents: Allow data constructor declarations to have forall-quantified arguments.

Second we have the actual type uses:[[BR]]
 * LiberalTypeSynonyms: Allow forall-quantified types in type synonym declarations, as well as applying type synonyms to forall-quantified types.[[BR]]
 * Rank2Types: Allow forall-quantified types as arguments to functions, i.e. on the left of a function arrow.[[BR]]
 * RankNTypes: Allow forall-quantified types anywhere in actual types, except as arguments to type synonyms (requires LiberalTypeSynonyms).[[BR]]
 * ImpredicativeTypes: Allow forall-quantified types as arguments to type constructors.

EDIT: Here is what should go instead:

 * ExistentialQuantification: Allow forall-quantified data constructors.[[BR]]
 * Rank2Types, RankNTypes, PolymorphicComponents, LiberalTypeSynonyms: Allow forall-quantified types.[[BR]]

See [http://nibrofun.blogspot.com/2009/06/whats-in-forall.html] for why this has changed.

This is part of ticket #14."	bug report	closed	blocker	Full code support	parser		fixed		
