Bei der Übersetzung werden
„frische`` Variablennamen benötigt
(=
module Control.Monad.State where
data State s a = State ( s -> ( a, s ) )
get :: State s s ; put :: s -> State ()
evalState :: State s a -> s -> a
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
Johannes Waldmann
2014-03-31