pub fn run<S: Splitter<WorkItem = In>, E: Executor<S::WorkItem, Out>, M: Merger<In, Out>, Out: IntoTaskDef + FromTaskDef, In: IntoTaskDef + FromTaskDef>(
    splitter: S,
    executor: E,
    merger: M
) -> Result<(), Box<dyn StdErr>>