{-# LANGUAGE MultiParamTypeClasses, FlexibleContexts #-}
module Opaleye.Binary where
import qualified Opaleye.Internal.Binary as B
import qualified Opaleye.Internal.PrimQuery as PQ
import qualified Opaleye.Select as S
import Data.Profunctor.Product.Default (Default, def)
unionAll :: Default B.Binaryspec fields fields =>
S.Select fields -> S.Select fields -> S.Select fields
unionAll = unionAllExplicit def
union :: Default B.Binaryspec fields fields =>
S.Select fields -> S.Select fields -> S.Select fields
union = unionExplicit def
intersectAll :: Default B.Binaryspec fields fields =>
S.Select fields -> S.Select fields -> S.Select fields
intersectAll = intersectAllExplicit def
intersect :: Default B.Binaryspec fields fields =>
S.Select fields -> S.Select fields -> S.Select fields
intersect = intersectExplicit def
exceptAll :: Default B.Binaryspec fields fields =>
S.Select fields -> S.Select fields -> S.Select fields
exceptAll = exceptAllExplicit def
except :: Default B.Binaryspec fields fields =>
S.Select fields -> S.Select fields -> S.Select fields
except = exceptExplicit def
unionAllExplicit :: B.Binaryspec fields fields'
-> S.Select fields -> S.Select fields -> S.Select fields'
unionAllExplicit = B.sameTypeBinOpHelper PQ.UnionAll
unionExplicit :: B.Binaryspec fields fields'
-> S.Select fields -> S.Select fields -> S.Select fields'
unionExplicit = B.sameTypeBinOpHelper PQ.Union
intersectAllExplicit :: B.Binaryspec fields fields'
-> S.Select fields -> S.Select fields -> S.Select fields'
intersectAllExplicit = B.sameTypeBinOpHelper PQ.IntersectAll
intersectExplicit :: B.Binaryspec fields fields'
-> S.Select fields -> S.Select fields -> S.Select fields'
intersectExplicit = B.sameTypeBinOpHelper PQ.Intersect
exceptAllExplicit :: B.Binaryspec fields fields'
-> S.Select fields -> S.Select fields -> S.Select fields'
exceptAllExplicit = B.sameTypeBinOpHelper PQ.ExceptAll
exceptExplicit :: B.Binaryspec fields fields'
-> S.Select fields -> S.Select fields -> S.Select fields'
exceptExplicit = B.sameTypeBinOpHelper PQ.Except