Namen

Bei der Übersetzung werden „frische`` Variablennamen benötigt (= mathend000# die im Eingangsprogramm nicht vorkommen).

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