Control.Lens这个名字背后的原因是什么?

时间:2019-08-19 08:32:30

标签: haskell terminology lens lenses

Edward Kmett's optics library; Control.Lens定义了大量类型。

其中大多数具有相对易解释的名称,例如TraversalFold

它还定义了一些名称不那么明显的类型,例如Bazaar

从“义卖市场”页面上:

  

a.k.a。索引的直角坐标系商店,索引的Kleene商店,或索引的FunList。

...

  

通常,集市上有很多商店,您可以轻松添加更多商店。

我无法弄清类型Market背后的原因。 我认为这在某种程度上也与商店monads / comonads有关? 这是正确的吗?

1 个答案:

答案 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会成为以下两件事之一:

  1. s -> Either t a返回一个用Right标记的东西,因此您有一个a -> t和一个a。这与Store a t完全相同。
  2. s -> Either t a返回由Left标记的内容。您已经大部分时间进入了商店:您拥有一个a -> t,但是您没有直接使用{{1 }}。 (请注意,我没有任何理由相信a一定在t的同域中。我只是对名称有一个直觉,而不是行为定律。)

我认为还可以:现实世界中的市场通常也有类似但又不太完全相同的商店。 =)