小编Jac*_*kie的帖子

Comonad重复功能

为什么在定义函数重复时

   duplicate :: w a -> w (w a)     
Run Code Online (Sandbox Code Playgroud)

对于Comonad类型类(链接),您必须修改"在上下文中"的所有元素(即更改除上下文当前值之外的元素).为什么不在Monad中使用像返回这样的东西?

示例(拉链):

   data Z a = Z [a] a [a]     
Run Code Online (Sandbox Code Playgroud)

为什么我不能将副本定义为

   duplicate z = Z [] z []     
Run Code Online (Sandbox Code Playgroud)

我试图从Comonad规则中获得重复函数的要求,但我总是得到一个副本,它只是将元素包装成monad中的返回而不需要做任何其他操作.

一篇博文说:

复制有点难以掌握.从列表拉链中,我们必须构建列表拉链的列表拉链.这背后的意义(由每个实例必须履行的comonad法律确认)是在复制结构内部移动返回原始结构,由同一移动改变

但我不明白为什么一定是那样.该FMAP在Comonad规则始终适用于包装的元素,后来这一个元素总是"展开"与提取物,为什么还要做别的事情在重复的功能不仅仅是包装的论点其他复制

你能指出我错过了什么吗?我觉得我在某个地方犯了一些明显的错误,但我无法自己搞清楚.

在此先感谢您的回复!

haskell comonad

14
推荐指数
1
解决办法
411
查看次数

标签 统计

comonad ×1

haskell ×1