import ceylon.language.meta.declaration{CallableConstructorDeclaration}

"""A callable constructor model represents the model of a Ceylon class 
   constructor that you can invoke and inspect
   ## Callablity
   As with [[Function]] you can also invoke a `CallableConstructor`, doing so 
   instantiates an instance:
        shared class Foo {
            shared String name;
            shared new foo(String name) {
       = name;
        void test() {
        Constructor<Foo,[String]> ctor = ``;
        // This will print: Stef
   ## Genericity
   This class inherits [[Generic]] but a constructor in Ceylon cannot 
   have a type parameters. 
   For symmetry with [[CallableConstructorDeclaration.apply]] the 
   [[typeArguments]] and [[typeArgumentList]] refer to the type arguments 
   of the constructor's class.
shared sealed interface CallableConstructor<out Type=Object, in Arguments=Nothing>
        satisfies FunctionModel<Type, Arguments> & Applicable<Type, Arguments>
        given Arguments satisfies Anything[] {
    "This constructor's declaration."
    shared formal actual CallableConstructorDeclaration declaration;
    shared formal actual ClassModel<Type> type;
    "The class containing this constructor; the type of instances produced 
     by this constructor."
    shared actual formal ClassModel<Type>? container;