【问题标题】:What is a Cohoist in scalaz?scalaz 中的 Cohoist 是什么?
【发布时间】:2019-06-07 04:43:00
【问题描述】:

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]
 }

问题是如何对待这种类型?谁能用几句话解释一下或者举个例子?

【问题讨论】:

    标签: scala scalaz comonad


    【解决方案1】:

    ComonadTrans 对理解 cohoist 并不重要,这类似于地图的高阶版本。

    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])
    

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

    所以就像 map 一样,它将一个函数(M 到 N 转换器)提升到 F,形成一个“F of M”到“F of N”的转换器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多