【发布时间】:2012-11-06 14:16:43
【问题描述】:
由于我之前在other question中过于简单化了,这里我想举一个更清楚的例子。
如何处理必须以顺序方式检查某些条件而不嵌套多个案例的情况?对于“顺序方式”,我的意思是获取一个值(例如从标准输入),检查该值是否符合特定条件,并根据结果获取另一个值等等。
例子:
sequen :: IO String
sequen = do
a <- getLine
case a of
"hi" -> do
putStrLn "hello!"
b <- getLine
case b of
"how are you?" -> do
putStrLn "fine, thanks"
return "nice conversation"
_ -> return "error 2"
_ -> return "error 1"
我知道有更好的方法来编写这样的聊天机器人,它应该只是展示问题的顺序性质。如您所见,对于每个嵌套大小写,代码也会缩进更深。
有没有办法更好地构造这样的代码?我正在考虑在一个地方处理“错误”并描述“成功路径”,而无需将错误处理分布在所有地方。
【问题讨论】:
标签: haskell