Scala Cats ReaderT Nest Monad转换器找不到隐式参数

时间:2018-09-29 15:02:49

标签: scala monads monad-transformers scala-cats

使用cats.data.ReaderT[F[_], A, B]

F[_],当使用monad变压器时。
会丢失隐式值Monad[ReaderT[F, A, ?]]

scala> import cats._, cats.data._, cats.implicits._
import cats._
import cats.data._
import cats.implicits._

scala> implicitly[Monad[ReaderT[OptionT[List, ?], String, ?]]]
<console>:21: error: could not find implicit value for parameter e: cats.Monad[[γ$1$]cats.data.Kleisli[[β$0$]cats.data.OptionT[[+A]List[A],β$0$],String,γ$1$]]
       implicitly[Monad[ReaderT[OptionT[List, ?], String, ?]]]
                 ^

但是。为了定义类型别名。 这样就可以找到隐含的值。

scala> type OptionList[A] = OptionT[List, A]
defined type alias OptionList

scala> type OptionListReader[A] = ReaderT[OptionList, String, A]
defined type alias OptionListReader

scala> implicitly[Monad[OptionListReader]]
res1: cats.Monad[OptionListReader] = 
cats.data.KleisliInstances0$$anon$2@21898c8a

可以在没有定义的类型别名的情况下找到隐式值吗?

0 个答案:

没有答案