diff --git a/exn.ml b/exn.ml index 182a18d..5bc7be8 100644 --- a/exn.ml +++ b/exn.ml @@ -33,7 +33,13 @@ let to_string exn = let str = to_string let fail ?exn fmt = - let fails s = match exn with None -> failwith s | Some exn -> failwith (s ^ " : " ^ to_string exn) in + let fails s = + match exn with + | None -> failwith s + | Some original_exn -> + let exn = Failure (s ^ " : " ^ to_string original_exn) in + Printexc.raise_with_backtrace exn (Printexc.get_raw_backtrace ()) + in ksprintf fails fmt let invalid_arg fmt = ksprintf invalid_arg fmt