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