哈斯克尔.非IO异常处理

Ant*_*ton 7 haskell exception-handling

我试图通过动作捕捉异常([1,2] !! 3).我不能.

我在努力

let a = [1,2]
Run Code Online (Sandbox Code Playgroud)
  • handle (\(e :: SomeException) -> print "err" >> return 1) (return $ a !! 3)
  • Control.Exception.catch (return $ a !! 3) (\(e::SomeException) -> print "err" >> return 1)

我得到了 例外:序曲.(!!):索引太大*

可能吗?可能我会使用Maybe方法.

感谢帮助.

Don*_*art 7

惰性和异常,如懒惰和平行,以微妙的方式相互作用!

return数组访问包装在thunk中,以便返回未评估的值,从而在处理程序之外评估异常.

解决方案是确保评估return还必须评估列表索引.这可以通过以下方式完成$!:

handle((e :: SomeException) - > print"err">> return 1)(返回$!a !! 3)