"The abstract supertype of all types with a well-defined
 notion of identity. Values of type `Identifiable` may 
 be compared using the `===` operator to determine if 
 they are references to the same object instance. For
 the sake of convenience, this interface defines a
 default implementation of value equality equivalent
 to identity. Of course, subtypes are encouraged to
 refine this implementation."
by ("Gavin")
shared interface Identifiable {
    
    "Identity equality comparing the identity of the two 
     values. May be refined by subtypes for which value 
     equality is more appropriate. Implementations must
     respect the constraint that if `x===y` then `x==y` 
     (equality is consistent with identity)."
    shared default actual Boolean equals(Object that) {
        if (is Identifiable that) {
            return this===that;
        }
        else {
            return false;
        }
    }
    
    "The system-defined identity hash value of the 
     instance. Subtypes which refine `equals()` must 
     also refine `hash`, according to the general 
     contract defined by `Object`."
    see (`function identityHash`)
    shared default actual Integer hash => identityHash(this);
    
}