Module Trace_stat_summary_utils.Parallel_foldersSource
See Trace_stat_summary for an explanation and an example.
Heavily inspired by the "repr" library.
Type parameters:
'res is the output of finalise.'f is the full contructor that creates a 'res.'v is the output of folder.finalise, one parameter of 'f.'rest is 'f or 'res or somewhere in between.'acc is the accumulator of one folder.'row is what needs to be fed to all folder.accumulate.
Typical use case:
let pf =
open_ (fun res_a res_b -> my_constructor res_a res_b)
|+ folder my_acc_a my_accumulate_a my_finalise_a
|+ folder my_acc_b my_accumulate_b my_finalise_b
|> seal
in
let res = my_row_sequence |> Seq.fold_left accumulate pf |> finalise in
Section 1/3 - Individual folders
Sourcetype ('row, 'acc, 'v) folder Sourceval folder :
'acc ->
('acc -> 'row -> 'acc) ->
('acc -> 'v) ->
('row, 'acc, 'v) folder Create one folder to be passed to an open parallel folder using |+.
Section 2/3 - Open parallel folder
Sourcetype ('res, 'row, 'v) folders Sourcetype ('res, 'row, 'f, 'rest) open_t Start building a parallel folder.
Add a folder to an open parallel folder.
Section 3/3 - Closed parallel folder
Stop building a parallel folder.
Gotcha: It may seal a partially applied f.
Sourceval accumulate : ('res, 'row) t -> 'row -> ('res, 'row) t Forward a row to all registered functional folders.
Sourceval finalise : ('res, 'row) t -> 'res Finalise all folders and pass their result to the user-defined function provided to open_.