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

24.3 シグネチャ式 : ⟨sigexp⟩

シグネチャ式の文法は以下の通りである.

⟨sigexp⟩ ::= sig ⟨spec⟩ end
 | ⟨sigid⟩
 | ⟨sigexp⟩ where type ⟨tyvarSeq⟩ ⟨longTycon⟩ = ⟨ty⟩
  • •

    基本シグネチャ式 (sig ⟨spec⟩ end)

    宣言仕様⟨spec⟩の列である.

  • •

    シグネチャ名 (⟨sigid⟩)

    トップレベルのシグネチャ宣言でシグネチャ式に束縛された名前である.

  • •

    型定義付きのシグネチャ名

    シグネチャ名⟨sigid⟩に束縛されたシグネチャ式の中の ⟨tyvarSeq⟩ ⟨longTycon⟩を⟨ty⟩で置き換えて得られる シグネチャ式を表す.

宣言仕様⟨spec⟩の構文は以下の通りである.

⟨spec⟩ ::= val ⟨valdesc⟩
 | type ⟨typdesc⟩
 | eqtype  ⟨typdesc⟩
 | datatype  ⟨datdesc⟩
 | datatype  ⟨tycon⟩  =  datatype  ⟨longTycon⟩
 | exception  ⟨exdesc⟩
 | structure  ⟨strdesc⟩
 | include  ⟨sigexp⟩
 | ⟨spec⟩  sharing type ⟨longTycon1⟩  =  ⋯ = ⟨longTyconn⟩
 | ⟨spec⟩  (;)?  ⟨spec⟩
 |
⟨valdesc⟩ ::= ⟨vid⟩  :  ⟨ty⟩  (and  ⟨valdesc⟩)?
⟨typdesc⟩ ::= ⟨tyvarSeq⟩  ⟨tycon⟩  (and  ⟨typdesc⟩)?
⟨datdesc⟩ ::= ⟨tyvarSeq⟩  ⟨tycon⟩  =  ⟨condesc⟩  (and  ⟨datdesc⟩)?
⟨condesc⟩ ::= ⟨vid⟩  (of  ⟨ty⟩)?  (|  ⟨condesc⟩)?
⟨exdesc⟩ ::= ⟨vid⟩  (of  ⟨ty⟩)?  (and  ⟨exdesc⟩)?
⟨strdesc⟩ ::= ⟨strid⟩  :  ⟨sigexp⟩  (and  ⟨strdesc⟩)?

それぞれの要素の意味は以下の通りである.

  • •

    val ⟨valdesc⟩. val宣言で束縛される変数の型を指定する.

  • •

    type ⟨typdesc⟩. 指定されたロング名をもつtype宣言またはdatatype宣言が存在すること の指定である.

    参照透明なシグネチャ指定の場合,この仕様は,ストラクチャの type宣言で定義される型関数をそのまま有効にする. datatype宣言の場合,ストラクチャの型構成子が有効になるが,データ構成子 は束縛されない.

    参照不透明なシグネチャ指定の場合,この仕様は,宣言で定義される の型関数の内部構造およびdatatypeで生成された型構成子の同一性を隠蔽し, 抽象型構成子として使用可能とする.

  • •

    eqtype  ⟨typdesc⟩

    type  ⟨typdesc⟩と同一であるが, ストラクチャで宣言される型が同値演算が可能な型に限定される.

  • •

    datatype  ⟨datdesc⟩

    同一のdatatype宣言が存在することの指定である. datatype宣言が有効になる.

  • •

    datatype  ⟨tycon⟩  =  datatype  ⟨longTycon⟩

    型構成子名⟨tycon⟩に束縛された型構成子が, ⟨longTycon⟩に束縛されたものと同一であることの指定.

  • •

    exception  ⟨exdesc⟩

    exception宣言が存在することの指定である. exception宣言が有効になる.

  • •

    structure  ⟨strdesc⟩

    ストラクチャが指定されたシグネチャ式を持つストラクチャを含むことの指定である.

  • •

    include

    指定されたシグネチャ名に束縛されたシグネチャ式の内容(⟨spec⟩の列) がこの位置に展開される.

  • •

    sharing type

    指定されたロング型構成子名がすべて同じ型構成子に束縛されていることの指定 である.