`exception` `InferExternalError of string`
`exception` `InferInternalError of string`
`exception` `InferUserError of string`
`exception` `InferExit of int`

This can be used to avoid scattering exit invocations all over the codebase

`type error````=`

`|` `ExternalError`
`|` `InternalError`
`|` `UserError`

``

kind of error for `die`, with similar semantics as `Logging.{external,internal,user}_error`

`val exit : int ‑> 'a`
`val exit_code_of_exception : InferStdlib.IStd.Exn.t ‑> int`
`val set_log_uncaught_exception_callback : (exn ‑> exitcode:int ‑> unit) ‑> unit`
`val log_uncaught_exception : exn ‑> exitcode:int ‑> unit`
`val die : error ‑> ('a, Format.formatter, unit, _) InferStdlib.IStd.format4 ‑> 'a`

Raise the corresponding exception.

`val raise_error : error ‑> msg:string ‑> 'a`
`type style````=`

`|` `Error`
`|` `Fatal`
`|` `Normal`
`|` `Warning`

``
`val term_styles_of_style : style ‑> InferStdlib.IStd.ANSITerminal.style list`