プログラミング言語SML#解説 3.7.1版
24 モジュール言語の宣言とインタフェイス

24.1 ストラクチャ宣言 : strDecl

ストラクチャ宣言は,ストラクチャ名stridを,ストラクチャ 式strexp表すストラクチャに束縛する形の宣言である.

strDecl :=  structure strbind
strbind ::= strid = strexp (and strbind)?
 | strid : sigexp = strexp (and strbind)?
 | strid :> sigexp = strexp (and strbind)?

andで繋がれた複数のストラクチャ名は,同時に束縛される. それら名前のスコープは,この宣言に続く部分である. 従って,以下の宣言では,y2ではなく1に束縛される.

structure A = struct val a = 1 end;
structure B = struct val b = 1 end;
structure A = struct val a = 2 end and B = struct val b = A.a end;
val x = A.a;
val y = B.b;

シグネチャ制約付きのストラクチャ名束縛は,以下のシグネチャ制約付 きのストラクチャ式への束縛へと変換される.

変換前 変換後
strid : sigexp = strexp strid = strexp: sigexp
strid :> sigexp = strexp strid = strexp:> sigexp

ストラクチャ宣言の評価は以下のように行われる.

  1. 1.

    次節の定義に従い,ストラクチャ式を評価して静的型環境Γと実行 時環境Eを求める.

  2. 2.

    静的環境Γと動的Eで束縛されたロング名をストラクチャ名Sで プレフィックスした環境ΓEを求め現在の環境に追加する.

例えばストラクチャ宣言structure strid = strexpにおいて, ストラクチャ式strexpが生成する型環 境と実行時環境が{longId1:τ1,...,longidn:τn}および {longId1:v1,...,longidn:vn} であれば,このストラクチャ宣言の効果は,現在の静的型環境および実行時環境に, {S.longId1:τ1,...,S.longidn:τn}および {S.longId1:v1,...,S.longidn:vn} のロング名束縛が追加される.