[This code](https://playground.ponylang.io/?gist=2030fd008e61a764e00a5747fbe6761d) won't compile: ```pony actor Main new create(env: Env) => env.out.print("Hello") trait Foo[In, Out] fun apply(src: In^): Out^ fun ref into[Into](from: {(Out^): Into^}): Foo[In, Into] => Converter[In, Out, Into](this, from) primitive Converter[In, Out, Into] fun apply(foo: Foo[In, Out], from: {(Out^): Into^}): Foo[In, Into] => object is Foo[In, Into] fun apply(src: In^): Into^ => from(foo(src)) end ``` (The reason I am using a `Converter` primitive and not directly an object literal is #4451) But [this](https://playground.ponylang.io/?gist=7c91298409ce48fff571d92993d49170) will do, just changing the name of the `Into` type (and only that) into any other name (here, `Dest`): ```pony actor Main new create(env: Env) => env.out.print("Hello") trait Foo[In, Out] fun apply(src: In^): Out^ fun ref into[Into](from: {(Out^): Into^}): Foo[In, Into] => Converter[In, Out, Into](this, from) primitive Converter[In, Out, Dest] fun apply(foo: Foo[In, Out], from: {(Out^): Dest^}): Foo[In, Dest] => object is Foo[In, Dest] fun apply(src: In^): Dest^ => from(foo(src)) end ```