Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在函数式编程中,Store Comonad和可表示的Store Comonad之间有什么区别?_Scala_Haskell_Functional Programming_Scalaz_Comonad - Fatal编程技术网

Scala 在函数式编程中,Store Comonad和可表示的Store Comonad之间有什么区别?

Scala 在函数式编程中,Store Comonad和可表示的Store Comonad之间有什么区别?,scala,haskell,functional-programming,scalaz,comonad,Scala,Haskell,Functional Programming,Scalaz,Comonad,具有代表性的Store Comonad和Store Comonad提供了类似的功能。。。我们应该在什么时候使用一种方法而不是另一种方法,其好处是什么?以下是对它们的简要概述,以供参考: 类{-…=>-}可表示f,其中 类型键f -- ... 数据RepStore f a=RepStore(键f)(f a) 数据存储SA=存储s->a 请特别注意 实例可表示(s->a),其中 键入键->a)=s -- ... 因此我们直接得到了stores和RepStore(s->)几乎完全可以互换。在另一个

具有代表性的Store Comonad和Store Comonad提供了类似的功能。。。我们应该在什么时候使用一种方法而不是另一种方法,其好处是什么?

以下是对它们的简要概述,以供参考:

类{-…=>-}可表示f,其中
类型键f
-- ...
数据RepStore f a=RepStore(键f)(f a)
数据存储SA=存储s->a
请特别注意

实例可表示(s->a),其中
键入键->a)=s
-- ...
因此我们直接得到了
stores
RepStore(s->)
几乎完全可以互换。在另一个方向上,范畴理论告诉我们所有的
可表示的
函子都与函数同构(它们的
作为域),因此
RepStore f
Store(键f->)
都是同构的


总之:在大多数情况下,你选择哪一个并不重要。如果您计划只在函数上使用它,那么您最好使用
Store
,并从它的语法轻巧中获益;如果您希望使用一些不完全是函数的可表示函子(例如,记忆函数或类似的函数),则
RepStore
是一个适当的泛化。

值得注意的是,在猫中,例如
Store
在形式上只是一个专门的
RepresentableStore
(其中,可表示函子为
I=>uu
).我不知道Haskell情况的细节,但我猜,
附加
comonad
不这样做的唯一原因是历史原因。谢谢@TravisBrown!顺便说一句,在《猫》杂志上有一个关于引入IndexedStore的讨论,以及它是否应该建立在
RepresentableStore之上,您可能有一些有用的输入…感谢您的指针,我还没有看到PR!