什么是scalaz的Cohoist?

问题描述 投票:4回答:1

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个回答
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]) 的签名

A

(两个Fs不能合并并拉到最初的tparam列表;我不想在此处详细说明“那不起作用”)

所以就像map一样,它将一个函数(M到N变换器)提升到qazxswpoi,将“F of M”改为“F of N”变换器。

© www.soinside.com 2019 - 2024. All rights reserved.