【问题标题】:Are there human-friendly names for applicative (and friends) methods? [closed]应用(和朋友)方法是否有人性化的名称? [关闭]
【发布时间】:2011-08-15 18:01:12
【问题描述】:

我最近一直在使用 applicative(和 Alternative),而让我感到沮丧的一件事是我对命名法缺乏了解。例如,我希望能够说function name 而不是star thing 代表<*>。所以,就像>>= 读作bind 一样,以下是否有更人性化的名称:

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

同样来自箭头

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

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

【问题讨论】:

  • 关于(<*>)的发音,我已经expressed my opinion at great length,所以我将在这里链接到它而不是重复我自己......
  • 同意 camccann,<*> 确实是“ap”——虽然很明显 <$> 是货币函数。

标签: haskell naming applicative


【解决方案1】:

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

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

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

关键思想:效果总是按从左到右的顺序(无论这意味着什么); $ 或 * 告诉你他们左边的内容是纯粹的还是惯用的;人字形告诉您生成的数据流,仅指向信号。

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

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

to 'IDIOM: f, a, b, NOISE c, d' 或类似的。不过那真的是读括号版

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

大声说出来。

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

【讨论】:

  • 感谢 Conor,为整个事情撰写论文(!),以及非常有见地的回答。
【解决方案2】:

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

Brent Yorgey 的 Typeclassopedia 是我学到最多的地方。这是一个出色的资源。

【讨论】:

    【解决方案3】:

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

    • &lt;*&gt; 是“splat”
    • &lt;$&gt; 是“钱”

    这样:

     f <$> g <*> x
    

    发音:

     f `money` g `splat` x
    

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

    【讨论】:

    • 可能不值得注意的是,“splat”和“big money”是原始INTERCAL参考手册中为*$运算符指定的官方发音>,如果我从未听说过,这肯定是一个权威来源。
    • 一如既往地感谢您提供的有用答案。很难只接受一个。
    • 我使用诗歌 Waka Waka Bang Splat 和 Hatless Atlas 来寻找灵感来弄清楚如何发音,但要获得更全面的参考,您可以使用 ASCII 表发音指南:ascii-table.com/pronunciation-guide.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2012-05-20
    • 2013-03-14
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多