Cats Monad变形金刚

时间:2016-12-30 17:09:27

标签: scala scala-cats

我正在尝试学习如何使用猫库中的MonadTransformers来嵌套monad。

所以我正在尝试为[String,Option [A]]

建立数据类型

这是我写的代码

import cats.data.OptionT
import cats.instances.list._
import cats.syntax.applicative._

object Ex11 extends App {
   type ErrorEither[A] = Either[String, A]
   type ErrorOrOption[A] = OptionT[ErrorEither, A]
   val x = 42.pure[ErrorOrOption]
   println(x)
}

但是我收到了错误

[error] Ex11.scala:13: could not find implicit value for parameter F: cats.Applicative[Ex11.ErrorOrOption]
[error]    val x = 42.pure[ErrorOrOption]
[error]                   ^

我从使用Xor的示例中获取了这个,但我猜最新的cat库已移除Xor,而不是Either。

1 个答案:

答案 0 :(得分:3)

我怀疑你错过了cat实例的导入:

import cats.instances.either._

(此外,import cats.instances.list._的导入似乎也是多余的。)

以下内容应编译:

import cats.data.OptionT
import cats.instances.either._
import cats.syntax.applicative._

object Ex11 extends App {
   type ErrorEither[A] = Either[String, A]
   type ErrorOrOption[A] = OptionT[ErrorEither, A]
   val x = 42.pure[ErrorOrOption]
   println(x)
}