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

moo*_*isy 1 haskell try-catch

我想创建一个函数,True当一个函数抛出任何异常,False如果没有抛出异常,则返回该函数。

但是我还没有办法找到一种使用的方法来做到这一点的catch方法Control.Exception

我想捕捉由引发的错误,[1,2] !! 3也要捕捉由引起的自定义错误error "Error msg"

chi*_*chi 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
Run Code Online (Sandbox Code Playgroud)

最后一个printTrue在正常终止和False异常终止时打印。

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

SomeException如果您只想捕获某些异常类型,则可以用任何更特定的异常类型替换。

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