import ceylon.language.meta.model { AppliedType = Type } """Model for members that can be bound to a containing instance to turn them into toplevel models. You can bind a member to an instance by invoking that member with the instance as parameter: shared class Outer(String name){ shared class Inner(){ shared String hello => "Hello "+name; } } void test(){ Member<Outer,Class<Outer.Inner,[]>> memberClass = `Outer.Inner`; Class<Outer.Inner,[]> c = memberClass(Outer("Stef")); // This will print: Hello Stef print(c().hello); } """ shared sealed interface Member<in Container=Nothing, out Kind=Model> satisfies Qualified<Kind,Container> given Kind satisfies Model { "The declaring closed type. This is the type that declared this member." shared formal AppliedType<> declaringType; /*"Type-unsafe container binding, to be used when the container type is unknown until runtime. This has the same behaviour as invoking this `Member` directly, but exchanges compile-time type safety with runtime checks." throws(`class IncompatibleTypeException`, "If the container is not assignable to this member's container") shared formal Kind bind(Object container);*/ }