プログラミング言語SML#解説

Chapter 20. 標準ライブラリ

SML#は,Standard ML Basis Library []の一部を 含むストラクチャ群を標準のライブラリとして提供している. 本章では,SML#標準ライブラリに含まれるストラクチャの使い方と その意味を与える.

本章で用いる型定義や関数のシグネチャの表記は,SML#のインター フェースファイルの記法に準じる. 例えば,

type slice (= boxed)

は,実行時表現がboxedで同値比較を認めないslice型の定義である. 同値比較を認める型の定義ではtypeの代わりにeqtypeと書く. 多相型は,SML#の対話モードが出力するように, 束縛型変数を明示した記法で表記する. 例えば,

val length : ['a. 'a array -> int]

は,任意の型'aについて'a array -> intなる型を持つ関数 lengthのシグネチャを表す. 第一級オーバーロードされた関数の型は

val / : ['a::{real, Real32.real}. 'a * 'a -> 'a]

のように,束縛型変数'aの後に注釈::{}を付けて, 'aのインスタンスになり得る型の集合を明示する. この例は,real型およびReal32.real型に対して 第一級オーバーロードされた関数/のシグネチャを表している.

本節では,ライブラリを構成する各ストラクチャごとにそれぞれ 節を分け,各節の内容にはそのストラクチャが導入する要素を型,例外, 定数および関数に分類して,それらの定義あるいはシグネチャとその説明を 書いている. ネストして定義されているストラクチャも,それぞれ個別に定義されて いるものとし,節を分けて説明している. 各節内の例外,定数および関数のシグネチャには, そのストラクチャが導入する型,およびトップレベルあるいは他のストラクチャで 定義されている型を用いる. 他のストラクチャで定義されている型を参照する場合は,トップレベルから そのストラクチャへのパスを書いている. 例えば, IntInfストラクチャの説明では,型として

eqtype int (= boxed)

と書かれている. これ以降,IntInfストラクチャを説明する節に現れる int型は,トップレベルのintではなくこのint, すなわちトップレベルから見てIntInf.intとなる型を指す. 従って,

val toInt : int -> Int.int

IntInf.int型からInt.int型への関数を表す.

Contents