scalaz定义了 Cohoist :

  trait Cohoist[F[_[_], _]] extends ComonadTrans[F] {
    def cohoist[M[_], N[_]: Comonad](f: M ~> N): F[M, ?] ~> F[N, ?]
  }

定义ComonadTrans的位置:
 trait ComonadTrans[F[_[_], _]] {
   def lower[G[_]: Cobind, A](a: F[G, A]): G[A]
 }

问题是如何治疗这种类型?有人可以用几个字解释一下还是举个例子?

最佳答案

ComonadTrans对理解cohoist并不是很重要,它类似于map的高阶版本。

可以通过翻转参数来重新编写map,如下所示:

[A, B](A => B) => (F[A] => F[B])

换句话说,它将功能提升为F~>只是
F ~> G
[A]F[A] => G[A]

这样,您可以扩展cohoist的签名
[M[_], N[_]: Comonad]([A]M[A] => N[A]) => ([A]F[M, A] => F[N, A])

(这两个A不能组合并拉到初始的tparam列表中;除了说“那是行不通的”之外,我不想在这里进行详细说明)

因此,就像map一样,它将函数(M到N的转换器)提升为F,从而将“M的F”转换为“N的F”的转换器。

关于scala - 什么是scalaz的Cohoist?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54160426/

10-10 12:25