the types of the updated fields may
mention only the universally-quantified type variables
of the data constructor. For GADTs, the field may mention only types
-that appear as a simple type-variable argument in the constructor's result type.
-</emphasis>. For exmaple:
+that appear as a simple type-variable argument in the constructor's result
+type</emphasis>. For example:
<programlisting>
data T a where { T1 { f1::a, f2::(a,b) } :: T a } -- b is existential
upd1 t x = t { f1=x } -- OK: upd1 :: T a -> b -> T b
data G a b where { G1 { f1::a, f2::c } :: G a [c] }
upd3 g x = g { f1=x } -- OK: upd3 :: G a b -> c -> G c b
upd4 g x = g { f2=x } -- BAD (f2's type mentions c, which is not a simple
- -- type-varialbe argument in G1's result type)
+ -- type-variable argument in G1's result type)
</programlisting>
</para>