obj GenericDB = GenericRecord*; obj GenericRecord = key:GenericKey ops: FindRecord(GenericDB,GenericKey)->(GenericRecord); description: (* Specifying FindRecord explicitly here avoids the typical inheritance problem of type mismatch in the coarity of selectors. This is the case due to the copy-and-substitute semantics of inheritance for operations. *); end; obj GenericKey ops: DelRecord(GenericDB,GenericKey)->(GenericDB); DelRecord(GenericDB,GenericKey)->(GenericDB); FindRecord(GenericDB,GenericKey)->(GenericRecord); end; op AddRecord(gdb:GenericDB, gr:GenericRecord)->(gdb':GenericDB);