packages feed

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