fs2 Stream scala Нет неявного типа: Stream.Compiler[Eval,G_]

Я пытаюсь создать Stream[Eval, String] следующим образом:

import cats.Eval
import cats.effect.{ExitCode, IO, IOApp}
import fs2._

object StringEval extends IOApp {

  def evalString: Eval[String] = Eval.always{
      val r = new scala.util.Random(31)
      r.nextString(4)
    }

  override def run(args: List[String]): IO[ExitCode] = {

    Stream
      .eval(evalString)
      .repeat
      .compile
      .lastOrError
      .start
      .as(ExitCode.Success)

  }
}

Но проблема в том, что я получаю сообщение об ошибке компиляции:

Error:(17, 8) could not find implicit value for parameter compiler: fs2.Stream.Compiler[[x]cats.Eval[x],G]
      .compile

Я не могу понять ошибку? что мне не хватает? К чему относится ошибка?


person Muna Ar    schedule 10.06.2020    source источник
comment
я думаю, что вам следует избегать использования типа данных Eval для захвата побочных эффектов из-за отсутствия возможностей обработки ошибок (нет экземпляра MonadError[Eval]). Возможно, тип данных Sync будет хорошим выбором для вашей проблемы.   -  person nader.h    schedule 10.06.2020
comment
Это было просто для тестирования, IO делает это, поэтому нет проблем с организацией программы?   -  person Muna Ar    schedule 10.06.2020


Ответы (1)


Fs2 Stream.Compiler не найден ( не удалось найти неявное значение Compiler[[x]F[x],G])

Fs2 Stream#compile теперь требует Sync[F]

Eval не имеет экземпляра Sync, а IO есть.

Пытаться

def evalString: IO[String] = {
  val r = new scala.util.Random(31)
  Sync[IO].delay(r.nextString(4))
}

Stream
  .eval(evalString)
  .repeat
  .compile
  .lastOrError
  .start
  .as(ExitCode.Success)
person Dmytro Mitin    schedule 10.06.2020
comment
Я попробовал пример с IO, и он работает отлично, дело в том, что я пытаюсь понять, почему он не работает с Eval, кажется, что он требует экземпляра Sync, но почему? я не понимаю - person Muna Ar; 10.06.2020
comment
@MunaAr Вы читали ссылку? stackoverflow.com/questions/56329032/ twitter.com/ djspiewak/status/1004128360740470784 - person Dmytro Mitin; 10.06.2020
comment
Я новичок во всем этом извините - person Muna Ar; 10.06.2020