An isa clause is syntactic sugar for both a subtypes clause and an inherits clause, i.e., sugar for the case where inheritance and subtyping are parallel. If the object keyword is used, then the declaration is syntactic sugar for the pair of an object representation declaration and a type declaration. Both the object and the type have the same name, but there is no potential for ambiguity since object and type names are resolved in separate name spaces. The new type subtypes from all the types listed in the subtypes clause and from the types to which the objects in the isa clause of the original declaration conform. The new object representation conforms to the new type and inherits from the object representations listed in the inherits and isa clauses of the original declaration.
Representations often add new, implementation-specific operations.
For example, the cons representation defined earlier introduced the head and tail fields. To be able to send messages that access these new features, a type must exist that includes the appropriate signatures. If cons were only a representation, then a separate type would need to be defined that included signatures for head and tail . To avoid this extra step, a representation declaration, like an object declaration, introduces a corresponding type. Unlike an object declaration, however, the type derived from a representation declaration is anonymous.