+The rule for record update is this: <emphasis>
+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 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
+upd2 t x = t { f2=x } -- BAD (f2's type mentions b, which is
+ -- existentially quantified)