是否有将 Future[Reader[A, X]] 转换为 Reader[A, Future[X]] 的通用方法?
Is there a general way of transforming a Future[Reader[A, X]] to Reader[A, Future[X]]?
这样的转换对于任何函子都是可能的,不仅仅是Future
:
implicit class RichFunctorReader[F[_]: Functor, A, B](fr: F[Reader[A, B]]) {
def toReaderFunctor: Reader[A, F[B]] = Reader { a => fr.map(_.run(a)) }
}
我想知道它是否是 Reader
monad 的特殊 属性,或者是否有更通用的概念使这成为可能?
例如,当我们将 Reader
泛化为 Kleisli
时它不起作用,所以我怀疑 Reader
在这里是 "special case"。
Reader
的这个属性叫做Distributive
。 cosequence
方法实现您的转换。
这样的转换对于任何函子都是可能的,不仅仅是Future
:
implicit class RichFunctorReader[F[_]: Functor, A, B](fr: F[Reader[A, B]]) {
def toReaderFunctor: Reader[A, F[B]] = Reader { a => fr.map(_.run(a)) }
}
我想知道它是否是 Reader
monad 的特殊 属性,或者是否有更通用的概念使这成为可能?
例如,当我们将 Reader
泛化为 Kleisli
时它不起作用,所以我怀疑 Reader
在这里是 "special case"。
Reader
的这个属性叫做Distributive
。 cosequence
方法实现您的转换。