    import ceylon.language.meta.declaration {
        NestableDeclaration
    }

    "The root of all models. There are several types of models:

     - [[ClassOrInterface]]
     - [[FunctionModel]]
     - [[ValueModel]]
     "
    shared sealed interface Model
                of ClassOrInterface<>
                 | FunctionModel<>
                 | ValueModel<>
            satisfies Declared {

        "The container type of this model, or `null` if this is a toplevel model."
        shared actual formal Type<>? container;

        "The declaration for this model."
        shared actual formal NestableDeclaration declaration;
    }