unimplemented :: String -> CodeGen a
unimplemented msg = do
  liftIO . putStrLn $ "Not implemented: " ++ msg
  return undefined
unimplemented :: String -> CodeGen a
unimplemented msg = do
  liftIO . putStrLn $ "Not implemented: " ++ msg
  return undefined
unimplemented msg = do
  liftIO . putStrLn $ "Not implemented: " ++ msg
  return undefined