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"