Невозможно переместить ввод-вывод в другой пул потоков - PullRequest
0 голосов
/ 11 сентября 2018

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

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 Ответ

0 голосов
/ 11 сентября 2018

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

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"
...