Namen

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

import Data.Set
var :: Exp -> Set String

Frische Namen aufzählen und in Zustandsmonade bereitstellen. Zustand ist (unendliche) Liste der frischen Namen.

import Control.Monad.State
data State s a = State ( s -> ( a, s ) ) 
get :: State s s ; put :: s -> State ()

fresh :: State [String] String
fresh = do (n:ns)<-get ; put ns; return n



Johannes Waldmann 2011-01-23