    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
               print(val.get());
           }
     """
    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;

    }