Я читаю этот урок по эффектам кошек

https://typelevel.org/blog/2017/05/02/io-monad-for-cats.html

На основе этого руководства я написал этот код

import scala.concurrent.ExecutionContext
import java.util.concurrent.Executors
import cats.effect.IO

val Main = ExecutionContext.global
val BlockingIO = ExecutionContext.fromExecutor(Executors.newCachedThreadPool())

val program = for {
_ <- IO { println("what is your name") }
name <- IO { readLine() }.shift(BlockingIO).shift(Main)
} yield s"Hello $name"
val output = program.unsafeRunSync
println(output)

Я получаю ошибку value shift is not a member of cats.effect.IO[String]

Как в учебнике можно изменить результат функции readLines

lines <- readLines("names.txt").shift(BlockingFileIO).shift(Main)

Моя главная проблема с этим образцом заключается в том, что блокировка readLine происходит в моем пуле BlockingIO.

1
Knows Not Much 11 Сен 2018 в 20:15

1 ответ

Лучший ответ

ОК. Я сам нашел ответ. Я думаю, что этот урок немного устарел

https://typelevel.org/cats-effect/datatypes/io.html

val program = for {
  _ <- IO { println("what is your name") }
  _ <- IO.shift(BlockingIO)
  name <- IO { readLine }
  _ <- IO.shift(Main)
} yield s"Hello $name"
1
Knows Not Much 11 Сен 2018 в 17:50