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:
- 'resis the output of- finalise.
- 'fis the full contructor that creates a- 'res.
- 'vis the output of- folder.finalise, one parameter of- 'f.
- 'restis- 'for- 'resor somewhere in between.
- 'accis the accumulator of one folder.
- 'rowis 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_.