haskell - Control.Lens 中的 Market 这个名称背后的原因是什么?

标签 haskell terminology haskell-lens lenses

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

其中大多数都有相对不言自明的名称,例如 TraversalFold

它还定义了一些名称不太明显的类型,例如 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 背后的原因。 我认为这在某种程度上也与商店单子(monad)/共单子(monad)有关? 这是正确的吗?

最佳答案

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

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

所以:a Market a s t有点像 Store a t 的集合s 索引为 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 ,但不是具有特定索引 a该功能可以应用到,您可以直接将手放在t上就会产生这样的结果。 (注意:我认为没有任何理由相信 t 必然位于 a -> t 的同域中。我只是给出名称的直觉,而不是行为法则。)

我认为没关系:现实世界的市场通常也有与商店相似但不完全相同的东西。 =)

关于haskell - Control.Lens 中的 Market 这个名称背后的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57553042/

相关文章:

haskell - 如何不确定地将值放入状态中?

haskell - Haskell 编程中的数据类型

ruby - Ruby 中有更准确的 "class methods"术语吗?

html - "href"在 HTML 中代表什么?

design-patterns - 静态工厂方法或创建方法

haskell - 复合镜头不能让绑定(bind)吗?

haskell - 使用镜头按索引访问矢量元素

python - 从 Haskell 到 Python : how to do currying?

使用 Maybe 的 Haskell 代码 zipWith

haskell - 使用具有多个数据构造函数的相同镜头