到底是什么" - <&#34 ;,无论如何?

时间:2015-05-16 13:56:33

标签: haskell monads

前几天,我遇到了一个运算符-<,出现在将值绑定到monad中的变量的上下文中;具体来说,它看起来像是将一个值传递给一个函数,然后该函数被分配(并且可能被评估?)给monad范围内存在的变量。

使用示例:

myMonad = do
    myVar <- f -< x

关于这个的一些问题:首先,它叫什么?运营商本身是不可谷歌的(Google不喜欢<>),以及我找到的一个名称,&#34; arrow application&# 34;,通常链接到the other kind of Arrow present in Haskell,这似乎是无关的。

其次,为什么大多数学习资源都没有解释这个操作符?无论是Monad&#34; Gentle Introduction to Monads&#34;也不是LYAH给予它如此多的提及,大多数Haskell运营商的名单也放弃了它。 (这被认为是不好的做法吗?)

最后,这相当于使用括号,如(myVar <- f -< x) == (myVar <- (f x))?或者更像是使用let myVar = (f x)?在任何一种情况下,如果这是它的使用方式,为什么要使用-<而不是parens或$

1 个答案:

答案 0 :(得分:16)

是的,这是同一种箭头。箭头有糖语法,就像monad的糖语法一样。您无法使用Google搜索-<,但可以使用Hoogle

请参阅:GHC Language FeaturesArrow tutorial

箭头语法确实记录不清。您无法使用$代替-<的原因是-<在箭头中注入纯值,但->只是箭头的一个示例。因此,如果您的箭头为$,则->可以正常工作。还有monadic箭头(Kleisli构造函数创建了这些箭头),你可以制作自己的箭头,在这些情况下-<是不同的。