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/