检查函数是否在Haskell中返回错误

时间:2019-06-15 16:19:19

标签: haskell try-catch

我想创建一个函数,当一个函数引发任何类型的异常时返回True,否则返回False

但是我无法找到一种方法,可以使用catch上的Control.Exception方法。

我想捕获[1,2] !! 3引发的错误,还希望捕获因error "Error msg"的使用而引发的自定义错误。

1 个答案:

答案 0 :(得分:9)

您可以按以下方式使用catch

example :: IO ()
example = do
   let handler :: SomeException -> IO Bool
       handler e = do
          putStrLn "Exception caught:"
          print e
          return False
   res <- (evaluate ([1,2::Int] !! 3) >> return True) `catch` handler
   print res

最后一个print将在正常终止时打印True,在异常终止时将打印False

可以删除处理程序中的输出消息-仅用于说明。

如果您只想捕获某些异常类型,则可以将SomeException替换为任何更具体的异常类型。

请注意,您无法在IO之外捕获异常,这使它们更加受限制。因此,应避免使用!!之类的部分函数,​​而应首选返回Maybe a类型的函数,该函数的输出可在任何地方检查。