为什么在定义函数重复时
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规则始终适用于包装的元素,后来这一个元素总是"展开"与提取物,为什么还要做别的事情在重复的功能不仅仅是包装的论点其他复制?
你能指出我错过了什么吗?我觉得我在某个地方犯了一些明显的错误,但我无法自己搞清楚.
在此先感谢您的回复!