加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

什么是scalaz的Cohoist?

发布时间:2020-12-16 08:46:35 所属栏目:安全 来源:网络整理
导读: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] }
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并不是很重要,它类似于高阶版的地图.

通过翻转周围的论点,可以重新制定地图

[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”变换器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读