OCaml で関数 f を実行した後に、これが成功した場合はその結果を別の関数 g に渡し、例外を送出した場合はそれを捕捉した上でさらに別の関数 h に渡したい、というような状況があります。
教科書的には、例外の捕捉は try ... with を使って行いますが、このようなケースでは少々不便です:
(* try ... with を使う場合、
結果をラップする必要がある *)
let x =
try Some (f ())
with _ -> None
in
match x with
| Some x -> g x
| None -> h ()
こんなときには match ... with の腕に exception を書く構文を使うと便利です[1]。
match f () with
| x -> g x
| exception _ -> h ()
注釈
-
回りくどい言い方をしていますが、この構文の正式名称がよく分かっていません。 ↩