1998年,John Hughes在本文中为Haskell提出了Arrow类型.这个类型类带有许多"非字母数字"的运算符,比如***和&&&.然而,他没有为这些运营商提供明确的名称.
Haskell的Monad类型有类似的事情>>=,发音为bind.
我的问题是如何发音箭头运算符***和&&&.或者他们甚至有明显的名字?Haskellers如何在对话中引用这些运算符?
Control.Arrow称他们为"分裂"和"扇出".这是你获得正式名字的最接近的名字.
然而,在箭头的特殊情况下,我倾向于将其视为与传送带连接的工厂机器.如果您从定义音素(不一定是实际功能)开始,这将为您提供非常丰富的词汇表
belt = id
pipe-into = (.)
dupe = belt &&& belt
next-to = (***)
process-with = arr
Run Code Online (Sandbox Code Playgroud)
在这个词汇表中,你发音first a为" a旁边一个belt"和second a" belt旁边一个a",而a &&& b 变成"一个dupe管道输入(a旁边一个b)."
它还提供了一个很好的ArrowApply可视化; 当有一台机器接收两条传送带时,工厂机器可以ArrowApply:一台用于其他机器,一台用于装入第一台机器的物体.这台机器将传入的对象填充到传入的机器中,发出第一台机器发出的任何东西,然后将机器扔掉.
它还提供了一个不太好的ArrowLoop可视化,为工厂提供了一个魔术盒,然后逐步要求工厂提交魔术盒内部的一些结构(可能提供更多魔术盒供其使用),然后在打开盒子时使提交的结构神奇地可用.