是否有将Future [Reader [A,X]]转换为Reader [A,Future [X]]的一般方法?

ada*_*amw 3 functional-programming scala scalaz

任何函子都可以进行这样的转换,不仅是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)) }
}
Run Code Online (Sandbox Code Playgroud)

我想知道这是Readermonad 的特殊属性,还是有一个更通用的概念使之成为可能?

例如,当我们泛化为时Reader,它就不起作用Kleisli,因此我怀疑Reader这里是“特殊情况”。

Tom*_*ula 5

的这个属性Reader称为Distributive。该cosequence方法实现您的转换。