将 do 块转换为使用 >>= 的代码

Convert a do block into a code that uses >>=

我有以下功能

foo  =
    do
    putStr "type in a sentence: "
    s <- getLine
    putStrLn ("You typed " ++ s)

我需要转换此函数,使其不使用 'do' 而是使用 >>=。

我能够在其他示例中做到这一点,我必须连接 2 个单子

maybeadd' x y = x >>= (\x' ->  y  >>= (\y' -> pure(x'++y')    ))

但我不知道如何处理我的情况。有人能给我指出正确的方向吗?

谢谢!

像这样:

foo = putStr "type in a sentence: " >> getLine >>= \s -> putStrLn ("You typed " ++ s)

一般规则是没有 <- 的行脱糖为 >>,带有 <- 的行脱糖为 >>= 和 lambda。