OCamlでexn型の値からスタックトレースを取得する方法はありますでしょうか?JavaのgetStackTrace()のような。

標準のPrintexcモジュールを探したのですが、現在のスタックトレースを取得する Printexc.get_backtrace はあるものの、例外からこしらえる方法が分かりませんでした。

参考: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Printexc.html

例えば次のようなプログラムで、work関数が失敗したときのスタックトレースを処理したいことなどがあります。

open Batteries

let work () = ...

let _ =
  match wrap work () with
  | Ok result -> print_endline result
  | Bad e ->
     (* ここでスタックトレースも出力したい *)
     prerr_endline (Printexc.to_string e);
     exit 1

コマンドラインのシステムなら単純にraiseで例外を投げてしまうのもアリかもしれませんが、ログファイルに保存したり、DBに保存したりしたいこともあると思うのです。