Для справки, вот краткий обзор того, что они из себя представляют:
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
является подходящим обобщением.