什么是真实的' Haskell的Arrow运算符的名字?

时间:2016-06-24 20:08:56

标签: haskell arrows

1998年,John Hughes在this paper中为Haskell提出了Arrow类型。此类型类附带了许多非字母数字运算符,如@Override public void onPictureTaken(byte[] data, Camera camera) { rotation = getPhotoRotation(); CameraModel cameraModel = new CameraModel(); cameraModel.setCameraData(data, rotation, mImageParameters.createCopy()); setSafeToTakePhoto(true); } ***。但是,他没有为这些运营商提供明确的名称。

Haskell的Monad类型类与&&&类似,发音为>>=

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

1 个答案:

答案 0 :(得分:5)

Control.Arrow称他们为"分裂"和#34;扇出"。这是你获得正式名字的最接近的。

然而,在箭头的特殊情况下,我倾向于根据与传送带连接的工厂机器来考虑它们。如果您从定义音素(不一定是实际功能)开始,这将为您提供非常丰富的词汇量

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

在这个词汇表中,您将first a发音为" a旁边的belt"和second a as" belt旁边a",而a &&& b成为" dupe管道进入({1}} a旁边的b。"

它还提供了一个很好的ArrowApply可视化;当有一台机器接收两条传送带时,工厂机器可以ArrowApply:一台用于其他机器,一台用于装入第一台机器的物体。这台机器将传入的对象填充到传入的机器中,发出第一台机器发出的任何东西,然后将机器抛弃。

它还给出了一个不太好的ArrowLoop可视化,为工厂提供了一个魔术盒,然后逐渐要求工厂承诺魔术盒里面的某些结构(可能提供更多的魔法)它可以使用的盒子,然后在打开盒子时可以灵活地使用已提交的结构。