Согласно подсказкам @ KrzysztofAtłasik и @ LuisMiguelMejíaSuárez, вот решение, которое я только что придумал:
val originalStream = fs2.Stream.emits(List(1, 2))
val scheduledComputation = originalStream.covary[IO].map({ id =>
fs2.Stream.awakeEvery[IO](1.second).evalMap(_ => IO.delay(println(id)))
}).fold(fs2.Stream.empty.covaryAll[IO, Unit])((result, stream) => result.merge(stream)).flatten
Решение, которое @ KrzysztofAtłasik предложил в комментарии с чередованием id <- fs2.Stream.emits(List(1, 2)).covary[IO]
и _ <- fs2.Stream.awakeEvery[IO](1.second)
также работает, но не позволяет планировать каждый элемент по-своему.
Чтобы запланировать элементы одновременно на elementValue
секунд, можно сделать следующее:
val scheduleEachElementIndividually = originalStream.covary[IO].map({ id =>
//id.seconds
fs2.Stream.awakeEvery[IO](id.second).evalMap(_ => IO.delay(println(id)))
}).fold(fs2.Stream.empty.covaryAll[IO, Unit])((result, stream) => result.merge(stream)).flatten