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
可以在没有定义的类型别名的情况下找到隐式值吗?