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并不是很重要,它类似于高阶版的地图.
通过翻转周围的论点,可以重新制定地图
[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”变换器.