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

24.3 シグネチャ式 : sigexp

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

sigexp ::= sig spec end
 | sigid
 | sigexp where type tyvarSeq longTycon = ty
  • 基本シグネチャ式 (sig spec end)

    宣言仕様specの列である.

  • シグネチャ名 (sigid)

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

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

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

宣言仕様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

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