Haskell语言学习笔记(51)Comonad
来源:互联网 发布:软件测试的基本原则 编辑:程序博客网 时间:2024/06/15 18:10
Comonad
class Functor w => Comonad w where extract :: w a -> a duplicate :: w a -> w (w a) duplicate = extend id extend :: (w a -> b) -> w a -> w b extend f = fmap f . duplicate
Comonad 是个类型类。
比较 Monad 和 Comonad
class Functor m => Monad m where return :: a -> m a bind :: (a -> m b) -> (m a -> m b) join :: m (m a) -> m a join = bind id bind f = fmap f . join (>>=) :: m a -> (a -> m b) -> m b (>>=) = flip bindclass Functor w => Comonad w where extract :: w a -> a extend :: (w a -> b) -> w a -> w b duplicate :: w a -> w (w a) duplicate = extend id extend f = fmap f . duplicate (=>>) :: w b -> (w b -> a) -> a (=>>) = flip extend
((,) e) 是个 Comonad
也称作 CoReader(Env) Comonad。
instance Comonad ((,)e) where duplicate p = (fst p, p) extract = snd
Prelude Control.Comonad> duplicate (3,4)(3,(3,4))Prelude Control.Comonad> extract (3,4)4Prelude Control.Comonad> extend fst (3,4)(3,3)Prelude Control.Comonad> extend snd (3,4)(3,4)
((->)m) 是个 Comonad
也称作 CoWriter(Traced) Comonad。
instance Monoid m => Comonad ((->)m) where duplicate f m = f . mappend m extract f = f mempty
参考链接
Haskell for all: Comonads are objects
Comonads in Haskell
阅读全文
0 0
- Haskell语言学习笔记(51)Comonad
- Haskell语言学习笔记(1)
- Haskell语言学习笔记(2)
- Haskell语言学习笔记(4)Functor
- Haskell语言学习笔记(5)Applicative
- Haskell语言学习笔记(6)Monad
- Haskell语言学习笔记(8)Monoid
- Haskell语言学习笔记(14)Foldable
- Haskell语言学习笔记(16)Alternative
- Haskell语言学习笔记(17)MonadPlus
- Haskell语言学习笔记(18)Traversable
- Haskell语言学习笔记(21)Array
- Haskell语言学习笔记(22)MaybeT
- Haskell语言学习笔记(29)CPS
- Haskell语言学习笔记(31)ListT
- Haskell语言学习笔记(35)Contravariant
- Haskell语言学习笔记(39)Category
- Haskell语言学习笔记(42)Bifunctor
- Haskell语言学习笔记(50)Extra
- 7.2 用全局变量编程模拟显示一个数字时钟
- auc计算 代码
- 版本控制之Git---Git Flow模型
- IEC/PAS 62612
- Haskell语言学习笔记(51)Comonad
- 递归算法转非递归
- 转载:图的最小生成树和最短路径
- 学习总结1
- c++ 运算符重载
- Haskell语言学习笔记(52)正则表达式
- 画圆
- CCF 送货 (欧拉路径+字典序最小 80分)
- c++中引入全局static下,产生的问题