前几天,我遇到了一个运算符-<
,出现在将值绑定到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或$
?
答案 0 :(得分:16)
是的,这是同一种箭头。箭头有糖语法,就像monad的糖语法一样。您无法使用Google搜索-<
,但可以使用Hoogle。
请参阅:GHC Language Features,Arrow tutorial。
箭头语法确实记录不清。您无法使用$
代替-<
的原因是-<
在箭头中注入纯值,但->
只是箭头的一个示例。因此,如果您的箭头为$
,则->
可以正常工作。还有monadic箭头(Kleisli
构造函数创建了这些箭头),你可以制作自己的箭头,在这些情况下-<
是不同的。