import ceylon.language.meta.declaration{FunctionDeclaration}

"""A function model represents the model of a Ceylon function that you can invoke and inspect.
   A function is a toplevel binding, declared on a package.
   This is a [[FunctionModel]] that you can also invoke:
       shared String foo(String name) => "Hello "+name;
       void test(){
           Function<String,[String]> f = `foo`;
           // This will print: Hello Stef
shared sealed interface Function<out Type=Anything, in Arguments=Nothing>
        satisfies FunctionModel<Type, Arguments> & Applicable<Type, Arguments>
        given Arguments satisfies Anything[] {
    "This function's declaration."
    shared formal actual FunctionDeclaration declaration;