2

I am reading the paper "Monad Transformers Step by Step" and making my way through the examples.

In the eval0 example, there is an intentional non-exhaustive pattern in a case expression:

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

Is there any way to suppress the exception "Non-exhaustive patterns in case" without adding a

_ -> error "Error"

to the end of the case? Later examples in the paper show how to handle this situation using the ErrorT monad transformer.

Ralph
  • 31,584
  • 38
  • 145
  • 282

1 Answers1

3

Yes indeed! Just add the appropriate pragma at the top of your file to suppress the undesired warnings.

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

You can find a complete list (I think) of how to turn off individual warnings like so

bash> man ghc | grep no-warn

Obviously, you can also pass -fno-warn-incomplete-patterns when you start up ghci

bash> ghci -Wall -fno-warn-incomplete-patterns myfile.hs
Dan Burton
  • 53,238
  • 27
  • 117
  • 198