haskell - 在 GHCI 中禁用 "Non-exhaustive patterns in case"

标签 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"

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

最佳答案

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

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

关于haskell - 在 GHCI 中禁用 "Non-exhaustive patterns in case",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10996334/

相关文章:

haskell - 功能中的非详尽模式

haskell - 使用 “staircasing” 代码中的 `Maybe` 值重构 `IO`

haskell - haskell 的战舰(初级)

haskell - 在 GHCi 中, ':module' 和 'import' 有什么区别?

haskell - 与 Haskell 中的 `System.Directory` 混淆

c# - 使用 Async Await 是否可以避免线程耗尽?

haskell - 拥有一个惰性/严格版本的 Writer 有什么意义?

haskell - 乙烯基:组成记录类型别名

Haskell 的 Pairs 类型

haskell - GHC 提示类型检查器强制执行的非详尽模式