{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Database.Relational.Monad.Assign (
Assign, AssignStatement,
extract,
) where
import Database.Relational.Internal.Config (Config)
import Database.Relational.Internal.ContextType (Flat)
import Database.Relational.SqlSyntax
(Predicate, Record, Assignment)
import Database.Relational.Table (Table)
import Database.Relational.Monad.Restrict (Restrict)
import qualified Database.Relational.Monad.Restrict as Restrict
import Database.Relational.Monad.Trans.Assigning (Assignings, extractAssignments)
type Assign r = Assignings r Restrict
type AssignStatement r a = Record Flat r -> Assign r a
extract :: Assign r a -> Config -> ((a, Table r -> [Assignment]), [Predicate Flat])
= forall a. Restrict a -> Config -> (a, [Predicate Flat])
Restrict.extract forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *) r a.
(Monad m, Functor m) =>
Assignings r m a -> m (a, Table r -> [Assignment])
extractAssignments