content: import Database.PostgreSQL.Migrate
  import System.Environment
  import System.Exit
  import System.FilePath
  import System.IO
  
  main :: IO ()
  main = do
    args <- getArgs
    ec <- case args of
      "init":[] -> initializeDb >> return ExitSuccess
      "dump":[] -> withFile (defaultMigrationsDir </> ".." </> "schema.sql")
                    WriteMode $ dumpDb
      "dump":file:[] -> withFile file WriteMode $ dumpDb
      "migrate":[] -> runMigrationsForDir stdout defaultMigrationsDir
      "migrate":dir:[] -> runMigrationsForDir stdout dir
      "rollback":[] -> runRollbackForDir defaultMigrationsDir
      "rollback":dir:[] -> runRollbackForDir dir
      "new":name:[] -> newMigration name defaultMigrationsDir >>
                        return ExitSuccess
      "new":name:dir:[] -> newMigration name dir >> return ExitSuccess
      "compile":out:[] -> compileMigrationsForDir defaultMigrationsDir out
      "compile":out:dir:[] -> compileMigrationsForDir dir out
      _ -> do
        progName <- getProgName
        putStrLn $ "Usage: " ++ progName ++ " migrate|rollback [DIRECTORY]"
        putStrLn $ "       " ++ progName ++ " compile [PROGRAM] [DIRECTORY]"
        putStrLn $ "       " ++ progName ++ " init"
        putStrLn $ "       " ++ progName ++ " dump [FILE]"
        putStrLn $ "       " ++ progName ++ " new NAME [DIRECTORY]"
        return $ ExitFailure 1
    if ec == ExitSuccess then
      return ()
      else exitWith ec
  