{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
module PostgreSQL.Query.Class
( Query (..)
, Executable (..)
)
where
import Data.Kind (Type)
import qualified PostgreSQL.Result as Result
import qualified PostgreSQL.Statement as Statement
class Monad query => Query query where
type NativeResult query :: Type
executeStatement
:: Statement.Statement a
-> a
-> query (NativeResult query)
executePreparedStatement
:: Statement.PreparedStatement a
-> a
-> query (NativeResult query)
withPreparedStatement
:: Statement.Statement a
-> (Statement.PreparedStatement a -> query r)
-> query r
processResult
:: NativeResult query
-> Result.Result a
-> query a
class Executable statement where
execute
:: Query query
=> statement param
-> param
-> query (NativeResult query)
instance Executable Statement.Statement where
execute :: Statement param -> param -> query (NativeResult query)
execute = Statement param -> param -> query (NativeResult query)
forall (query :: * -> *) a.
Query query =>
Statement a -> a -> query (NativeResult query)
executeStatement
{-# INLINE execute #-}
instance Executable Statement.PreparedStatement where
execute :: PreparedStatement param -> param -> query (NativeResult query)
execute = PreparedStatement param -> param -> query (NativeResult query)
forall (query :: * -> *) a.
Query query =>
PreparedStatement a -> a -> query (NativeResult query)
executePreparedStatement
{-# INLINE execute #-}