import ceylon.language.meta.declaration {
    GettableDeclaration,
    NestableDeclaration
}
import ceylon.language.meta.model {
    ClosedType = Type
}

"""A value model represents the model of a Ceylon value that you can inspect.
   
   A value model can be either a toplevel [[Value]] or a member [[Attribute]].
 """
shared sealed interface ValueModel<out Get=Anything, in Set=Nothing>
        satisfies Model {

    "This value's declaration."
    shared formal actual NestableDeclaration&GettableDeclaration declaration;
    
    "This value's closed type."
    shared formal ClosedType<Get> type;
}