我正在阅读Happstack的Guestbook example,并注意到我之前在我学习的Haskell教科书中没有看到的>>
符号(例如见第23行)。它是什么?
我在谷歌找不到它,因为它完全忽略了>>
(Bing没有,但会产生大量不相关的结果)。
答案 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
”的结果。它类似于更常见的绑定运算符>>=
。