class A ['a] { x : A [int]; y : A ['a]; mutable z : 'a; static foo () : void { def x = A(); x.z = 1; } } class GMEth { public static genmeth [T] (x : T) : T { x } public static f () : void { def x = genmeth (1); assert (x == 1); } } interface I1 [T] { foo () : T; } class SpecConsts [T, G] : GMEth where T : class, GMEth, I1 [G] where G : class, A [T] { } interface I2 { faa () : int; } class FA : I2 { public faa () : int { 1 } } [Record] class FO ['a] : I1 ['a] { public foo () : 'a { fld } fld : 'a; } [Record] class FAGEN ['a] where 'a : I2 { public foo () : void { assert (fld.faa () == 1); } fld : 'a; } [Record] class FOGEN ['a, 'b] where 'a : I1 ['b] { public Run () : void { Nemerle.IO.printf ("%s\n", fld.foo ().ToString ()); } fld : 'a; } GMEth.f (); def x = FAGEN (FA()); x.foo(); def y = FOGEN (FO ("aa")); y.Run (); /* BEGIN-OUTPUT aa END-OUTPUT */