newtype CodeGenModule a = CGM (StateT CGMState IO a)
   deriving (Monad, MonadState [s], MonadIO)