Library
Module
Module type
Parameter
Class
Class type
A monoid, defined by a default element and an associative operation
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.
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 *
I don't know where to put these, but they are useful, especially for UI-related computations.