on da76712 help sign in
rel8/src/Rel8/Query/Null.hs
38 lines 897 B history raw
1{-# language FlexibleContexts #-}
3module Rel8.Query.Null
4 ( catNull
5 , catNullTable
6 )
7where
9-- base
10import Prelude
12-- rel8
13import Rel8.Expr ( Expr )
14import Rel8.Expr.Null ( isNonNull, unsafeUnnullify )
15import Rel8.Table ( Table )
16import Rel8.Table.Null ( NullTable, isNonNullTable, unsafeUnnullifyTable )
17import Rel8.Query ( Query )
18import Rel8.Query.Filter ( where_ )
21-- | Filter a 'Query' that might return @null@ to a 'Query' without any
22-- @null@s.
23--
24-- Corresponds to 'Data.Maybe.catMaybes'.
25catNull :: Expr (Maybe a) -> Query (Expr a)
26catNull a = do
27 where_ $ isNonNull a
28 pure $ unsafeUnnullify a
31-- | Filter a 'Query' that might return @nullTable@ to a 'Query' without any
32-- @nullTable@s.
33--
34-- Corresponds to 'Data.Maybe.catMaybes'.
35catNullTable :: Table Expr a => NullTable Expr a -> Query a
36catNullTable a = do
37 where_ $ isNonNullTable a
38 pure $ unsafeUnnullifyTable a