\begin{slide}{Auswertung von Ausdrücken}

Ausdrücke (mit Nebenwirkungen):
\begin{verbatim}
date Exp = ... 
   | New Exp | Get Exp | Put Exp Exp
\end{verbatim}

Resultattyp des Interpreters ändern:
\begin{verbatim}
value    :: Env -> Exp ->        Val
evaluate :: Env -> Exp -> Action Val
\end{verbatim}

semantischen Bereich erweitern:
\begin{verbatim}
data Val = ... 
    | ValAddr Addr
    | ValFun ( Val -> Action Val )
\end{verbatim}

Aufruf des Interpreters:
\begin{verbatim}
run Store.empty $ evaluate undefined $ ...
\end{verbatim}

\end{slide}

\begin{slide}{Änderung der Hilfsfunktionen}

bisher:
\begin{verbatim}
with_int :: Val -> ( Int -> Val ) -> Val
with_int v k = case v of
    ValInt i -> k i
    v -> ValErr "ValInt expected"
\end{verbatim}
jetzt:
\begin{verbatim}
with_int :: Action Val 
  -> ( Int -> Action Val ) -> Action Val
with_int m k = m >>= \ v -> case v of ...
\end{verbatim}

Hauptprogramm muß kaum geändert werden (!)

\end{slide}


