4 In <:StandardML:Standard ML>, datatype declarations are said to be
5 _generative_, because each time a datatype declaration is evaluated,
6 it yields a new type. Thus, any attempt to mix the types will lead to
7 a type error at compile-time. The following program, which does not
8 type check, demonstrates this.
18 val _: S1.t -> S2.t = fn x => x
21 Generativity also means that two different datatype declarations
22 define different types, even if they define identical constructors.
23 The following program does not type check due to this.
31 val _ = if true then a1 else a2
36 * <:GenerativeException:>