プログラミング言語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)