import ceylon.language.meta.declaration { ValueDeclaration }

"""A value model represents the model of a Ceylon value that you can read and inspect.
   A value is a toplevel binding, declared on a package.
   This is a [[ValueModel]] that you can query for a value declaration's current value:
       shared String foo = "Hello";
       void test(){
           Value<String> val = `foo`;
           // This will print: Hello
shared sealed interface Value<out Get=Anything, in Set=Nothing>
        satisfies ValueModel<Get, Set>&Gettable<Get, Set> {

    "This value's declaration."
    shared formal actual ValueDeclaration declaration;