禁用GHCI中的“非详尽模式”

时间:2012-06-12 12:07:30

标签: haskell ghci non-exhaustive-patterns

我正在阅读论文"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变换器来处理这种情况。

1 个答案:

答案 0 :(得分:3)

确实是的!只需在文件顶部添加适当的pragma即可抑制不需要的警告。

{-# 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