前几天我遇到了一个接线员,-<
,出现在将值绑定(bind)到 monad 中的变量的上下文中;具体来说,这看起来像是将一个值传递给一个函数,然后将其分配(并可能评估?)给一个存在于 monad 范围内的变量。
示例用法:
myMonad = do
myVar <- f -< x
关于这个的几个问题:首先,它叫什么?运营商本身无法通过 Google 搜索(Google 不喜欢
<
或 >
),而我找到的一个名称“arrow application”通常链接到 the other kind of Arrow
present in Haskell ,这似乎无关。其次,为什么大多数学习资源都没有解释这个运算符? “Monads 的简单介绍”和 LYAH 都没有提及它,而且大多数 Haskell 运算符列表也放弃了它。 (这被认为是不好的做法吗?)
最后,这是否等同于使用括号,如
(myVar <- f -< x) == (myVar <- (f x))
?还是更像是使用 let myVar = (f x)
?在任何一种情况下,如果它是这样使用的,为什么要使用 -<
超过括号或 $
?
最佳答案
是的,那是同一种箭头。箭头有糖语法,就像单子(monad)有糖语法一样。你不能用谷歌搜索-<
, 但您可以使用 Hoogle .
见:GHC Language Features , Arrow tutorial .
箭头语法确实记录得很差。无法使用的原因$
而不是 -<
是-<
将纯值注入(inject)箭头,但 ->
只是箭头的一个例子。所以,$
如果您的箭头是 ->
,则可以正常工作.还有一元箭头(Kleisli
构造函数创建这些箭头),您可以制作自己的箭头,在这些情况下 -<
是不同的。
关于haskell - 到底是什么 "-<",无论如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30276551/