package travesty
Install
dune-project
Dependency
Authors
Maintainers
Sources
sha256=6096bfedbab2044c6372c918712bc5e71ffba5a373cdab37398787712c9c83af
sha512=a7a1cd7981af2c16111323cdf72ac6a45a5e58a3701376fdb3d7f3ee15fbf4003e71f94ad882ccea0d308bb229f3ac0b2c9861a231a498c22e44551f1fcf802d
doc/travesty.base_exts/Travesty_base_exts/Or_error/index.html
Module Travesty_base_exts.Or_errorSource
Or-error monad extensions.
This module contains various extensions for Base's Or_error monad, including monadic traversal over successful values and monad extensions.
Defined to let this module be used directly in chaining operations etc.
Travesty signatures
On_ok treats an Or_error value as a traversable container, containing one value when it is Ok and none otherwise.
Monad extensions for Or_error.
include Travesty.Monad_exts.S with type 'a t := 'a t
Haskell-style operators
then_m x y sequentially composes the actions x and y as with >>=, but, rather than using the returned value of x, it instead just returns y.
compose_m f g is the Kleisli composition of f and g.
Guarded monadic computations
map_when_m ?otherwise condition ~f a is f a when condition is true, and otherwise a (by default, return) otherwise.
when_m ?otherwise condition ~f is f () when condition is true, and otherwise () (by default, return) otherwise.
map_unless_m ?otherwise condition ~f a is f a when condition is false, and otherwise a (by default, return) otherwise.
unless_m ?otherwise condition ~f is f () when condition is false, and otherwise () (by default, return) otherwise.
Executing monadic effects in the middle of pipelines
tee_m val ~f executes f val for its monadic action, then returns val.
Example (using an extended Or_error):
let fail_if_negative x =
On_error.when_m (Int.is_negative x)
~f:(fun () -> Or_error.error_string "value is negative!")
in
Or_error.(
42 |> tee_m ~f:fail_if_negative >>| (fun x -> x * x)
) (* Ok (1764) *)tee val ~f behaves as tee, but takes a non-monadic f.
Example (using an extended Or_error):
let print_if_negative x =
if Int.negative x then Stdio.print_string "value is negative!"
in
Or_error.(
try_get_value ()
>>= tee ~f:print_if_negative
>>= try_use_value ()
)Or_error is a bi-mappable type, with the right type fixed to Error.t. (This is backwards from Haskell conventions, but matches the position Error.t takes in Result in Base.
include Travesty.Bi_mappable.S1_left
with type 'l t := 'l t
and type right = Base.Error.t
include Travesty.Types_intf.Bi_left
with type 'l t := 'l t
with type right = Base.Error.t
Fixed type of right elements.
Shortcuts for combining errors
These functions are just shorthand for mapping over a list, then using the various combine_errors functions in Base.
Prefer using these, where possible, over the analogous functions in T_list.With_errors; these ones correctly merge errors.
combine_map xs ~f is short for map xs ~f followed by combine_errors.