blog.anqou.net
rss
author
tags

match ... with の腕で例外を捕捉する

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 ()

注釈

  1. 回りくどい言い方をしていますが、この構文の正式名称がよく分かっていません。