データ観 VOR は次のように宣言されています:
dataview VOR (v0:view+, v1:view+, int) = | VORleft (v0, v1, 0) of (v0) | VORright (v0, v1, 1) of (v1)
なんらかの型 T を考えます。次の関数インターフェイスは getopt が未初期化のポインタを取り、ポインタが初期化されたかどうかを示す整数を返すことを表わしています:
次のコードは getopt の典型的な使用例を示しています:fun foo (): void = let var x: T? val (pfor | i) = getopt (view@(x) | addr@(x)) in // if i = 0 then let prval VORleft (pf0) = pfor in view@(x) := pf0 // uninitialized end // end of [then] else let prval VORright (pf1) = pfor in view@(x) := pf1 // initialized end // end of [else] // end of [if] // end // end of [foo]
ATS には、型 T とブール B を取り、opt 型 opt(T, B) を作るような型コンストラクタ opt があります。 このとき B が true ならば opt(T, B) は T に等しく、B が false ならそれは T? に等しくなります。 関数 getopt には次のような opt 型を使ったインターフェイスを与えることができます:
これで getopt 呼び出しコードは次のように実装できます: このとき、証明関数 opt_unsome と opt_unnone には次の型が割り当てられています: VOR を使うバージョンと比較して、 opt 型を用いたこのバージョンはかなりすっきりしています。