10

我最近一直在使用应用程序(和替代),而让我感到沮丧的一件事是我对命名法缺乏了解。作为一个例子,我想能够说function name而不是star thingfor <*>>>=因此,以与read大致相同的方式,以下内容bind是否有更人性化的名称:

  • <*>- 申请?
  • <*& *>- 左右适用?
  • <$>- 地图?
  • <|>

同样从箭头

  • ***- 分裂?
  • &&&- 扇出?

如果有这些名称,我的搜索还没有发现它们。我知道这些条款可能不被接受,但如果有的话,我很想知道它们。

4

3 回答 3

11

该符号来自 Doaitse Swierstra 和 Luc Duponcheel:他们已经为解析器组合器确定了这个接口,我们认为在有意义的地方尊重他们的选择很重要。我试图记住 Doaitse 是如何发音的,但我还是画了一个空白。

我更喜欢他们被看到而不是被听到。事实上,我也不希望它们被看到,因此有成语括号。但特别是在定义实例时,拥有名称会很有帮助。并不是说由我来命名它们:整个成语 vs 应用 vs 天知道-什么恶作剧是对权力的迷人研究。为了它的价值,用我自己的话说

  • <*>is 'applied (to)' (界面是'pure and applied',就像数学一样)
  • *>被“忽略”
  • <*是“忽略”
  • <$>是'映射(结束)'
  • <$可能是“之后”,但我并没有意识到将其称为任何东西

关键思想:效果总是从左到右排列(无论这意味着什么);$ 或 * 告诉你他们左边的内容是纯粹的还是惯用的;雪佛龙告诉你产生的数据流,只指向信号。

另一种发音方案,远离个别操作员的水平,可能会翻译

f <$> a <*> b <* c <*> d

到'成语:f,a,b,NOISE c,d'或类似的东西。但这真的是阅读括号版本

(|f a b (-c-) d|)

响亮地。

我觉得“money”和“splat”很有趣,但我们最好优先考虑语义而不是语法。

于 2011-05-01T10:15:25.597 回答
8

嗯,<$>是 的同义词fmap。另外,“applicative”这个名字让我想到了应用事物。由于<*>是执行此操作的主要运算符,因此我认为我将其与“应用”一词松散地联系在一起。上下文与普通函数应用程序略有不同,因此该词可能会有些混淆,但上下文通常会使其足够清晰,因此对我有用。 <*>也是ap来自 Control.Monad 的函数的同义词,所以这证实了我使用“应用”这个词。

Brent Yorgey 的Typeclassopedia是我学到的大部分内容。这是一个出色的资源。

于 2011-04-29T20:28:19.943 回答
5

好吧,没有标准名称,但有时它们被称为:

  • <*>是“啪”的一声
  • <$>是“钱”

这样:

 f <$> g <*> x

发音:

 f `money` g `splat` x

我相信这些术语是由 Trevor Elliott 和 Eric Mertens 提出的。

于 2011-04-29T19:48:25.330 回答