【发布时间】: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