Namen

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

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



Johannes Waldmann 2012-01-30