Control.Lens 中的市场名称背后的原因是什么?

What's the reason behind the name Market in Control.Lens?

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

其中大部分都有相对不言自明的名称,例如 Traversal and Fold

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

来自 Bazaar 页面:

a.k.a. indexed Cartesian store comonad, indexed Kleene store comonad, or an indexed FunList.

...

Mnemonically, a Bazaar holds many stores and you can easily add more.

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

我不知道真实的历史,但我怀疑以下内容。让我们这样排列类型:

Market' a s t: Market (a -> t) (s -> Either t a)
Store   a   t: Store  (a -> t)                a

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

  1. s -> Either t a returns 被 Right 标记的东西,所以你有一个 a -> t 和一个 a。这与 Store a t.
  2. 完全相同
  3. s -> Either t a returns 被 Left 标记的事物。您已经完成了去商店的大部分路程:您有一个 a -> t,但您没有可以应用该功能的特定索引 a,而是直接接触 t 这将导致。 (N.B。我看不出有任何理由相信 t 一定在 a -> t 的同域中。我只是给出名称的直觉,而不是行为规律.)

我觉得没关系:现实世界的市场通常也有类似但不完全相同的商店。 =)