ATS におけるデータ型の機能は ML の影響を強く受けています。
データ型はタグ付きの共用体に似ています。 それぞれのデータ型には関連するコンストラクタがあり、 それらのコンストラクタはデータ型の値をコンストラクトしなければなりません。 例として次の構文は intopt という名前のデータ型を宣言しています:
intopt に関連した2つのコンストラクタが存在します: 引数のない intopt_none と1引数の intopt_some です。 例えば intopt_none() と intopt_some(1) は両方とも intopt 型の値です。 そのような値の中の要素にアクセスするために、パターンマッチと呼ばれる仕組みを ATS では提供しています。 データ型とパターンマッチの組み合わせが、 プログラミングにおいて大変便利であるだけでなくコードを明快にもしてくれることを、 例を通して説明しようと思います。この章で示すコードとテストのための追加コードは オンライン から入手できます。
ATS におけるパターンは次のように帰納的に定義されています:
整数, ブール値, 文字, 浮動小数点数, 文字列のような定数の値はパターンです。
void 値はパターンです。
アンダースコア記号 _ は特別なワイルドカードパターンを意味しています。
変数はパターンです。
ボックス化もしくはアンボックス化されたパターンのタプルはパターンです。
ボックス化もしくはアンボックス化されたパターンのレコードはパターンです。
コンストラクタ C が与えられた時、与えられたパターンのリストに C を適用してパターンを作ることができます。
変数 x とパターン pat が与えられたとき、 (x as pat) は参照パターンです。 ここで as はキーワードです。
その他のパターンの種類は別の章で解説します。