Control.Lens 中的 Market 名称背后的原因是啥?

Posted

技术标签:

【中文标题】Control.Lens 中的 Market 名称背后的原因是啥?【英文标题】:What's the reason behind the name Market in Control.Lens?Control.Lens 中的 Market 名称背后的原因是什么? 【发布时间】:2019-12-24 10:55:22 【问题描述】:

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

其中大多数都有相对不言自明的名称,例如 Traversal 和 Fold。

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

来自 Bazaar 页面:

又名。索引笛卡尔存储comonad、索引Kleene 存储comonad 或索引FunList。

...

从记忆力上讲,Bazaar 拥有许多商店,您可以轻松添加更多。

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

【问题讨论】:

A Market 似乎只不过是Prism 的具体表示,其类型参数按APrism 方便的顺序排列。 Bazaar 不一样,我真的不知道它和Store 有什么关系。 对于Bazaar,请尝试查看schoolofhaskell.com/school/to-infinity-and-beyond/…——它在开头提供了一个非常简短的概述。 【参考方案1】:

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

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 ts 的集合。事实上,如果您选择特定的s,那么您的Market' a s t 将成为以下两件事之一:

    s -> Either t a 返回一个由Right 标记的事物,因此您有一个a -> t 和一个a。这与Store a t 完全相同。 s -> Either t a 返回一个由Left 标记的事物。您已经将自己大部分时间带到了商店:您有一个a -> t,但您没有可以应用该功能的特定索引a,而是直接将您的手放在t 上。 (注意,我认为没有任何理由相信 t 一定在 a -> t 的共同域中。我只是给出了名称的直觉,而不是行为规律。)

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

【讨论】:

以上是关于Control.Lens 中的 Market 名称背后的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章

镜头中的视图和使用有啥区别?

高分求教用SOL语言1. 创建一个market数据库其中包含三张表:客户表,货品表,订单表

镜头和类型系列

Android Market URL按Java包名称搜索

按开发者名称搜索Android Market URL

HTML Android Market URL按开发者名称搜索