Rewrite the type-checking rules for expressions in Section 6.2 so they refer to nodes in a graph representation of type expressions. The rewritten rules should use data structures and operations supported by a language such as Pascal. Use structural equivalence of type expressions when: a) type expressions ate represented by trees, as in Fig. 6.2, and b) the type graph is a dag with a unique node for each type expression.