从 F[A] 创建 ReaderT[F, D, A]
Create ReaderT[F, D, A] from F[A]
type MapReaderOrOption[A] = ReaderT[Option, Map[String,String], A]
我可以从 ReaderT.apply
:
创建它
def f:MapReaderOrOption[Int] = ReaderT(_ => Option(10))
通过类型丰富和纯方法从 A 类型:
import cats.Applicative
import cats.syntax.int._
def f:MapReaderOrOption[Int] = 10.pure[MapReaderOrOption]
我想找到类似的东西。每次用 ReaderT(..) 都不太方便。当然,我可以创建一个辅助方法。问题是,还有其他选择吗?
预计是这样的:
def f:MapReaderOrOption[Int] = Option(10).asReaderT[MapReaderOrOption]
type MapReaderOrOption[A] = ReaderT[Option, Map[String,String], A]
implicit class toReader[F[_],T](f: F[T]) {
def asReaderT[K] = ReaderT[F,K,T](_ => f)
}
def f:MapReaderOrOption[Int] = Option(10).asReaderT
或者如果未明确提供 f
类型,您需要定义 K
参数。
def f = Option(10).asReaderT[Map[String,String]]
所以现在 f
的类型将被推断为 ReaderT[Option, Map[String,String], Int]
。我认为在这种情况下你甚至不需要类型别名。
或另一种选择
def f = Option(10).asReaderT:MapReaderOrOption[Int]
采用 F[A]
并将其提升为 HK[F, A]
用于某些 higher-kinded 构造 HK
的方法在整个库中一直被称为 liftF
。
在您的情况下,它将是 Kleisli.liftF
,因为 ReaderT
只是 Kleisli
的别名:
import cats.data.ReaderT
import cats.data.Kleisli.liftF
type MapReaderOpt[A] = ReaderT[Option, Map[String, String], A]
val x: MapReaderOpt[Int] = liftF(Option(42))
如果 liftF
看起来太模糊,您仍然可以在重命名导入期间将其重命名为 {liftF => liftToReaderT}
。
type MapReaderOrOption[A] = ReaderT[Option, Map[String,String], A]
我可以从 ReaderT.apply
:
def f:MapReaderOrOption[Int] = ReaderT(_ => Option(10))
通过类型丰富和纯方法从 A 类型:
import cats.Applicative
import cats.syntax.int._
def f:MapReaderOrOption[Int] = 10.pure[MapReaderOrOption]
我想找到类似的东西。每次用 ReaderT(..) 都不太方便。当然,我可以创建一个辅助方法。问题是,还有其他选择吗?
预计是这样的:
def f:MapReaderOrOption[Int] = Option(10).asReaderT[MapReaderOrOption]
type MapReaderOrOption[A] = ReaderT[Option, Map[String,String], A]
implicit class toReader[F[_],T](f: F[T]) {
def asReaderT[K] = ReaderT[F,K,T](_ => f)
}
def f:MapReaderOrOption[Int] = Option(10).asReaderT
或者如果未明确提供 f
类型,您需要定义 K
参数。
def f = Option(10).asReaderT[Map[String,String]]
所以现在 f
的类型将被推断为 ReaderT[Option, Map[String,String], Int]
。我认为在这种情况下你甚至不需要类型别名。
或另一种选择
def f = Option(10).asReaderT:MapReaderOrOption[Int]
采用 F[A]
并将其提升为 HK[F, A]
用于某些 higher-kinded 构造 HK
的方法在整个库中一直被称为 liftF
。
在您的情况下,它将是 Kleisli.liftF
,因为 ReaderT
只是 Kleisli
的别名:
import cats.data.ReaderT
import cats.data.Kleisli.liftF
type MapReaderOpt[A] = ReaderT[Option, Map[String, String], A]
val x: MapReaderOpt[Int] = liftF(Option(42))
如果 liftF
看起来太模糊,您仍然可以在重命名导入期间将其重命名为 {liftF => liftToReaderT}
。