Read-only export is introduced for record fields using '-' mark - in the same way as it is done in Component Pascal. The major reason for this extension is to maintain data integrity without obligation to write down corresponfing procedures-accessors. I.e. instead of hiding (not exporting) record field and giving procedure-accessor (exported) for reading field value it is possble to just mark a field as exported for reading only.
identdef = ident ["*" | "-"].
Example:
MODULE m1;
TYPE
T* = RECORD
i-: INTEGER
END;
TP* = POINTER TO T;
PROCEDURE make*(): TP;
VAR result: TP;
BEGIN
NEW(result);
result.i := 123; (* field 'T.i' can be modified in this module *)
RETURN result
END make;
END m1.
MODULE m2;
IMPORT m1;
VAR p: m1.TP;
BEGIN
p := m1.make();
ASSERT(p.i = 123); (* field 'T.i' can be accessed in this module *)
p.i := 321; (* compiller error, 'T.i' cannot be modified in this module *)
END m2.