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;
    
    
}