代码之家  ›  专栏  ›  技术社区  ›  luntain

如何处理此异常?

  •  3
  • luntain  · 技术社区  · 17 年前

    ***异常:../p/trip/trip.hs:(88,16)-(89,50):功能拆分中的非穷举模式

    在我看来,这似乎是失败,但这不起作用:

    handle (\(PatternMatchFail _) -> return env) f
    

    我的意思是,它可以编译,但不能处理异常。我做错了什么?这是错误的例外还是什么?有没有办法捕捉任何异常?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Waquo    17 年前

    如果无法修复错误源,则应查看以下内容: http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Exception.html

    在Haskell 98中,纯代码无法处理异常。纯函数必须返回值,异常是返回值失败。

    例子:

    import qualified Control.Exception as C
    x ::String
    x = undefined
    y = "return value"
    
    main = do C.handle (\_ -> return "caught") (C.evaluate x) >>= print
              C.handle (\_ -> return "caught") (C.evaluate y) >>= print
    

    调用evaluate是为了强制计算x和y,haskell是懒惰的。

    如果您让x的计算推迟到以后(延迟),那么异常也将稍后在另一个位置抛出(在本例中,使用该值的是“print”),在该位置可能不会被捕获。

    推荐文章