>>是什么哈斯克尔的象征意味着

时间:2010-02-27 09:49:00

标签: syntax haskell

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

我在谷歌找不到它,因为它完全忽略了>>(Bing没有,但会产生大量不相关的结果)。

5 个答案:

答案 0 :(得分:15)

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

(>>)(>>=)类似,因为它会对两个动作进行排序,但它会忽略第一个动作的结果。

答案 1 :(得分:10)

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

:info >>

得到如下结果:

class Monad m where
...
(>>) :: m a -> m b -> m b
...
        -- Defined in GHC.Base
infixl 1 >>

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

只是为了回答你的问题:

k >> f = k >>= \_ -> f

答案 2 :(得分:10)

用符号表示

a >> b >> c >> d

相当于

do a
   b
   c
   d

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

do r1 <- a
   r2 <- b r1
   r3 <- c r2
   d r3

答案 3 :(得分:2)

在黑客中,>>被描述为:

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

我认为一个很好的例子是使用>>顺序打印两个字符串。打开GHCI并输入以下内容:

putStr "Hello " >> putStrLn "World"

这等效于do表示法:

do putStr "Hello "
   putStrLn "World"

答案 4 :(得分:1)

我不是Haskell专家,但>>是一个用于处理monad的运算符,这是一个不寻常的特性(在许多其他事情中)在Haskell中启用命令式编程。 monad上有很多教程; here's one good one

基本上,a >> b可以像“执行a然后执行b一样阅读,并返回b”的结果。它类似于更常见的绑定运算符>>=