首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Comonad的<$$>

理解Comonad的<$$>
EN

Stack Overflow用户
提问于 2019-01-23 11:17:46
回答 1查看 113关注 0票数 7

给定来自fp-course的以下内容

代码语言:javascript
复制
class Functor f where
  (<$>) ::
    (a -> b)
    -> f a
    -> f b

class Functor f => Extend f where
  (<<=) ::
    (f a -> b)
    -> f a
    -> f b

我是这样定义<$$>的:

代码语言:javascript
复制
(<$$>) ::
  Comonad f =>
  (a -> b)
  -> f a
  -> f b
(<$$>) f fa = f <$> fa

但是,我想知道是否有其他方法可以在不使用<$>的情况下实现<$$>。在那里吗?如果有,请出示!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-23 11:49:10

您需要Comonadextract方法;没有fmapExtend是不够的。

代码语言:javascript
复制
(<$$>)
  :: Comonad f
  => (a -> b)
  -> f a
  -> f b
f <$$> w = f . extract <<= w

这基本上就是在Control.Comonad中实现liftW的方式。

还要注意,您需要<<= (或extend);extractduplicate是不够的。这种情况类似于BindMonad;您可以使用>>=pure实现fmap,但不能单独使用>>=,也不能使用joinpure

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

https://stackoverflow.com/questions/54319549

复制
相关文章

相似问题

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