runner :: IO String -> ReaderT ConnectInfo IO Property -> IO Property
runner io p = do
  dbIp <- io
  let connInfo = defaultConnectInfo {
    connectUser     = "postgres"
  , connectPassword = "mysecretpassword"
  , connectDatabase = "postgres"
  , connectPort     = 5432
  , connectHost     = dbIp
  }
  bracket (withConnection connInfo setupTable)
          (const (withConnection connInfo teardown))
          (const (runReaderT p connInfo))
runner :: IO String -> ReaderT ConnectInfo IO Property -> IO Property
runner io p = do
  dbIp <- io
  let connInfo = defaultConnectInfo {
    connectUser     = "postgres"
  , connectPassword = "mysecretpassword"
  , connectDatabase = "postgres"
  , connectPort     = 5432
  , connectHost     = dbIp
  }
  bracket (withConnection connInfo setupTable)
          (const (withConnection connInfo teardown))
          (const (runReaderT p connInfo))
runner io p = do
  dbIp <- io
  let connInfo = defaultConnectInfo {
    connectUser     = "postgres"
  , connectPassword = "mysecretpassword"
  , connectDatabase = "postgres"
  , connectPort     = 5432
  , connectHost     = dbIp
  }
  bracket (withConnection connInfo setupTable)
          (const (withConnection connInfo teardown))
          (const (runReaderT p connInfo))