任何仿函数都可以实现这种转换,而不仅仅是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
是一个“特殊情况”。