HashTables:
CEDAR
DEFINITIONS = {
OPEN Collections, PairCollections;
HashTable: TYPE ~ REF HashTablePrivate;
HashTablePrivate: TYPE;
Decider: TYPE ~ PROC [MaybeValue] RETURNS [MaybeValue];
Create: PROC [space: Space] RETURNS [HashTable];
Map: PROC [ht: HashTable, arg: Value] RETURNS [MaybeValue];
Store: PROC [ht: HashTable, arg, res: Value] RETURNS [same: HashTable];
Delete: PROC [ht: HashTable, arg: Value] RETURNS [had: BOOL];
Update: PROC [ht: HashTable, arg: Value, Decide: Decider] RETURNS [same: HashTable];
Size: PROC [ht: HashTable] RETURNS [INT];
Scan: PROC [ht: HashTable, Test: Tester] RETURNS [same: HashTable, mp: MaybePair];
}.