7.6 Structural Matching (original) (raw)
7.6 Structural Matching🔗ℹ
(unit/new-import-export (import tagged-sig-spec ...) (export tagged-sig-spec ...) init-depends-decl ((tagged-sig-spec ...) unit-expr tagged-sig-spec))
Similar to unit, except the body of the unit is determined by an existing unit produced by unit-expr. The result is a unit whose implementation is unit-expr, but whose imports, exports, and initialization dependencies are as in theunit/new-import-export form (instead of as in the unit produced by unit-expr).
The final clause of the unit/new-import-export form determines the connection between the old and new imports and exports. The connection is similar to the way that compound-unitpropagates imports and exports; the difference is that the connection between import and the right-hand side of the link clause is based on the names of elements in signatures, rather than the names of the signatures. That is, a tagged-sig-spec on the right-hand side of the link clause need not appear as a tagged-sig-specin the import clause, but each of the bindings implied by the linking tagged-sig-spec must be implied by sometagged-sig-spec in the import clause. Similarly, each of the bindings implied by an export tagged-sig-spec must be implied by some left-hand-sidetagged-sig-spec in the linking clause.
(define-unit/new-import-export unit-id (import tagged-sig-spec ...) (export tagged-sig-spec ...) init-depends-decl ((tagged-sig-spec ...) unit-expr tagged-sig-spec))
Like unit/new-import-export, but binds static information tounit-id like define-unit.
(unit/s (import tagged-sig-spec ...) (export tagged-sig-spec ...) init-depends-decl unit-id)
Like unit/new-import-export, but the linking clause is inferred, so unit-id must have the appropriate static information.
(define-unit/s name-id (import tagged-sig-spec ...) (export tagged-sig-spec ...) init-depends-decl unit-id)
Like unit/s, but binds static information to name-idlike define-unit.