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

Joe*_*Joe 8 haskell terminology lenses haskell-lens

爱德华·克梅特(Edward Kmett)的光学图书馆;Control.Lens定义了大量类型。

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

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

在“义卖市场”页面上:

aka索引的笛卡尔商店comonad,索引的Kleene商店comonad或索引的FunList。

...

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

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

Dan*_*ner 5

我不了解真实的历史,但我怀疑以下情况。让我们以这种方式排列类型:

Market' a s t: Market (a -> t) (s -> Either t a)
Store   a   t: Store  (a -> t)                a
Run Code Online (Sandbox Code Playgroud)

所以:a Market a s t有点像Store a t由索引的s 的集合s。确实,如果您选择特定的s,那么您Market' a s t将成为以下两件事之一:

  1. s -> Either t a事被贴标的回报Right,让你有一个a -> ta。这与完全相同Store a t
  2. s -> Either t a回报的事情标记的Left。您已经大部分时间进入了商店:您拥有一个a -> t,但是a您没有直接使用可以应用该功能的特定索引,而是直接使用了t它。(注意,我看不出有任何理由相信t必然是的共同域a -> t。我只是对名称进行了直观的了解,而不是行为定律。)

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