= MLtonExn

[source,sml]
----
signature MLTON_EXN =
   sig
      val addExnMessager: (exn -> string option) -> unit
      val history: exn -> string list

      val defaultTopLevelHandler: exn -> 'a
      val getTopLevelHandler: unit -> (exn -> unit)
      val setTopLevelHandler: (exn -> unit) -> unit
      val topLevelHandler: exn -> 'a
   end
----

* `addExnMessager f`
+
adds `f` as a pretty-printer to be used by `General.exnMessage` for
converting exceptions to strings.  Messagers are tried in order from
most recently added to least recently added.

* `history e`
+
returns call stack at the point that `e` was first raised.  Each
element of the list is a file position.  The elements are in reverse
chronological order, i.e. the function called last is at the front of
the list.
+
`history e` will return `[]` unless the program is compiled with
`-const 'Exn.keepHistory true'`.

* `defaultTopLevelHandler e`
+
function that behaves as the default top level handler; that is, print
out the unhandled exception message for `e` and exit.

* `getTopLevelHandler ()`
+
get the top level handler.

* `setTopLevelHandler f`
+
set the top level handler to the function `f`.  The function `f`
should not raise an exception or return normally.

* `topLevelHandler e`
+
behaves as if the top level handler received the exception `e`.
