代表性商店Comonad和商店Comonad提供类似的功能...我们什么时候应该使用另一个,又有什么好处?
最佳答案
作为参考,以下是它们的简要介绍:
class {- ... => -} Representable f where
type Key f
-- ...
data RepStore f a = RepStore (Key f) (f a)
data Store s a = Store s (s -> a)
请注意,
instance Representable (s -> a) where
type Key (s -> a) = s
-- ...
因此我们直接知道
Store s
和RepStore (s ->)
几乎可以互换。在另一个方向上,范畴论告诉我们所有Representable
函子对函数都是同构的(以Key
为域),因此RepStore f
和Store (Key f ->)
是同构的。总结:在大多数情况下,选择哪个并不重要。如果您打算只在函数上使用它,则不妨使用
Store
并从其语法轻便中受益;如果您希望使用一些不完全是函数的可表示函子(例如,记忆函数或类似的东西),那么RepStore
是一个适当的概括。