UNSAFE MODULE; IMPORT Word, Int32; PROCEDURE RealType Equal (a, b: T): BOOLEAN = BEGIN RETURN a = b END Equal; CONST Int32Sz = BYTESIZE(T) DIV BYTESIZE(Int32.T); TYPE Int32Arr = ARRAY [0..Int32Sz-1] OF Int32.T; PROCEDUREHash (a: T): Word.T = VAR arr := LOOPHOLE(a, Int32Arr); res := 0; BEGIN FOR i := 0 TO LAST(arr) DO res := Word.Xor(res, Int32.Hash(arr[i])) END (* FOR *); RETURN res END Hash; PROCEDURECompare (a, b: T): [-1..1] = BEGIN IF a < b THEN RETURN -1 ELSIF a > b THEN RETURN 1 ELSE RETURN 0 END (* IF *) END Compare; BEGIN END RealType.