2

我正在尝试学习如何在猫库中使用 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。

4

1 回答 1

3

我怀疑您缺少猫实例的导入:

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)
}
于 2016-12-30T18:38:24.693 回答