added Gen monad for generating variable names