如何在haskell中处理异常

如何在haskell中处理异常,haskell,Haskell,上面的代码是基于tweetId转发tweet 如果转发一条推文失败,我会得到一个例外。怎么处理 我试着做到了 postRetweet :: IO [TweetIdStr] -> IO [Status] postRetweet tweetId = do let response1 = tweetId >>= \tweetId1 -> mapM (\tid -> (postWith authenticate (retweetUrl++tid++".json")

上面的代码是基于tweetId转发tweet
如果转发一条推文失败,我会得到一个例外。怎么处理

我试着做到了

postRetweet :: IO [TweetIdStr] -> IO [Status]
postRetweet tweetId = do
    let response1 = tweetId >>= \tweetId1 -> mapM (\tid -> (postWith authenticate (retweetUrl++tid++".json") (DB.pack "ABC"))  ) tweetId1
    response1 >>= \rid -> (mapM (\x -> pure (x^. responseStatus) ) rid)

使用
try/catch
实现异常处理和/或生成一种可能存在错误的类型,例如
IO(错误结果)

见:

postRetweet :: IO [TweetIdStr] -> IO [Status]
postRetweet tweetId = do
    tweetId >>= \tweetId1 -> (CM.foldM (\arr tid ->  ((try (postWith authenticate (retweetUrl++tid++".json") (DB.pack "ABC")) ):: IO (Either SomeException (Response BL.ByteString)) ) >>= 
         \sc ->
                case sc of
                    Right val ->   if (val ^. responseStatus ^. statusCode)==200
                                        then pure (arr++[val ^. responseStatus])  
                                    else pure (arr)              
                    Left x -> pure (arr) ) [] tweetId1 )