>>符号在Haskell中的含义是什么?

Cha*_*esS 10 syntax haskell

我正在阅读Happstack 的留言簿示例,并注意到>>我之前在学习Haskell的教科书中没有看到的符号(例如见第23行).它是什么?

我无法在Google中找到它,因为它>>完全忽略了它(Bing没有提出大量非相关结果).

Tim*_*son 17

Hayoo认识到这种运算符:http://holumbus.fh-wedel.de/hayoo/hayoo.html

(>>)就像(>>=)是,它排序两个动作,除了它忽略了第一个动作的结果.

  • 终极拳击冠军对决:胡格尔 vs. Hayoo! (2认同)

ken*_*ytm 14

用符号表示

a >> b >> c >> d
Run Code Online (Sandbox Code Playgroud)

相当于

do a
   b
   c
   d
Run Code Online (Sandbox Code Playgroud)

(同样a >>= (b >>= (c >>= d))相当于

do r1 <- a
   r2 <- b r1
   r3 <- c r2
   d r3
Run Code Online (Sandbox Code Playgroud)

  • @Nearoo不是该主题的专家,但我认为您忽略了 a、b、c 或 d 可能是纯的(单子)但仍然抛出异常,从而影响程序流程,即使它们的返回值被忽略。 (2认同)

jro*_*way 11

在ghci命令提示符下,您可以键入:

:info >>
Run Code Online (Sandbox Code Playgroud)

并获得如下结果:

class Monad m where
...
(>>) :: m a -> m b -> m b
...
        -- Defined in GHC.Base
infixl 1 >>
Run Code Online (Sandbox Code Playgroud)

从那里,您可以查看源代码以了解更多信息.

只是为了回答你的问题:

k >> f = k >>= \_ -> f
Run Code Online (Sandbox Code Playgroud)

  • 正确但对Haskell新手几乎没有帮助.它为什么存在?它有用的是什么?+ 0. (8认同)
  • 我现在觉得自己很愚蠢;我知道 :i (info) 命令,但我来自 Java 和 PHP,并且仍然习惯于使用 REPL 来处理所有事情。谢谢 (2认同)
  • 这足以让我找到搜索的位置;我之前没有任何线索。 (2认同)

Sev*_*ian 6

来自 Hackage,>>被描述为:

“顺序组合两个动作,丢弃第一个产生的任何值,如命令式语言中的排序运算符(如分号)。”

我认为一个很好的例子是使用>>. 打开 GHCI 并输入以下内容:

putStr "Hello " >> putStrLn "World"

这相当于do符号:

do putStr "Hello "
   putStrLn "World"

Run Code Online (Sandbox Code Playgroud)


j_r*_*ker 5

我不是 Haskell 专家,但我>>是一个用于处理 monad 的运算符,这是一个不寻常的功能,它(除其他功能外)支持 Haskell 中的命令式编程。有很多关于 monad 的教程;这是一个很好的

本质上,a >> b可以理解为“执行a然后执行b,并返回结果b”。它类似于更常见的绑定运算符>>=

  • 用“哪些是难以理解的事情”来回答并不能澄清问题。我认为这会让读者陷入失败。 (10认同)