class A { public F[A, B] (_ : A -> B) : void {} public G[A] (_ : A) : void {} public Q () : void { def f (_) {}; _ = F (f); //E: cannot use `void' in generic specifier _ = G (f (0)); //E: cannot use `void' in generic specifier } } class B { public static F[A, B] (_ : A -> B) : void {} public static G[A] (_ : A) : void {} public static Q () : void { def f (_) {}; _ = F (f); //E: cannot use `void' in generic specifier _ = G (f (0)); //E: cannot use `void' in generic specifier } } public module FuncHelper2 { public static Pipe[A, B, C] (_fab : A -> B, _fbc : B -> C) : void { def d2i ( x : int ) : int { x + 1 } def print ( x : int ) : void { System.Console.WriteLine (x) } //without void check it generates unverifiable/bad code Pipe (d2i, print); //E: cannot use `void' in generic specifier } } module Program { Main() : void { System.Console.WriteLine(Foo((1,2))); _ = System.Console.ReadKey() } Foo(x : object) : string { //E: | x is _ * int => //E: cannot use `void' in generic specifier mutable a = x[0]; //E: cannot use `void' in generic specifier a = (); "_" | _ => "Other" } } _ = (1, ()); //E: cannot use `void' in generic specifier