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>>