Не удается скомпилировать пример из книги Advanced Scala с Cats

#scala #functional-programming #scala-cats

#scala #функциональное программирование #scala-кошки

Вопрос:

Я читаю книгу и играю с примерами там. Проблема в том, что я не могу воспроизвести этот пример:

   type Logged[A] = Writer[List[String], A]
  // Example method that returns nested monads:
  def parseNumber(str: String): Logged[Option[Int]] =
    util.Try(str.toInt).toOption match {
      case Some(num) => Writer(List(s"Read $str"), Some(num))
      case None => Writer(List(s"Failed on $str"), None)
    }

  // Example combining multiple calls to parseNumber:
  def addNumbers(
                  a: String,
                  b: String,
                  c: String
                ): Logged[Option[Int]] = {
    import cats.data.OptionT
    // Transform the incoming stacks to work on them:
    val result = for {
      a <- OptionT(parseNumber(a))
      b <- OptionT(parseNumber(b))
      c <- OptionT(parseNumber(c))
    } yield a   b   c
    // Return the untransformed monad stack:
    result.value
  }
  

Ошибки компиляции:

 Error:(30, 9) could not find implicit value for parameter F: cats.Monad[advancedScalaWithCats.monadTransformation.Part4UsagePatterns.Logged]
      b <- OptionT(parseNumber(b))
Error:(30, 9) not enough arguments for method flatMap: (implicit F: cats.Monad[advancedScalaWithCats.monadTransformation.Part4UsagePatterns.Logged])cats.data.OptionT[advancedScalaWithCats.monadTransformation.Part4UsagePatterns.Logged,Int].
Unspecified value parameter F.
      b <- OptionT(parseNumber(b))
  

Ответ №1:

Добавить

 import cats.instances.list._
  

Комментарии:

1. Понял! Большое спасибо!