Rescript Async Iterators type t<'a> = { next: unit => Promise.t<option<'a>> } Example open AsyncIterator interval(1000) ->map(i => i + 1) ->flatMap(i => interval(100)->take(i)) ->take(100) ->forEach(i => console.log(i)->Promise.resolve )