{-# 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])
extract =  Restrict.extract . extractAssignments