/- Copyright (c) 2025 Lean FRO. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Sebastian Ullrich Additional `Task` definitions. -/ module prelude public import Init.System.Promise public section namespace Task /-- Creates a task that, when all `tasks` have finished, computes the result of `f` applied to their results. -/ def mapList (f : List α → β) (tasks : List (Task α)) (prio := Task.Priority.default) (sync := false) : Task β := go tasks [] where go | [], as => if sync then .pure <| f as.reverse else Task.spawn (prio := prio) fun _ => f as.reverse | [t], as => t.map (fun a => f (a :: as).reverse) prio sync | t::ts, as => t.bind (fun a => go ts (a :: as)) prio sync