using Nemerle.IO; class P { } class C : P { } interface I { boo () : P; } abstract class Ab : I { public abstract boo () : C; } class B : Ab { public override boo () : C { print ("B:boo\n"); null } } class AA {} class BB : AA {} interface J { foo (x : BB) : AA; hoo (x : int) : object; } class OO : J { public foo (_x : AA) : BB { print ("OO:foo\n"); null } public hoo (x : object) : int { print ("OO:hoo "); print (x.ToString ()); print ("\n"); 1 } } module M { Main () : void { def x = B() : I; _ = x.boo (); def x = OO () : J; _ = x.foo (null); print (x.hoo (4).ToString ()); print ("\n"); } } /* BEGIN-OUTPUT B:boo OO:foo OO:hoo 4 1 END-OUTPUT */