hipsql-tx-simple-0.0.0.0: library/Hipsql/Tx/Simple.hs
-- | Hipsql interop for @postgresql-tx-simple@.
--
-- N.B. The 'MonadHipsql' instance for 'TxM' is derived by defining
-- a 'MonadHipsqlAdapter' instance and importing the orphan from
-- "Hipsql.Server.Adapter".
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Hipsql.Tx.Simple
( hipsql
) where
import Database.PostgreSQL.Tx (TxEnv, TxM, askTxEnv)
import Database.PostgreSQL.Tx.Unsafe (unsafeRunIOInTxM)
import Hipsql.Monad (MonadHipsql(hipsql), MonadHipsqlAdapter(hipsqlAcquireLibPQ))
import Hipsql.Server.Adapter ()
import qualified Database.PostgreSQL.Simple as Simple
import qualified Database.PostgreSQL.Simple.Internal as Simple.Internal
instance (TxEnv Simple.Connection r) => MonadHipsqlAdapter (TxM r) where
hipsqlAcquireLibPQ f = do
conn <- askTxEnv
unsafeRunIOInTxM $ Simple.Internal.withConnection conn f