package tezos-lwt-result-stdlib
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=296bb5674bc6050afe6330326fbdd0dfc2255d414bfd6b79cc7666ac6b39316d
sha512=c061cd300a9410300851158d77bf8e56ca3c568b0b1161b38305e5b2efdcd9c746d391f832fdb2826f9a1d6babce10a9b764a4b04f5df42699f7314b9863123a
Description
Published: 11 Apr 2022
README
Lwtreslib: an Lwt- and Result-friendly addition/replacement for the Stdlib
The OCaml's Stdlib modules are orthogonal: each define their own datatype and a set of functions operating on this datatype. Result
for result
, Option
for option
, List
for list
, etc. This orthogonality provides a high expressive power for a low lines-of-code count. E.g.,
let fold f init xs =
List.fold_left
(fun acc x -> Result.bind acc (fun acc -> f acc x))
(Result.ok init)
xs
However, in code-bases that make heavy uses of some datatypes, a little more integration is welcome. For example, in code bases that use the result
type pervasively, the fold
function above should be available in a module of list-traversing functions.
Lwtreslib is a library that supplement some of the OCaml's Stdlib modules with a tight integration of Lwt and Result. It focuses on data-structures that can be traversed (iterated, mapped, folded, what have you).
Design principles
Exception-safety
The functions exported by Lwtreslib do not raise exceptions. These functions may return
option
orresult
to indicate that some error happened during traversal, and they may propagateresult
.(For convenience, the module
WithExceptions
provides a few exception-raising functions because they are convenient in specific contexts.)Consistency
Exported functions and values have consistent names that reflect their consistent semantic.
Reading guide
The sources of Lwtreslib are organised as follow:
bare/
contains the sources for a bare-bones implementation of Lwtreslib that provides monadic combinators and collection traversals.bare/sigs/
contains the sources for the signatures of all the modules exported bybare/
bare/functor_outputs
contains the sources for the signatures of all the modules constructed by functors exported bybare/
bare/structs
contains the sources for of all the modules exported bybare/
examples/traces/
contains multiple example implementation of traces. A trace is a data-structure that holds multiple errors organised in a way that reflects the way the errors happened. Specifically, errors can be stringed together to represent that the control flow traversed multiple points, or they can be held side-by-side to indicate that they happen in to simultaneously evaluating promises.The code in this directory is meant more as examples than fully-fledged traces, but they can also be used for prototyping or as a basis for a more complete trace implementation.
traced/
contains the sources for a trace-enabled implementation of Lwtreslib that provides monadic combinators and collection traversals. This implementation provides all the functionality ofbare/
with added support for traces (i.e., structured collections of errors).traced/sigs/
contains the sources for the signatures of all the modules exported bytraced/
traced/functor_outputs
contains the sources for the signatures of all the modules constructed by functors exported bybare/
traced/structs
contains the sources for of all the modules exported bybare/
. These modules are functorised over the implementation of a trace. The filetraced/structs/structs.ml
contains an all-in-one functor for instantiating all of the modules.
test/
contains code to test the library.
Dev Dependencies (2)
-
tezos-test-helpers
with-test & = version
-
alcotest-lwt
with-test & >= "1.5.0"
Used by (1)
-
tezos-error-monad
= "12.3"
Conflicts
None