class Y [T] { } class Z [T] { } module M { dupl[T] (cnt : int, _ : T) : int { if (cnt < 0) 1 else dupl (cnt - 1, Z () : Z[Y[T]]) + dupl (cnt - 1, Z () : Z[Y[Y[T]]]) } Main () : void { System.Console.WriteLine (dupl (7, "foo")); } }