# Module Std_kernel.Error

    module Error: Error

    include Info

    val raise : t -> 'a

Note that the exception raised by this function maintains a reference to the `t` passed in.

    val to_info : t -> Info.t

    val of_info : Info.t -> t

    val failwiths : ?strict:unit ->
           ?here:Lexing.position -> string -> 'a -> ('a -> Sexplib.Sexp.t) -> 'b

          failwiths ?strict ?here message a sexp_of_a
          = Error.raise (Error.create ?strict ?here s a sexp_of_a)

As with `Error.create`, `sexp_of_a a` is lazily computed, when the error is converted to a sexp. So, if `a` is mutated in the time between the call to `failwiths` and the sexp conversion, those mutations will be reflected in the error message. Use `~strict:()` to force `sexp_of_a a` to be computed immediately.

The `pa_fail` preprocessor replaces `failwiths` with `failwiths ?here:_here_` so that one does not need to (and cannot) supply `_here_`. `pa_fail` does not add `?here:_here_` to `Error.failwiths`.

In this signature we write `?here:Lexing.position` rather than `?here:Source_code_position.t` to avoid a circular dependency.

`failwithp here` is like `failwiths ~here`, except that you can provide a source position yourself (which is only interesting if you don't provide `_here_`).

    val failwithp : ?strict:unit ->
           Lexing.position -> string -> 'a -> ('a -> Sexplib.Sexp.t) -> 'b

`Error.t` is NOT wire-compatible with `Error.Stable.V1.t`. See info.mli for details.