功能编程中的Store Comonad和Representable Store Comonad有什么区别?

时间:2019-01-25 15:50:03

标签: scala haskell functional-programming scalaz comonad

Representable Store Comonad和Store Comonad提供类似的功能...我们什么时候应该使用另一功能,有什么好处?

1 个答案:

答案 0 :(得分:3)

作为参考,以下是它们的简要介绍:

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 sRepStore (s ->)几乎可以互换。在另一个方向上,范畴论告诉我们所有Representable仿函数对函数都是同构的(以它们的Key为域),因此RepStore fStore (Key f ->)是同构的。 / p>

总而言之:在大多数情况下,选择哪种并不重要。如果您打算仅在函数上使用它,则不妨使用Store并从其语法轻便中受益;如果您希望使用一些不完全是函数的可表示函子(例如,记忆函数或类似的东西),那么RepStore是适当的概括。