Ich schreibe einen Interpreter in Haskell und ich habe map: name_of_function -> definition of function.Wie man "case" vermeiden kann, wenn man `Maybe` behandelt
Map String Defun
Mein Dolmetscher Monade:
type InterpreterMonad = StateT (EnvFun, (Stack EnvEval)) (ErrorT String IO)()
Und wie können Sie "letzte" Monade sehen ist ErroT
.
Nun, wenn ich handle Aufruf von Funktionen würden:
handleFCall :: Stmt -> InterpreterMonad
handleFCall (VarName name) args = get >>= \(envFun, contextStack) -> case (Map.lookup (VarName name) envFun) of
Nothing -> throwError "Err"
(Just x) -> DoSthOther
Und wie man sehen kann ich case
verwenden. Jedoch verwende ich >>=
, also möchte ich case of
hier vermeiden. Aber, Map.lookup
zurück Nothing
auf Fehler und ich möchte meine Fehlermeldung hinzufügen.
Ich habe keine Erfahrung in Haskell, also weiß ich nicht, wie man damit umgeht. Darüber hinaus ist jede Kritik an meinem Code willkommen.
Prost.