Validation.SyntaxSourceBinding 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 })let+ x = v in k x is map (fun x -> k x) v.
let+ x = v and+ y = w in k x y is map2 (fun x y -> k x y) v w.
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.