Значение withFilter не является членом Cats IO для понимания - PullRequest
3 голосов
/ 16 апреля 2019

Я написал этот код, и он прекрасно компилируется

for {
  list : List[Int] <- Future(List(1, 2, 3))
} yield list.size 

res7: Future[Int] = Future(Success(3))

Но если я преобразую этот код в

for {
  list : List[Int] <- IO(List(1, 2, 3))
} yield list.size

, я получу ошибку во время компиляции

value withFilter is not a member of cats.effect.IO[List[Int]]

Если я удаляю тип, то он прекрасно компилируется

for {
  list  <- IO(List(1, 2, 3)) // returns IO[List[Int]]
} yield list.size 
res8: IO[Int] = Map(Delay(<function0>), <function1>, 0)

Почему я не могу указать тип с помощью ввода-вывода?

У меня включено частичное объединение, поэтому этого не может быть :)

1 Ответ

6 голосов
/ 16 апреля 2019

Ваше понимание становится дезагрегированным для формы, которая использует функцию withFilter, и, поскольку IO не имеет этого метода, компиляция завершается неудачей.

К счастью, есть плагин компилятора better-monadic-for , который решает эту проблему.

Просто добавьте addCompilerPlugin("com.olegpy" %% "better-monadic-for" % "0.3.0") в свой build.sbt, и все будет в порядке.

...