{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Database.Relational.Monad.Restrict (
Restrict, RestrictedStatement,
extract
) where
import Database.Relational.Internal.ContextType (Flat)
import Database.Relational.Internal.Config (Config)
import Database.Relational.SqlSyntax (Predicate, Record)
import Database.Relational.Monad.Trans.Restricting
(Restrictings, extractRestrict)
import Database.Relational.Monad.BaseType (ConfigureQuery, configureQuery)
type Restrict = Restrictings Flat ConfigureQuery
type RestrictedStatement r a = Record Flat r -> Restrict a
extract :: Restrict a -> Config -> (a, [Predicate Flat])
= forall q. ConfigureQuery q -> Config -> q
configureQuery forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) c a.
(Monad m, Functor m) =>
Restrictings c m a -> m (a, [Predicate c])
extractRestrict