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如何在对话中引用这些运算符?
答案 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可视化,为工厂提供了一个魔术盒,然后逐渐要求工厂承诺魔术盒里面的某些结构(可能提供更多的魔法)它可以使用的盒子,然后在打开盒子时可以灵活地使用已提交的结构。