    "Abstract supertype of objects whose value can be
     cloned."
    shared interface Cloneable<out Clone> of Clone
            given Clone satisfies Cloneable<Clone> {

        "Obtain a clone of this object. For a mutable
         object, this should return a copy of the object.
         For an immutable object, it is acceptable to return
         the object itself."
        shared formal Clone clone;

    }