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,,,,
