猫 Monad 变形金刚
Cats Monad Transformers
我正在尝试学习如何使用 cats 库中的 MonadTransformers 嵌套 monad。
所以我正在尝试为 Either[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
的示例中提取了这个,但我猜最新的猫库删除了 Xor
以支持 Either。
我怀疑您缺少 cats 实例的导入:
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)
}
我正在尝试学习如何使用 cats 库中的 MonadTransformers 嵌套 monad。
所以我正在尝试为 Either[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
的示例中提取了这个,但我猜最新的猫库删除了 Xor
以支持 Either。
我怀疑您缺少 cats 实例的导入:
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)
}