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 可视化,即为工厂提供一个魔法盒,然后逐步要求工厂承诺魔法盒内部的某些结构(可能为提供更多魔法盒)它使用),然后在打开盒子时使提交的结构神奇地可用。
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 可视化,即为工厂提供一个魔法盒,然后逐步要求工厂承诺魔法盒内部的某些结构(可能为提供更多魔法盒)它使用),然后在打开盒子时使提交的结构神奇地可用。