>= putStrLn >> main 现在我想在 getLine 之后退出如果线路-6ren">
gpt4 book ai didi

haskell - 在 Haskell 的单子(monad)链(>>,>>=)中有条件地 "return ()"的更短方法?

转载 作者:行者123 更新时间:2023-12-04 04:45:51 24 4
gpt4 key购买 nike

我有这个简单的代码,它读取一个字符串并无限期地打印它。

main :: IO ()
main = getLine >>= putStrLn >> main

现在我想在 getLine 之后退出如果线路是“退出”或“退出”,则调用。

我的尝试:
main :: IO ()
main = do
line <- getLine
if line == "exit" || line == "quit"
then return ()
else putStrLn line >> main

对我来说看起来并不地道。有没有更好的办法?

最佳答案

Control.Monad.unless (它是更受欢迎的表亲 when )从您的代码中抽象出这种模式:

import Control.Monad (unless)

main = do
line <- getLine
unless (line == "exit" || line == "quit") $ do
putStrLn line
main
-- or
when (line /= "exit" && line /= "quit") $ do
putStrLn line
main

有条件的 return ()后跟无条件代码不会起作用,如 return只是一个函数,而不是大多数其他语言中的流控制关键字。

关于haskell - 在 Haskell 的单子(monad)链(>>,>>=)中有条件地 "return ()"的更短方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18290785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com