【问题标题】:Disable "Non-exhaustive patterns in case" in GHCI在 GHCI 中禁用“非详尽模式以防万一”
【发布时间】:2012-06-12 12:07:30
【问题描述】:

我正在阅读"Monad Transformers Step by Step" 的论文并通过示例进行说明。

在 eval0 示例中,case 表达式中有一个有意的非穷举模式:

eval0 :: Env -> Exp -> Value
eval0 env (Lit i) = IntVal i
eval0 env (Var n) = fromJust (Map.lookup n env)
eval0 env (Plus e1 e2) = let IntVal i1 = eval0 env e1
                             IntVal i2 = eval0 env e2
                         in IntVal (i1 + i2)
eval0 env (Abs n e) = FunVal env n e
eval0 env (App e1 e2) = let val1 = eval0 env e1
                            val2 = eval0 env e2
                        in case val1 of
                          FunVal env' n body ->
                            eval0 (Map.insert n val2 env') body

有什么方法可以在不添加“非详尽模式以防万一”的情况下抑制异常

_ -> error "Error"

到case 的末尾?本文后面的示例展示了如何使用ErrorT monad 转换器来处理这种情况。

【问题讨论】:

    标签: haskell ghci non-exhaustive-patterns


    【解决方案1】:

    确实如此!只需在文件顶部添加适当的编译指示即可抑制不需要的警告。

    {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}
    

    你可以找到一个完整的列表(我认为)如何像这样关闭个别警告

    bash> man ghc | grep no-warn
    

    显然,你也可以在启动ghci时传递-fno-warn-incomplete-patterns

    bash> ghci -Wall -fno-warn-incomplete-patterns myfile.hs
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-13
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      相关资源
      最近更新 更多