id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc
83	Look in data definition when checking dangerous vars	benl		"{{{
data TwoThings r1 r2 r3 a 
      = ThingOne (Int r2)
      | ThingTwo (Maybe r3 b)
}}}

wrt the mutability / backtracking problem.

The rule should be at generalisation time, If a region var makes other variables dangerous, then hold  it constant unless it already has a mutability constraint.  If the user wants it to be mutable, then require them to supply a type signature. Otherwise leave it constant.

For example, if we are to generalise:
{{{
 foo :: TwoThings r1 r2 r3
}}}
then make r1 and r3 constant, but leave r2 unconstrained.
"	enhancement	new	blocker	0.1.5	Source Type Inferencer				
