首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scala中的简单Comonad?

Scala中的简单Comonad?
EN

Code Review用户
提问于 2013-06-23 02:57:33
回答 1查看 423关注 0票数 3
代码语言:javascript
复制
 trait Comonad[M[_]] {
   // map
   def >>[A,B](a: M[A])(f: A => B): M[B]

   // extract | coeta 
   def counit[A](a:M[A]): A

   // coflatten | comu
   def cojoin[A](a: M[A]): M[M[A]]
}

object Comonad {

  implicit def listComonad[A]: Comonad[List]
  =
    new Comonad[List] {

      def counit[A](lsa: List[A])
      =
        lsa match { case List(a) => a }

      def cojoin[A](lsa:List[A]): List[List[A]]
      =
        List(lsa)

      def >>[A,B](lsa: List[A])(f: A => B): List[B]
      =
        lsa map f
  }

}

所以是的,我在看这个,我没有那种正确的感觉.

有人介意纠正这个问题,或者提供一两个其他简单的共餐吗?

EN

回答 1

Code Review用户

回答已采纳

发布于 2013-06-23 11:52:45

我相信,困扰你的是counit的非全局性定义,对吧?(对于cojoin来说,一个可能的变体是lsa.tails)实际上,List没有一个有效的comonad实例,特别是因为它。不过,它确实有一个有效的半模 实例

具有有效comonad实例的东西是,例如:身份NonEmptyList拉链元组。下面是一个包含更多comonad示例的reddit问题

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/27685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档