我正在阅读论文"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
单子变压器来处理这种情况。
是的!只需在文件顶部添加适当的杂注即可抑制不需要的警告。
{-# 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