IMPLEMENTATION MODULE DString; (* Completes the opaque String here; clients see only the opaque type. *) TYPE String = POINTER TO RECORD v : INTEGER END; PROCEDURE Make(n : INTEGER) : String; VAR s : String; BEGIN NEW(s); s^.v := n; RETURN s END Make; PROCEDURE Get(s : String) : INTEGER; BEGIN RETURN s^.v END Get; PROCEDURE IsNil(s : String) : BOOLEAN; BEGIN RETURN s = NIL END IsNil; END DString.