package yocaml

  1. Overview
  2. Docs

Binding operators are used to link fields together to build a complete validation.

A typical usage is:

record (fun assoc ->
    let+ field_a = required assoc "fieldA" validator_a
    and+ field_b = optional assoc "fieldB" validator_b
    and+ field_c = required associ "fieldB" validator_c in
    { field_a, field_b, field_c })
val let+ : ('a, 'err) Stdlib.Result.t -> ('a -> 'b) -> ('b, 'err) Stdlib.Result.t

let+ x = v in k x is map (fun x -> k x) v.

val and+ : 'a validated_record -> 'b validated_record -> ('a * 'b) validated_record

let+ x = v and+ y = w in k x y is map2 (fun x y -> k x y) v w.

val let* : ('a, 'err) Stdlib.Result.t -> ('a -> ('b, 'err) Stdlib.Result.t) -> ('b, 'err) Stdlib.Result.t

let* r = f x in return r tries to produce a result Ok from the expression f x, if the expression returns Error _, the computation chain is interrupted.

Warning: the semantics of let* are significantly different from a succession of let+ ... and+ ... which allow errors to be collected in parallel (independently), whereas let* captures them sequentially. The composition of let* and let+ is tricky and let* should only be used to validate preconditions.

OCaml

Innovation. Community. Security.