An async IO list is like a lazy list but instead of being unevaluated Thunks,
delayed suffixes are Tasks being evaluated asynchronously. A delayed suffix can signal the end
of computation (successful or due to a failure) with a terminating value of type ε.
- cons: {ε : Type u} → {α : Type v} → α → IO.AsyncList ε α → IO.AsyncList ε α
- delayed: {ε : Type u} → {α : Type v} → Task (Except ε (IO.AsyncList ε α)) → IO.AsyncList ε α
- nil: {ε : Type u} → {α : Type v} → IO.AsyncList ε α
Instances For
Equations
- IO.AsyncList.instInhabited = { default := IO.AsyncList.nil }
Equations
- IO.AsyncList.instAppend = { append := IO.AsyncList.append }
Equations
- IO.AsyncList.ofList = List.foldr IO.AsyncList.cons IO.AsyncList.nil
Instances For
Equations
- IO.AsyncList.instCoeList = { coe := IO.AsyncList.ofList }
A stateful step computation f is applied iteratively, forming an async
stream. The stream ends once f returns none for the first time.
For cooperatively cancelling an ongoing computation, we recommend referencing
a cancellation token in f and checking it when appropriate.
Equations
- IO.AsyncList.unfoldAsync f init = do let tInit ← (IO.AsyncList.unfoldAsync.step f init).asTask pure (IO.AsyncList.delayed tInit)
Instances For
The computed, synchronous list. If an async tail was present, returns also its terminating value.
Spawns a Task waiting on all elements.
Equations
- IO.AsyncList.waitAll = IO.AsyncList.waitUntil fun (x : α) => false
Instances For
Spawns a Task acting like List.find? but which will wait for tail evaluation
when necessary to traverse the list. If the tail terminates before a matching element
is found, the task throws the terminating value.
Retrieve the already-computed prefix of the list. If computation has finished with an error, return it as well.
Equations
- as.waitHead? = IO.AsyncList.waitFind? (fun (x : α) => true) as
Instances For
Cancels all tasks in the list.