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

24.2 ストラクチャ式とその評価 : ⟨strexp⟩

ストラクチャ式の構文は以下の通りである.

⟨strexp⟩ ::= struct ⟨strdec⟩ end
 | ⟨longStrid⟩
 | ⟨strexp⟩ :⟨sigexp⟩
 | ⟨strexp⟩ :>⟨sigexp⟩
 | ⟨funid⟩ (⟨strid⟩ :⟨sigexp⟩)
 | ⟨funid⟩ (⟨strdec⟩ )
⟨strdec⟩ ::= ⟨decl⟩ 核言語の宣言
 | structure ⟨strbind⟩
 | local ⟨strdec⟩ in ⟨strdec⟩ end
 | ⟨strdec⟩ (;)? ⟨strdec⟩

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

  • •

    基本ストラクチャ式 : struct ⟨strdec⟩ end.

    基本ストラクチャ式の評価は,宣言⟨strdec⟩を順次評価することよって行われる. その結果は,核言語の宣言に対しては,第 23章での定義にしたがい,変数や型構成子等 の名前の束縛が生成される. ストラクチャ宣言に対しては,上記の評価規則に従い,ストラクチャ名からなるロング名の束縛が 生成される.

  • •

    ロングストラクチャ名 : ⟨longStrId⟩.

    現在の環境において,⟨longStrId⟩が束縛されている型環境と 実行時環境が返される. 現在の束縛の集合の中で⟨longStrId⟩プリフィックをもつロング名 の束縛から,⟨longStrId⟩プリフィックを取り除いてえられる束縛の集 合と同一である.

  • •

    シグネチャ制約付きストラクチャ式. (⟨strexp⟩ :⟨sigexp⟩, ⟨strexp⟩ :>⟨sigexp⟩)

    シグネチャ制約付きストラクチャ式の評価は以下のように行われる.

    1. 1.

      ストラクチャ式を評価し,静的な型環境Γを求める.

    2. 2.

      次項(24.3)の定義に従いシグネチャ 式を評価し,ロング名の静的な値の制約の集合Σを求める.

    3. 3.

      Σに含まれる各ロング名の静的制約に対しして,Γにロング 名束縛が存在し,かつそのその静的値が制約を満たすことをチェックする.

    4. 4.

      ΓをΣで指定されたロング名に制約しや型環境Γ′を生成する.

    5. 5.

      もし⟨strexp⟩ :>⟨sigexp⟩の形の参照不透明な シグネチャ制約であれば,さらに,シグネチャの型指定⟨typdesc⟩に対 応するΓ′の型を,抽象型で置き換えて得られる型環境Γ′′を生成する.

    6. 6.

      実行時環境の生成は,動的な値の生成はシグネチャ制約がないストラク チャ式と同一であるが,生成される動的束縛はΓ′′に含まれる変数とコンス トラクタに限定される.