私は「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
この論文の後半の例では、モナド変換子を使用してこの状況を処理する方法を示しています。