on master help sign in
Remove bind*Table
421fe3fShane O'Brien
src/Rel8.hs−3
@@ -56,7 +56,6 @@ module Rel8
56 , isNothingTable, isJustTable
56 , isNothingTable, isJustTable
57 , optional
57 , optional
58 , catMaybeTable
58 , catMaybeTable
59− , bindMaybeTable
60 , traverseMaybeTable
59 , traverseMaybeTable
61 , nameMaybeTable
60 , nameMaybeTable
62
61
@@ -66,7 +65,6 @@ module Rel8
66 , isLeftTable, isRightTable
65 , isLeftTable, isRightTable
67 , keepLeftTable
66 , keepLeftTable
68 , keepRightTable
67 , keepRightTable
69− , bindEitherTable
70 , bitraverseEitherTable
68 , bitraverseEitherTable
71 , nameEitherTable
69 , nameEitherTable
72
70
@@ -82,7 +80,6 @@ module Rel8
82 , keepThisTable, loseThisTable
80 , keepThisTable, loseThisTable
83 , keepThatTable, loseThatTable
81 , keepThatTable, loseThatTable
84 , keepThoseTable, loseThoseTable
82 , keepThoseTable, loseThoseTable
85− , bindTheseTable
86 , bitraverseTheseTable
83 , bitraverseTheseTable
87 , nameTheseTable
84 , nameTheseTable
88
85
src/Rel8/Query/Either.hs−16
@@ -3,23 +3,18 @@
3module Rel8.Query.Either
3module Rel8.Query.Either
4 ( keepLeftTable
4 ( keepLeftTable
5 , keepRightTable
5 , keepRightTable
6− , bindEitherTable
7 , bitraverseEitherTable
6 , bitraverseEitherTable
8 )
7 )
9where
8where
10
9
11-- base
10-- base
12−import Data.Functor ( (<&>) )
13import Prelude
11import Prelude
14
12
15-- rel8
13-- rel8
16−import Rel8.Expr ( Expr )
17import Rel8.Expr.Eq ( (==.) )
14import Rel8.Expr.Eq ( (==.) )
18import Rel8.Query ( Query )
15import Rel8.Query ( Query )
19import Rel8.Query.Filter ( where_ )
16import Rel8.Query.Filter ( where_ )
20import Rel8.Query.Maybe ( optional )
17import Rel8.Query.Maybe ( optional )
21−import Rel8.Table ( Table )
22−import Rel8.Table.Bool ( bool )
23import Rel8.Table.Either
18import Rel8.Table.Either
24 ( EitherTable( EitherTable )
19 ( EitherTable( EitherTable )
25 , isLeftTable, isRightTable
20 , isLeftTable, isRightTable
@@ -41,17 +36,6 @@ keepRightTable e@(EitherTable _ _ b) = do
41 pure b
36 pure b
42
37
43
38
44−-- | Extend an 'EitherTable' with a 'Query' if it's a 'rightTable'. If the
45−-- @EitherTable@ is a 'leftTable', the original value is preserved.
46−--
47−-- This is like the '>>=' implementation for @ExceptT@.
48−bindEitherTable :: (Table Expr a, Functor m)
49− => (i -> m (EitherTable a b)) -> EitherTable a i -> m (EitherTable a b)
50−bindEitherTable query e@(EitherTable input a i) = do
51− query i <&> \(EitherTable output a' b) ->
52− EitherTable (input <> output) (bool a a' (isRightTable e)) b
53−
54−
55-- | @bitraverseEitherTable f g x@ will pass all @leftTable@s through @f@ and
39-- | @bitraverseEitherTable f g x@ will pass all @leftTable@s through @f@ and
56-- all @rightTable@s through @g@. The results are then lifted back into
40-- all @rightTable@s through @g@. The results are then lifted back into
57-- @leftTable@ and @rightTable@, respectively. This is similar to 'bitraverse'
41-- @leftTable@ and @rightTable@, respectively. This is similar to 'bitraverse'
src/Rel8/Query/Maybe.hs−15
@@ -1,13 +1,11 @@
1module Rel8.Query.Maybe
1module Rel8.Query.Maybe
2 ( optional
2 ( optional
3 , catMaybeTable
3 , catMaybeTable
4− , bindMaybeTable
5 , traverseMaybeTable
4 , traverseMaybeTable
6 )
5 )
7where
6where
8
7
9-- base
8-- base
10−import Data.Functor ( (<&>) )
11import Prelude
9import Prelude
12
10
13-- opaleye
11-- opaleye
@@ -59,19 +57,6 @@ catMaybeTable ma@(MaybeTable _ a) = do
59 pure a
57 pure a
60
58
61
59
62−-- | @bindMaybeTable f x@ is similar to the monadic bind (@>>=@) operation. It
63−-- allows you to "extend" an optional query with another query. If either the
64−-- input or output are 'Rel8.nothingTable', then the result is
65−-- 'Rel8.nothingTable'.
66−--
67−-- This is similar to 'traverseMaybeTable', followed by a @join@ on the
68−-- resulting @MaybeTable@s.
69−bindMaybeTable :: Functor m
70− => (a -> m (MaybeTable b)) -> MaybeTable a -> m (MaybeTable b)
71−bindMaybeTable query (MaybeTable input a) =
72− query a <&> \(MaybeTable output b) -> MaybeTable (input <> output) b
73−
74−
75-- | Extend an optional query with another query. This is useful if you want
60-- | Extend an optional query with another query. This is useful if you want
76-- to step through multiple @LEFT JOINs@.
61-- to step through multiple @LEFT JOINs@.
77--
62--
src/Rel8/Query/These.hs+2−9
@@ -7,13 +7,11 @@ module Rel8.Query.These
7 , keepThisTable, loseThisTable
7 , keepThisTable, loseThisTable
8 , keepThatTable, loseThatTable
8 , keepThatTable, loseThatTable
9 , keepThoseTable, loseThoseTable
9 , keepThoseTable, loseThoseTable
10− , bindTheseTable
11 , bitraverseTheseTable
10 , bitraverseTheseTable
12 )
11 )
13where
12where
14
13
15-- base
14-- base
16−import Data.Functor ( (<&>) )
17import Prelude
15import Prelude
18
16
19-- opaleye
17-- opaleye
@@ -57,10 +55,12 @@ alignBy condition as bs =
57 on = toColumn . toPrimExpr . uncurry condition
55 on = toColumn . toPrimExpr . uncurry condition
58
56
59
57
58+-- | Filter 'TheseTable's, keeping only 'thisTable's and 'thoseTable's.
60keepHereTable :: TheseTable a b -> Query (a, MaybeTable b)
59keepHereTable :: TheseTable a b -> Query (a, MaybeTable b)
61keepHereTable = loseThatTable
60keepHereTable = loseThatTable
62
61
63
62
63+-- | Filter 'TheseTable's, keeping on
64loseHereTable :: TheseTable a b -> Query b
64loseHereTable :: TheseTable a b -> Query b
65loseHereTable = keepThatTable
65loseHereTable = keepThatTable
66
66
@@ -112,13 +112,6 @@ loseThoseTable t@(TheseTable (MaybeTable _ a) (MaybeTable _ b)) = do
112 result = (mempty `asTypeOf` result) {expr = tag}
112 result = (mempty `asTypeOf` result) {expr = tag}
113
113
114
114
115−bindTheseTable :: (Table Expr a, Semigroup a, Functor m)
116− => (i -> m (TheseTable a b)) -> TheseTable a i -> m (TheseTable a b)
117−bindTheseTable query (TheseTable here (MaybeTable input i)) =
118− query i <&> \(TheseTable here' (MaybeTable output b)) ->
119− TheseTable (here <> here') (MaybeTable (input <> output) b)
120−
121−
122bitraverseTheseTable :: ()
115bitraverseTheseTable :: ()
123 => (a -> Query c)
116 => (a -> Query c)
124 -> (b -> Query d)
117 -> (b -> Query d)
src/Rel8/Table/Maybe.hs+1−2
@@ -101,8 +101,7 @@ instance Bind MaybeTable where
101 MaybeTable tag' b -> MaybeTable (tag <> tag') b
101 MaybeTable tag' b -> MaybeTable (tag <> tag') b
102
102
103
103
104−-- | Has the same behavior as the @Monad@ instance for @Maybe@. See also:
104+-- | Has the same behavior as the @Monad@ instance for @Maybe@.
105−-- 'Rel8.bindMaybeTable'.
106instance Monad MaybeTable where
105instance Monad MaybeTable where
107 (>>=) = (>>-)
106 (>>=) = (>>-)
108
107