INTERFACEA Value.T is a representation for a Modula-3 value; it is intended to be used in conjunction with the typed Abstract Syntax Tree interface, TypedAST. A Value.T only contains enough information to determine the value if you already know the value's type; therefore Value.T's should generally be paired with Type.T's.Value ;
For good measue, this interface also defines types to represent procedures and exceptions.
TYPE
  T <: ROOT;
  (* Integer | Longint | Float | LongFloat | Extended | Array | Set | Record |
     Text | Null *)
    Integer = T OBJECT val: INTEGER END;
    Longint = T OBJECT val: LONGINT END;
    Float = T OBJECT val: REAL END;
    LongFloat = T OBJECT val: LONGREAL END;
    Extended  = T OBJECT val: EXTENDED END;
    Array = T OBJECT elements: REF ARRAY OF T END;
    Set = T OBJECT elements: REF ARRAY OF BOOLEAN END;
    Record = T OBJECT elements: REF ARRAY OF T END;
    (* The field values in the order the fields are declared. *)
    Txt = T OBJECT val: TEXT END;
    Null = T OBJECT END;
    (* The value NIL. *)
END Value.