这样的转换对于任何函子都是可能的,不仅是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
方法实现您的转换。