type 'a monoid = 'a * ('a -> 'a -> 'a)
A monoid, defined by a default element and an associative operation
List reduction functions
All reductions are balanced, relying on operator associativity.
fold_left
would compute a chain like: fold f [a; b; c; d] = f a (f b (f c d)
reduce
uses tree-shaped computations like: reduce f [a; b; c; d] = f (f a b) (f c d)
The depth of the computation grows in O(log n) where n is the length of the input sequence.
Reduce a list of elements in Lwd
monad
Reduce an (OCaml) Seq.t
with a monoid
val reduce : 'a monoid -> 'a list -> 'a
Reduce a list with a monoid *
val map_reduce : ('a -> 'b) -> 'b monoid -> 'a list -> 'b
Map and reduce a list with a monoid *
Other Lwd list functions
val map_l : ('a -> 'b Lwd.t) -> 'a list -> 'b list Lwd.t