exn型,exception宣言

Not_found とか Division_by_zero とかいう例外は,じつは exn型のコンストラクタ。例外コンストラクタと呼ぶ。
コンストラクタの型を見ると

 # Division_by_zero;;
 - : exn = Division_by_zero

exn型であることがわかる。同様に raise の型も。

 # raise;;
 - : exn -> 'a = <fun>


exn型には後からコンストラクタを追加することができる。これが新しい例外を宣言することに相当し,exception宣言を使う。

 # exception Other_exception;;
 exception Other_exception
 # Other_exception;;
 - : exn = Other_exception

引数をとる例外の場合は of に続けて引数の型をかけばいい。

 # exception Another_exception of string;;
 exception Another_exception of string
 # Another_exception "some error";;
 - : exn = Another_exception "some error"