In contrast, objects such as cons and list are not directly manipulated at run-time. Instead, they help organize programs, providing repositories for shared methods and defining locations in the type lattice. In return for restricted usage, such abstract objects are not required to have their fields fully initialized nor their signatures fully implemented. Abstract objects need not have all their signatures fully implemented nor their fields initialized. Because an abstract object may be incomplete, it cannot be used directly at run-time, nor can it appear as a parent in an object constructor declaration.
Abstract objects are similar to abstract classes in class-based languages.
Because new method implementations cannot be specified for anonymous objects, all the signatures specified as part of the type of a template object are required to be fully implemented. For example, the cons object is required to fully implement all list operations, including do . However, because template objects will not be sent messages at run-time, they are not required to have their fields initialized. The cons object is not required to have its head and tail fields initialized. Template objects are analogous to concrete classes in class-based languages.