mirror of
https://github.com/nikita-volkov/hasql.git
synced 2024-12-27 12:35:50 +03:00
48 lines
1.1 KiB
Haskell
48 lines
1.1 KiB
Haskell
module Main.DSL
|
|
(
|
|
Session,
|
|
SessionError(..),
|
|
session,
|
|
Hasql.Session.statement,
|
|
Hasql.Session.sql,
|
|
)
|
|
where
|
|
|
|
import Main.Prelude
|
|
import qualified Hasql.Connection as HC
|
|
import qualified Hasql.Statement as HQ
|
|
import qualified Hasql.Encoders as HE
|
|
import qualified Hasql.Decoders as HD
|
|
import qualified Hasql.Session
|
|
|
|
|
|
type Session =
|
|
Hasql.Session.Session
|
|
|
|
data SessionError =
|
|
ConnectionError (HC.ConnectionError) |
|
|
SessionError (Hasql.Session.QueryError)
|
|
deriving (Show, Eq)
|
|
|
|
session :: Session a -> IO (Either SessionError a)
|
|
session session =
|
|
runExceptT $ acquire >>= \connection -> use connection <* release connection
|
|
where
|
|
acquire =
|
|
ExceptT $ fmap (mapLeft ConnectionError) $ HC.acquire settings
|
|
where
|
|
settings =
|
|
HC.settings host port user password database
|
|
where
|
|
host = "localhost"
|
|
port = 5432
|
|
user = "postgres"
|
|
password = ""
|
|
database = "postgres"
|
|
use connection =
|
|
ExceptT $
|
|
fmap (mapLeft SessionError) $
|
|
Hasql.Session.run session connection
|
|
release connection =
|
|
lift $ HC.release connection
|