haskell - 到底是什么 "-<",无论如何?

标签 haskell monads

前几天我遇到了一个接线员,-< ,出现在将值绑定(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/

相关文章:

haskell - fmap 的自由定理

haskell - 无法将类类型与 haskell 中的特定类型匹配

c - Haskell二叉树快速实现

class - haskell : Working with monad classes

f# - 延续单子(monad)中的 StackOverflow

haskell - Haskell 中 Cofree CoMonad 的一些激励示例是什么?

haskell - Haskell单例:排版包

haskell - 与 Haskell do block 的混淆

haskell - 如何用递归定义遍历 Monad 并收集结果?

haskell - 每个重复嵌套的单子(monad)有用吗?