\begin{slide}{Namen}

Bei der Übersetzung werden \glqq frische\grqq\ Variablennamen
benötigt ($=$ die im Eingangsprogramm nicht vorkommen).

\begin{verbatim}
import Control.Monad.State
data State s a = State ( s -> ( a, s ) ) 
get :: State s s ; put :: s -> State ()

fresh :: State Int String
fresh = do 
    k <- get ; put (k+1)
    return $ "f." ++ show k

type Transform a = State Int a
cps :: Exp -> Transform Exp
\end{verbatim}

\end{slide}


