    import ceylon.language.meta.model{
        Type,
        Function,
        Method
    }

    """Abstraction over declarations which can be invoked, namely functions, methods and constructors """
    shared sealed interface FunctionDeclaration
            satisfies FunctionOrValueDeclaration & FunctionalDeclaration {

        shared actual formal Function<Return, Arguments> apply<Return=Anything, Arguments=Nothing>(Type<>* typeArguments)
                given Arguments satisfies Anything[];

        shared actual formal Method<Container, Return, Arguments> memberApply<Container=Nothing, Return=Anything, Arguments=Nothing>(Type<Object> containerType, Type<>* typeArguments)
                given Arguments satisfies Anything[];
    }