Haskell 的箭头运算符的 'real' 名称是什么?

What are the 'real' names of Haskell's Arrow operators?

1998 年,John Hughes 在 this paper 中为 Haskell 提出了 Arrow 类型 class。这种类型 class 带有许多 'non-alpha-numeric' 运算符,例如 ***&&&。然而,他没有为这些运算符给出可发音的名称。

Haskell 的 Monad 类型 class 与 >>= 有类似的事情发生,发音为 bind.

我的问题是如何发音箭头运算符 ***&&&。或者他们甚至有可发音的名字? Haskell用户如何在对话中引用这些运算符?

Control.Arrow 称它们为 "split" 和 "fanout"。这是最接近的官方名称。

但是,就箭头而言,我倾向于将它们视为与传送带相连的工厂机器。如果您从定义音素(不一定是实际功能)开始,这将为您提供非常丰富的词汇量

belt = id
pipe-into = (.)
dupe = belt &&& belt
next-to = (***)
process-with = arr

在该词汇表中,您将 first a 发音为“a next to a belt”,将 second a 发音为 "a belt next-to a",而 a &&& b变成 "a dupe piped into (an a next to a b)."

它还很好地可视化了 ArrowApply;当有一些机器接收两条传送带时,工厂机器可以使用 ArrowApply:一条用于其他机器,一条用于适合第一台机器的物体。这台机器把传入的对象塞进传入的机器,第一台机器发出什么就发出什么,然后把机器扔掉。

它还提供了一个不太好的 ArrowLoop 可视化,即为工厂提供一个魔法盒,然后逐步要求工厂承诺魔法盒内部的某些结构(可能为提供更多魔法盒)它使用),然后在打开盒子时使提交的结构神奇地可用。