# Module type Syscall_result_intf.S

    module type S = sig .. end

    type ok_value

    type 'a syscall_result

    type t = ok_value syscall_result

    val create_ok : ok_value -> t

    val create_error : Unix_error.t -> t

    val is_ok : t -> bool

    val is_error : t -> bool

    val to_result : t ->
           (ok_value, Unix_error.t) Core_kernel.Std.Result.t

This returns a preallocated object for all errors and at least a few `ok_value`s, so can be used in many contexts where avoiding allocation is important.

    val ok_exn : t -> ok_value

    val error_exn : t -> Unix_error.t

    val reinterpret_error_exn : t -> 'a syscall_result

This is more efficient than calling `error_exn` and then the `create_error` of the destination type.

    val ok_or_unix_error_exn : t ->
           syscall_name:string -> ok_value

    val ok_or_unix_error_with_args_exn : t ->
           syscall_name:string ->
           'a -> ('a -> Core_kernel.Std.Sexp.t) -> ok_value

    val sexp_of_t : t -> Sexplib.Sexp.t

    val compare : t -> t -> int

This returns a preallocated object for all errors and at least a few `ok_value`s, so can be used in many contexts where avoiding allocation is important.
This is more efficient than calling `error_exn` and then the `create_error` of the destination type.