这样的转换对于任何函子都是可能的,不仅是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在这里是“特殊情况”。

最佳答案

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

10-05 20:50
查看更多