opaleye-0.5.1.0: src/Opaleye/Distinct.hs
{-# LANGUAGE FlexibleContexts #-}
module Opaleye.Distinct (module Opaleye.Distinct, distinctExplicit)
where
import Opaleye.QueryArr (Query)
import Opaleye.Internal.Distinct (distinctExplicit, Distinctspec)
import qualified Data.Profunctor.Product.Default as D
-- | Remove duplicate rows from the 'Query'.
--
-- Example type specialization:
--
-- @
-- distinct :: Query (Column a, Column b) -> Query (Column a, Column b)
-- @
--
-- Assuming the @makeAdaptorAndInstance@ splice has been run for the product type @Foo@:
--
-- @
-- distinct :: Query (Foo (Column a) (Column b) (Column c)) -> Query (Foo (Column a) (Column b) (Column c))
-- @
--
-- By design there is no @distinct@ function of type @QueryArr a b ->
-- QueryArr a b@. Such a function would allow violation of SQL's
-- scoping rules and lead to invalid queries.
distinct :: D.Default Distinctspec columns columns =>
Query columns -> Query columns
distinct = distinctExplicit D.def