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<Anything>
                        | FunctionModel<Anything, Nothing> 
                        | ValueModel<Anything> {
    
    "The container type of this model, or `null` if this is a toplevel model."
    shared formal Type<Anything>? container;
    
    "The declaration for this model."
    shared formal NestableDeclaration declaration;
}