如何将下面的Haskell do表示法转换为bind (>>=)
表示法?
rev2lines :: IO ()
rev2lines = do line1 <- getLine
line2 <- getLine
putStrLn (reverse line2)
putStrLn (reverse line1)
我是一个Haskell初学者,拥有不错的知识,并且尝试过类似
getLine >>= (\line1 -> getLine >>= (\line2 -> putStrLn $ reverse(line2)))
但我无法包含另一行(即第1行)的打印声明。请帮助我正确地理解这个概念。
最佳答案
您快到了:您需要使用>>
。
getLine >>= (\line1 ->
getLine >>= (\line2 ->
putStrLn (reverse line2) >>
putStrLn (reverse line1)
))
请注意,
>> ...
与>>= (\_ -> ...)
等效,因此您也可以根据需要使用它。同样,您的街区
do line1 <- getLine
line2 <- getLine
putStrLn (reverse line2)
putStrLn (reverse line1)
相当于
do line1 <- getLine
line2 <- getLine
_ <- putStrLn (reverse line2)
putStrLn (reverse line1)
本质上,块中没有显式
<-
的任何条目(但最后一个条目)都使用>>
(或者,如果您愿意,在其前面有一个隐式_ <-
)。关于haskell - 将do表示法转换为绑定(bind)表示法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49960117/