module Database.Relational.Query.Monad.Trans.JoinState (
JoinContext, primeJoinContext, updateProduct, joinProduct
) where
import Prelude hiding (product)
import Data.DList (toList)
import Database.Relational.Query.Internal.Sub (ProductBuilder, JoinProduct)
import qualified Database.Relational.Query.Internal.Sub as Product
newtype JoinContext =
JoinContext
{ product :: Maybe ProductBuilder
}
primeJoinContext :: JoinContext
primeJoinContext = JoinContext Nothing
updateProduct :: (Maybe ProductBuilder -> ProductBuilder) -> JoinContext -> JoinContext
updateProduct uf ctx = ctx { product = Just . uf . product $ ctx }
joinProduct :: JoinContext -> JoinProduct
joinProduct = fmap (fmap toList . Product.nodeTree) . product