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