interface ( Cursor-Type [Meta-Type ( instance « ( attributes « ( Item-type Type, host Object ), instance « ( receives « ( ready? (replies Boolean), at-item? (replies Boolean), get-item ( requires « ([instance ← at-item?] else-throws no-item replies Item-type ) ) ) ) )], [Cursor (Item-type Type)] Cursor-Type, [Forward-Cursor (Item-type Type)] [Cursor-Type ( supertypes « (Cursor (Item-type « Item-type)), instance « ( receives « ( at-end? (replies Boolean), move-to-next ( requires « ([¬[instance ← at-end?]] else-throws at-end ) ) ) )], [Two-Way-Cursor (Item-type Type)] [Cursor-Type ( supertypes « (Forward-Cursor (Item-type « Item-type)), instance « ( receives « ( at-beginning? (replies Boolean), move-to-previous ( requires « ([¬[instance ← at-beginning?]] else-throws at-beginning ) ) ) )], ) /* These are all abstract types. Cursor classes are implemented with the classes they are attached to. */