プログラミング言語SML#解説 3.7.1版
23 核言語の宣言とインターフェイス

23.4 type宣言 : ⟨typDecl⟩

type宣言は,以下の文法で型に名をつける宣言である.

⟨typeDecl⟩ := type ⟨typbind⟩
⟨tybind⟩ ::= ⟨tyvarSeq⟩ ⟨tycon⟩ = ⟨ty⟩ (and ⟨tybind⟩)?

23.4.1 type仕様 : ⟨typSpec⟩

type宣言のインタフェイスは,type仕様と抽象型仕様がある. type仕様の構文はtype宣言と同一である. 抽象型仕様の構文は以下の通りである.

⟨opequeTypeSpec⟩ := type (⟨tyvarSeq⟩)? ⟨tycon⟩ ( = ⟨runtimeTypeSpec⟩ )
⟨runtimeTypeSpec⟩ := ⟨tycon⟩  | {}  | *  | ->

型がレコード型,組型,関数型で実装されているならば, ⟨runtimeTypeSpec⟩にはそれぞれ{},*, ->を指定する. そうでなければ,型を実装する型コンストラクタを ⟨runtimeTypeSpec⟩に指定する. 実行時表現さえ合っているならば, ⟨runtimeTypeSpec⟩は実装型と厳密に一致しなくてもよい. 実行時表現について詳しくは29章を 参照せよ.

23.4.2 型宣言とインタフェイスの例

以下は,型宣言を含むソースファイルとインターフェイスの例である.

Data.sml file: type ’a set = ’a list
type ’a queue = ’a list * ’a list
type index = int
type id = int
Data.smi file: type ’a set (= list)
type ’a queue (= *)
type index = int
type id (= int)