我是第一次用Haskell编码,我在case语句方面遇到了麻烦。
points = do
pts <- try(readLn :: IO Int) :: IO (Either SomeException Int)
case pts of
Left ex -> putStrLn "Please enter a number."
Right val -> return pts
这段代码用于从用户输入中阅读一个整数,并进行检查以确保它确实是一个整数。我遇到的问题是Left ex
的情况。我想做的是,如果出现异常,打印"Please enter a number."
行,然后再次运行points函数。问题是我不知道如何在Left ex
的情况下调用points。因为它会干扰书面声明,有什么建议吗
1条答案
按热度按时间hgb9j2n61#
你可以使用
do
表示法,它允许将几个IO
(或另一个单子的)动作按顺序粘合在一起,就像你已经在points
本身的主体中所做的那样:或者,您可以执行
do
表示法的基本操作,并使用>>=
操作符,该操作符将两个IO
操作按顺序粘合在一起:注意,
\_ ->
位忽略了第一个操作的返回值,所以你可以使用>>
操作符,它的作用和>>=
一样,但是它会丢弃第一个操作的结果: