Я читаю этот урок по эффектам кошек
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 ответ
ОК. Я сам нашел ответ. Я думаю, что этот урок немного устарел
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"
Похожие вопросы
Новые вопросы
scala
Scala - это язык программирования общего назначения, в основном предназначенный для виртуальной машины Java. Разработанный для краткого, элегантного и безопасного для типов представления общих шаблонов программирования, он сочетает в себе как императивный, так и функциональный стили программирования. Его ключевые особенности: продвинутая система статического типа с выводом типа; типы функций; сопоставления с образцом ; неявные параметры и преобразования; перегрузка оператора; полная совместимость с Java; совпадение