【发布时间】:2016-12-09 13:13:35
【问题描述】:
这样的转换对于任何函子都是可能的,不仅仅是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 在这里是一个“特例”。
【问题讨论】:
-
这叫做
sequence,当你交换两种类型时,F[G[A]] => G[F[A]]。关于为什么在没有Traverse实例的情况下可以做到这一点:我不确定这是否是正确的推理,但你正在做的是 +/-point(fr.map(copoint)),所以你需要来自的pointMonad和对应的Comonad中的copoint... 虽然我不完全确定这是否是一个有效的论点,因为您只能在本地构造copoint。
标签: scala functional-programming scalaz