Edward Kmett's optics library; Control.Lens定义了大量类型。
其中大多数具有相对易解释的名称,例如Traversal和Fold。
它还定义了一些名称不那么明显的类型,例如Bazaar
从“义卖市场”页面上:
a.k.a。索引的直角坐标系商店,索引的Kleene商店,或索引的FunList。
...
通常,集市上有很多商店,您可以轻松添加更多商店。
我无法弄清类型Market背后的原因。 我认为这在某种程度上也与商店monads / comonads有关? 这是正确的吗?
答案 0 :(得分:5)
我不了解真实的历史,但我怀疑以下情况。让我们以这种方式排列类型:
Market' a s t: Market (a -> t) (s -> Either t a)
Store a t: Store (a -> t) a
因此:Market a s t
有点像Store a t
索引的s
的集合。实际上,如果您选择特定的s
,那么您的Market' a s t
会成为以下两件事之一:
s -> Either t a
返回一个用Right
标记的东西,因此您有一个a -> t
和一个a
。这与Store a t
完全相同。s -> Either t a
返回由Left
标记的内容。您已经大部分时间进入了商店:您拥有一个a -> t
,但是您没有直接使用{{1 }}。 (请注意,我没有任何理由相信a
一定在t
的同域中。我只是对名称有一个直觉,而不是行为定律。)我认为还可以:现实世界中的市场通常也有类似但又不太完全相同的商店。 =)