packages feed

hasql-cursor-query-0.4.5.3: tasty/Main/IO.hs

module Main.IO where

import qualified Hasql.Connection as B
import qualified Hasql.Connection.Setting as Setting
import qualified Hasql.Connection.Setting.Connection as Connection
import qualified Hasql.Connection.Setting.Connection.Param as Param
import qualified Hasql.Session as A
import Rebase.Prelude

session :: A.Session a -> IO a
session session =
  withConnection (A.run session)
    >>= either (fail . show) (either (fail . show) return)
  where
    withConnection :: (B.Connection -> IO a) -> IO (Either B.ConnectionError a)
    withConnection handler =
      runExceptT $ acquire >>= \connection -> use connection <* release connection
      where
        acquire =
          ExceptT $ B.acquire settings
          where
            settings =
              [ Setting.connection
                  ( Connection.params
                      [ Param.host "localhost",
                        Param.port 5432,
                        Param.user "postgres",
                        Param.password "postgres",
                        Param.dbname "postgres"
                      ]
                  )
              ]
        use connection =
          lift $ handler connection
        release connection =
          lift $ B.release connection