是否有将 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的这个属性叫做Distributivecosequence 方法实现您的转换。