Ваш для понимания предназначен для IO
, но вы смешиваете его с List
.Чтобы сделать это немного понятнее, мы можем расширить для понимания, которое не будет компилироваться по той же причине, по которой вы не можете сгладить List
в IO
:
readInts(10).flatMap(list => list.flatMap(i => printLine(i + 1).map(_ => ExitCode.Success)))
Вместо этого попробуйтеthis:
for {
list <- readInts(10)
_ <- list.traverse(i => printLine(i + 1))
} yield ExitCode.Success
Обратите внимание, что по сути это то же самое, что:
for {
list <- readInts(10)
_ <- list.map(i => printLine(i + 1)).sequence
} yield ExitCode.Success
traverse
просто сжимает шаги map
и sequence
в один.В любом случае, теперь ваше понимание должно быть ограничено IO
.