on master help sign in
Remove Opaque constraint synonyms
commit593e21b2dff613567a5ecf2ae72d5fb05feff019 authorShane O'Brien <shane.obrien@circuithub.com> dateWed 7 Apr 2021, 21:39 (6 years ago) parent84845f0
37 files changed+133−335
rel8.cabal−2 src/Rel8/Aggregate.hs−2 src/Rel8/Aggregate/Legacy.hs−1 src/Rel8/Expr.hs−1 src/Rel8/Expr/Aggregate.hs−1 src/Rel8/Expr/Eq.hs−1 src/Rel8/Expr/Opaleye.hs−2 src/Rel8/Expr/Ord.hs−1 src/Rel8/Opaque.hs−15 src/Rel8/Query.hs−1 src/Rel8/Query/Each.hs+1 src/Rel8/Schema/Context/Nullify.hs−2 src/Rel8/Schema/HTable/Label.hs−2 src/Rel8/Schema/HTable/Nullify.hs−3 src/Rel8/Schema/HTable/Vectorize.hs+4−6 src/Rel8/Schema/Insert.hs−4 src/Rel8/Schema/Name.hs−4 src/Rel8/Schema/Nullability.hs+117−8 src/Rel8/Schema/Nullability/Internal.hs−136 src/Rel8/Statement/Select.hs+1 src/Rel8/Statement/View.hs+1 src/Rel8/Table.hs−18 src/Rel8/Table/Aggregate.hs−1 src/Rel8/Table/Eq.hs−2 src/Rel8/Table/Lifted.hs−1 src/Rel8/Table/Ord.hs−1 src/Rel8/Table/Order.hs−1 src/Rel8/Table/Recontextualize.hs−44 src/Rel8/Table/Serialize.hs−1 src/Rel8/Type.hs+3−14 src/Rel8/Type/Eq.hs+2−7 src/Rel8/Type/Monoid.hs+1−8 src/Rel8/Type/Num.hs−13 src/Rel8/Type/Ord.hs+2−15 src/Rel8/Type/Semigroup.hs+1−7 src/Rel8/Type/String.hs−5 src/Rel8/Type/Sum.hs−5
rel8.cabal−2
@@ -114,7 +114,6 @@ library
114114 Rel8.Schema.Kind
115115 Rel8.Schema.Name
116116 Rel8.Schema.Nullability
117− Rel8.Schema.Nullability.Internal
118117 Rel8.Schema.Spec
119118 Rel8.Schema.Spec.ConstrainDBType
120119 Rel8.Schema.Spec.ConstrainType
@@ -164,7 +163,6 @@ library
164163 Rel8.Type.Sum
165164 Rel8.Type.Tag
166165
167− Rel8.Opaque
168166 Rel8.Schema.Structure
169167
170168test-suite tests
src/Rel8/Aggregate.hs−2
@@ -32,7 +32,6 @@ import qualified Opaleye.Internal.PackMap as Opaleye
3232
3333-- rel8
3434import Rel8.Expr ( Expr, Col(..) )
35−import Rel8.Opaque ( Opaque )
3635import Rel8.Schema.Context ( Interpretation(..) )
3736import Rel8.Schema.Context.Label ( Labelable(..) )
3837import Rel8.Schema.HTable ( hfield, htabulate, htabulateA, hspecs )
@@ -114,7 +113,6 @@ instance Labelable Aggregate where
114113type Aggregates :: Type -> Type -> Constraint
115114class Recontextualize Aggregate Expr aggregates exprs => Aggregates aggregates exprs
116115instance Recontextualize Aggregate Expr aggregates exprs => Aggregates aggregates exprs
117−instance {-# OVERLAPPING #-} Aggregates (Opaque Aggregate Opaque) (Opaque Expr Opaque)
118116
119117
120118foldInputs :: Monoid b
src/Rel8/Aggregate/Legacy.hs−1
@@ -1,5 +1,4 @@
11{-# language FlexibleContexts #-}
2−{-# language NamedFieldPuns #-}
32{-# language ScopedTypeVariables #-}
43{-# language TypeApplications #-}
54{-# language TypeFamilies #-}
src/Rel8/Expr.hs−1
@@ -3,7 +3,6 @@
33{-# language FlexibleInstances #-}
44{-# language GADTs #-}
55{-# language MultiParamTypeClasses #-}
6−{-# language NamedFieldPuns #-}
76{-# language RoleAnnotations #-}
87{-# language ScopedTypeVariables #-}
98{-# language StandaloneKindSignatures #-}
src/Rel8/Expr/Aggregate.hs−1
@@ -1,7 +1,6 @@
11{-# language DataKinds #-}
22{-# language FlexibleContexts #-}
33{-# language ScopedTypeVariables #-}
4−{-# language TypeApplications #-}
54{-# language TypeFamilies #-}
65
76{-# options_ghc -fno-warn-redundant-constraints #-}
src/Rel8/Expr/Eq.hs−1
@@ -1,6 +1,5 @@
11{-# language FlexibleContexts #-}
22{-# language GADTs #-}
3−{-# language LambdaCase #-}
43{-# language ScopedTypeVariables #-}
54{-# language TypeApplications #-}
65{-# language ViewPatterns #-}
src/Rel8/Expr/Opaleye.hs−2
@@ -1,8 +1,6 @@
11{-# language FlexibleContexts #-}
2−{-# language LambdaCase #-}
32{-# language NamedFieldPuns #-}
43{-# language ScopedTypeVariables #-}
5−{-# language TypeApplications #-}
64{-# language TypeFamilies #-}
75
86{-# options_ghc -fno-warn-redundant-constraints #-}
src/Rel8/Expr/Ord.hs−1
@@ -1,6 +1,5 @@
11{-# language DataKinds #-}
22{-# language FlexibleContexts #-}
3−{-# language LambdaCase #-}
43{-# language GADTs #-}
54{-# language ScopedTypeVariables #-}
65{-# language TypeApplications #-}
src/Rel8/Opaque.hsdeleted−15
@@ -1,15 +0,0 @@
1−{-# language PolyKinds #-}
2−{-# language StandaloneKindSignatures #-}
3−{-# language TypeFamilies #-}
4−
5−module Rel8.Opaque
6− ( Opaque
7− )
8−where
9−
10−-- base
11−import Prelude ()
12−
13−
14−type Opaque :: k
15−data family Opaque :: k
src/Rel8/Query.hs−1
@@ -1,4 +1,3 @@
1−{-# language DerivingStrategies #-}
21{-# language DerivingVia #-}
32{-# language GeneralizedNewtypeDeriving #-}
43{-# language StandaloneKindSignatures #-}
src/Rel8/Query/Each.hs+1
@@ -1,4 +1,5 @@
11{-# language FlexibleContexts #-}
2+{-# language MonoLocalBinds #-}
23
34module Rel8.Query.Each
45 ( each
src/Rel8/Schema/Context/Nullify.hs−2
@@ -2,12 +2,10 @@
22{-# language FlexibleContexts #-}
33{-# language FlexibleInstances #-}
44{-# language InstanceSigs #-}
5−{-# language LambdaCase #-}
65{-# language MultiParamTypeClasses #-}
76{-# language NamedFieldPuns #-}
87{-# language ScopedTypeVariables #-}
98{-# language StandaloneKindSignatures #-}
10−{-# language TypeApplications #-}
119{-# language TypeFamilies #-}
1210
1311module Rel8.Schema.Context.Nullify
src/Rel8/Schema/HTable/Label.hs−2
@@ -6,14 +6,12 @@
66{-# language DataKinds #-}
77{-# language FlexibleInstances #-}
88{-# language GADTs #-}
9−{-# language InstanceSigs #-}
109{-# language MultiParamTypeClasses #-}
1110{-# language QuantifiedConstraints #-}
1211{-# language RankNTypes #-}
1312{-# language RecordWildCards #-}
1413{-# language ScopedTypeVariables #-}
1514{-# language StandaloneKindSignatures #-}
16−{-# language TypeApplications #-}
1715{-# language TypeFamilies #-}
1816{-# language TypeOperators #-}
1917{-# language UndecidableInstances #-}
src/Rel8/Schema/HTable/Nullify.hs−3
@@ -7,14 +7,11 @@
77{-# language DataKinds #-}
88{-# language FlexibleInstances #-}
99{-# language GADTs #-}
10−{-# language InstanceSigs #-}
1110{-# language MultiParamTypeClasses #-}
1211{-# language QuantifiedConstraints #-}
1312{-# language RankNTypes #-}
14−{-# language RecordWildCards #-}
1513{-# language ScopedTypeVariables #-}
1614{-# language StandaloneKindSignatures #-}
17−{-# language TypeApplications #-}
1815{-# language TypeFamilies #-}
1916{-# language UndecidableInstances #-}
2017
src/Rel8/Schema/HTable/Vectorize.hs+4−6
@@ -1,14 +1,13 @@
1−{-# LANGUAGE DeriveAnyClass #-}
2−{-# LANGUAGE DeriveGeneric #-}
3−{-# LANGUAGE DerivingStrategies #-}
4−{-# LANGUAGE LambdaCase #-}
51{-# language AllowAmbiguousTypes #-}
62{-# language ConstraintKinds #-}
73{-# language DataKinds #-}
4+{-# language DeriveAnyClass #-}
5+{-# language DeriveGeneric #-}
6+{-# language DerivingStrategies #-}
87{-# language FlexibleContexts #-}
98{-# language FlexibleInstances #-}
109{-# language GADTs #-}
11−{-# language InstanceSigs #-}
10+{-# language LambdaCase #-}
1211{-# language MultiParamTypeClasses #-}
1312{-# language NamedFieldPuns #-}
1413{-# language QuantifiedConstraints #-}
@@ -18,7 +17,6 @@
1817{-# language StandaloneKindSignatures #-}
1918{-# language TypeApplications #-}
2019{-# language TypeFamilies #-}
21−{-# language TypeOperators #-}
2220{-# language UndecidableInstances #-}
2321
2422module Rel8.Schema.HTable.Vectorize
src/Rel8/Schema/Insert.hs−4
@@ -6,9 +6,7 @@
66{-# language LambdaCase #-}
77{-# language MultiParamTypeClasses #-}
88{-# language NamedFieldPuns #-}
9−{-# language ScopedTypeVariables #-}
109{-# language StandaloneKindSignatures #-}
11−{-# language TypeApplications #-}
1210{-# language TypeFamilies #-}
1311{-# language UndecidableInstances #-}
1412{-# language UndecidableSuperClasses #-}
@@ -31,7 +29,6 @@ import Prelude
3129import Rel8.Aggregate ( Aggregate )
3230import Rel8.Expr ( Expr )
3331import Rel8.Kind.Necessity ( Necessity(Optional, Required) )
34−import Rel8.Opaque ( Opaque )
3532import Rel8.Schema.Context ( Interpretation(..) )
3633import Rel8.Schema.Context.Label ( Labelable(..) )
3734import Rel8.Schema.Context.Nullify
@@ -161,4 +158,3 @@ instance Nullifiable Insert where
161158type Inserts :: Type -> Type -> Constraint
162159class Recontextualize Expr Insert exprs inserts => Inserts exprs inserts
163160instance Recontextualize Expr Insert exprs inserts => Inserts exprs inserts
164−instance {-# OVERLAPPING #-} Inserts (Opaque Expr Opaque) (Opaque Insert Opaque)
src/Rel8/Schema/Name.hs−4
@@ -5,9 +5,7 @@
55{-# language GeneralizedNewtypeDeriving #-}
66{-# language MultiParamTypeClasses #-}
77{-# language RankNTypes #-}
8−{-# language ScopedTypeVariables #-}
98{-# language StandaloneKindSignatures #-}
10−{-# language TypeApplications #-}
119{-# language TypeFamilies #-}
1210{-# language UndecidableInstances #-}
1311{-# language UndecidableSuperClasses #-}
@@ -27,7 +25,6 @@ import Prelude
2725
2826-- rel8
2927import Rel8.Expr ( Expr )
30−import Rel8.Opaque ( Opaque )
3128import Rel8.Schema.Context ( Interpretation, Col )
3229import Rel8.Schema.Context.Label ( Labelable, labeler, unlabeler )
3330import Rel8.Schema.HTable.Type ( HType( HType ) )
@@ -85,4 +82,3 @@ instance Labelable Name where
8582type Selects :: Type -> Type -> Constraint
8683class Recontextualize Name Expr names exprs => Selects names exprs
8784instance Recontextualize Name Expr names exprs => Selects names exprs
88−instance {-# OVERLAPPING #-} Selects (Opaque Name Opaque) (Opaque Expr Opaque)
src/Rel8/Schema/Nullability.hs+117−8
@@ -1,22 +1,131 @@
11{-# language ConstraintKinds #-}
2+{-# language DataKinds #-}
3+{-# language FlexibleContexts #-}
24{-# language FlexibleInstances #-}
3−{-# language MonoLocalBinds #-}
5+{-# language GADTs #-}
46{-# language MultiParamTypeClasses #-}
7+{-# language RankNTypes #-}
8+{-# language StandaloneKindSignatures #-}
9+{-# language TypeFamilies #-}
510{-# language UndecidableInstances #-}
6−
7−{-# options_ghc -fno-warn-orphans #-}
11+{-# language UndecidableSuperClasses #-}
812
913module Rel8.Schema.Nullability
10− ( module Rel8.Schema.Nullability.Internal
14+ ( Nullify, Unnullify
15+ , NotNull
16+ , Homonullable
17+ , Nullability( Nullable, NonNullable )
18+ , HasNullability, nullabilization
19+ , Sql, fromSql, mapSql, toSql
1120 )
1221where
1322
1423-- base
15−import Prelude ()
24+import Data.Kind ( Constraint, Type )
25+import Prelude
1626
1727-- rel8
18−import Rel8.Opaque ( Opaque )
19−import Rel8.Schema.Nullability.Internal
28+import Rel8.Schema.Dict ( Dict( Dict ) )
29+
30+
31+type IsMaybe :: Type -> Bool
32+type family IsMaybe a where
33+ IsMaybe (Maybe _) = 'True
34+ IsMaybe _ = 'False
35+
36+
37+type Unnullify' :: Bool -> Type -> Type
38+type family Unnullify' isMaybe ma where
39+ Unnullify' 'False a = a
40+ Unnullify' 'True (Maybe a) = a
41+
42+
43+type Unnullify :: Type -> Type
44+type Unnullify a = Unnullify' (IsMaybe a) a
45+
46+
47+type Nullify' :: Bool -> Type -> Type
48+type family Nullify' isMaybe a where
49+ Nullify' 'False a = a
50+ Nullify' 'True a = Maybe a
51+
52+
53+type Nullify :: Type -> Type
54+type Nullify a = Maybe (Unnullify a)
55+
56+
57+-- | @nullify a@ means @a@ cannot take @null@ as a value.
58+type NotNull :: Type -> Constraint
59+class (HasNullability a, IsMaybe a ~ 'False) => NotNull a
60+instance (HasNullability a, IsMaybe a ~ 'False) => NotNull a
61+
62+
63+-- | @Homonullable a b@ means that both @a@ and @b@ can be @null@, or neither
64+-- @a@ or @b@ can be @null@.
65+type Homonullable :: Type -> Type -> Constraint
66+class IsMaybe a ~ IsMaybe b => Homonullable a b
67+instance IsMaybe a ~ IsMaybe b => Homonullable a b
68+
69+
70+type Nullability :: Type -> Type
71+data Nullability a where
72+ NonNullable :: NotNull a => Nullability a
73+ Nullable :: NotNull a => Nullability (Maybe a)
74+
75+
76+type HasNullability' :: Bool -> Type -> Constraint
77+class
78+ ( IsMaybe a ~ isMaybe
79+ , IsMaybe (Unnullify a) ~ 'False
80+ , Nullify' isMaybe (Unnullify a) ~ a
81+ ) => HasNullability' isMaybe a
82+ where
83+ nullabilization' :: Nullability a
84+
85+
86+instance IsMaybe a ~ 'False => HasNullability' 'False a where
87+ nullabilization' = NonNullable
88+
89+
90+instance IsMaybe a ~ 'False => HasNullability' 'True (Maybe a) where
91+ nullabilization' = Nullable
92+
93+
94+-- | @HasNullability a@ means that @rel8@ is able to check if the type @a@ is a
95+-- type that can take @null@ values or not.
96+type HasNullability :: Type -> Constraint
97+class HasNullability' (IsMaybe a) a => HasNullability a
98+instance HasNullability' (IsMaybe a) a => HasNullability a
99+
100+
101+nullabilization :: HasNullability a => Nullability a
102+nullabilization = nullabilization'
103+
104+
105+-- | The @Sql@ type class describes both null and not null database values,
106+-- constrained by a specific class.
107+--
108+-- For example, if you see @Sql DBEq a@, this means any database type that
109+-- supports equality, and @a@ can either be exactly an @a@, or it could also be
110+-- @Maybe a@.
111+type Sql :: (Type -> Constraint) -> Type -> Constraint
112+class (constraint (Unnullify a), HasNullability a) => Sql constraint a
113+instance (constraint (Unnullify a), HasNullability a) => Sql constraint a
114+
115+
116+fromSql :: Dict (Sql constraint) a -> (Nullability a, Dict constraint (Unnullify a))
117+fromSql Dict = (nullabilization, Dict)
118+{-# INLINABLE fromSql #-}
119+
120+
121+mapSql :: ()
122+ => (forall x. Dict constraint x -> Dict constraint' x)
123+ -> Dict (Sql constraint) a -> Dict (Sql constraint') a
124+mapSql f dict = case fromSql dict of
125+ (nullability, dict') -> toSql nullability (f dict')
20126
21127
22−instance {-# OVERLAPPING #-} (c Opaque, Sql c Opaque) => Sql c Opaque
128+toSql :: Nullability a -> Dict constraint (Unnullify a) -> Dict (Sql constraint) a
129+toSql NonNullable Dict = Dict
130+toSql Nullable Dict = Dict
131+{-# INLINABLE toSql #-}
src/Rel8/Schema/Nullability/Internal.hsdeleted−136
@@ -1,136 +0,0 @@
1−{-# language ConstraintKinds #-}
2−{-# language DataKinds #-}
3−{-# language FlexibleContexts #-}
4−{-# language FlexibleInstances #-}
5−{-# language FunctionalDependencies #-}
6−{-# language GADTs #-}
7−{-# language MultiParamTypeClasses #-}
8−{-# language RankNTypes #-}
9−{-# language StandaloneKindSignatures #-}
10−{-# language TypeFamilies #-}
11−{-# language UndecidableInstances #-}
12−{-# language UndecidableSuperClasses #-}
13−
14−module Rel8.Schema.Nullability.Internal
15− ( Nullify, Unnullify
16− , NotNull
17− , Homonullable
18− , Nullability( Nullable, NonNullable )
19− , HasNullability, nullabilization
20− , Sql, fromSql, mapSql, toSql
21− )
22−where
23−
24−-- base
25−import Data.Kind ( Constraint, Type )
26−import Prelude
27−
28−-- rel8
29−import Rel8.Opaque ( Opaque )
30−import Rel8.Schema.Dict ( Dict( Dict ) )
31−
32−
33−type IsMaybe :: Type -> Bool
34−type family IsMaybe a where
35− IsMaybe (Maybe _) = 'True
36− IsMaybe _ = 'False
37−
38−
39−type Unnullify' :: Bool -> Type -> Type
40−type family Unnullify' isMaybe ma where
41− Unnullify' 'False a = a
42− Unnullify' 'True (Maybe a) = a
43−
44−
45−type Unnullify :: Type -> Type
46−type Unnullify a = Unnullify' (IsMaybe a) a
47−
48−
49−type Nullify' :: Bool -> Type -> Type
50−type family Nullify' isMaybe a where
51− Nullify' 'False a = a
52− Nullify' 'True a = Maybe a
53−
54−
55−type Nullify :: Type -> Type
56−type Nullify a = Maybe (Unnullify a)
57−
58−
59−-- | @NotNull a@ means @a@ cannot take @null@ as a value.
60−type NotNull :: Type -> Constraint
61−class (HasNullability a, IsMaybe a ~ 'False) => NotNull a
62−instance (HasNullability a, IsMaybe a ~ 'False) => NotNull a
63−instance {-# OVERLAPPING #-} NotNull Opaque
64−
65−
66−-- | @Homonullable a b@ means that both @a@ and @b@ can be @null@, or neither
67−-- @a@ or @b@ can be @null@.
68−type Homonullable :: Type -> Type -> Constraint
69−class IsMaybe a ~ IsMaybe b => Homonullable a b
70−instance IsMaybe a ~ IsMaybe b => Homonullable a b
71−instance {-# OVERLAPPING #-} Homonullable Opaque Opaque
72−
73−
74−type Nullability :: Type -> Type
75−data Nullability a where
76− NonNullable :: NotNull a => Nullability a
77− Nullable :: NotNull a => Nullability (Maybe a)
78−
79−
80−type HasNullability' :: Bool -> Type -> Constraint
81−class
82− ( IsMaybe a ~ isMaybe
83− , IsMaybe (Unnullify a) ~ 'False
84− , Nullify' isMaybe (Unnullify a) ~ a
85− ) => HasNullability' isMaybe a
86− where
87− nullabilization' :: Nullability a
88−
89−
90−instance IsMaybe a ~ 'False => HasNullability' 'False a where
91− nullabilization' = NonNullable
92−
93−
94−instance IsMaybe a ~ 'False => HasNullability' 'True (Maybe a) where
95− nullabilization' = Nullable
96−
97−
98−-- | @HasNullability a@ means that @rel8@ is able to check if the type @a@ is a
99−-- type that can take @null@ values or not.
100−type HasNullability :: Type -> Constraint
101−class HasNullability' (IsMaybe a) a => HasNullability a
102−instance HasNullability' (IsMaybe a) a => HasNullability a
103−instance {-# OVERLAPPING #-} HasNullability Opaque
104−
105−
106−nullabilization :: HasNullability a => Nullability a
107−nullabilization = nullabilization'
108−
109−
110−-- | The @Sql@ type class describes both null and not null database values,
111−-- constrained by a specific class.
112−--
113−-- For example, if you see @Sql DBEq a@, this means any database type that
114−-- supports equality, and @a@ can either be exactly an @a@, or it could also be
115−-- @Maybe a@.
116−type Sql :: (Type -> Constraint) -> Type -> Constraint
117−class (constraint (Unnullify a), HasNullability a) => Sql constraint a
118−instance (constraint (Unnullify a), HasNullability a) => Sql constraint a
119−
120−
121−fromSql :: Dict (Sql constraint) a -> (Nullability a, Dict constraint (Unnullify a))
122−fromSql Dict = (nullabilization, Dict)
123−{-# INLINABLE fromSql #-}
124−
125−
126−mapSql :: ()
127− => (forall x. Dict constraint x -> Dict constraint' x)
128− -> Dict (Sql constraint) a -> Dict (Sql constraint') a
129−mapSql f dict = case fromSql dict of
130− (nullability, dict') -> toSql nullability (f dict')
131−
132−
133−toSql :: Nullability a -> Dict constraint (Unnullify a) -> Dict (Sql constraint) a
134−toSql NonNullable Dict = Dict
135−toSql Nullable Dict = Dict
136−{-# INLINABLE toSql #-}
src/Rel8/Statement/Select.hs+1
@@ -1,3 +1,4 @@
1+{-# language MonoLocalBinds #-}
12{-# language ScopedTypeVariables #-}
23{-# language TypeApplications #-}
34
src/Rel8/Statement/View.hs+1
@@ -1,4 +1,5 @@
11{-# language FlexibleContexts #-}
2+{-# language MonoLocalBinds #-}
23
34module Rel8.Statement.View
45 ( createView
src/Rel8/Table.hs−18
@@ -20,8 +20,6 @@ import Data.Kind ( Constraint, Type )
2020import Prelude
2121
2222-- rel8
23−import {-# SOURCE #-} Rel8.Expr ( Expr )
24−import Rel8.Opaque ( Opaque )
2523import Rel8.Schema.Context ( Col(..) )
2624import Rel8.Schema.Context.Label ( Labelable, labeler, unlabeler )
2725import Rel8.Schema.HTable ( HTable )
@@ -201,22 +199,6 @@ instance
201199 )
202200
203201
204−instance Table Expr Opaque where
205− type Columns Opaque = HType Opaque
206− type Context Opaque = Expr
207−
208− fromColumns = error "opaque"
209− toColumns = error "opaque"
210−
211−
212−instance Table context (Opaque context a) where
213− type Columns (Opaque context a) = HType Opaque
214− type Context (Opaque context a) = context
215−
216− fromColumns = error "opaque"
217− toColumns = error "opaque"
218−
219−
220202type Congruent :: Type -> Type -> Constraint
221203class Columns a ~ Columns b => Congruent a b
222204instance Columns a ~ Columns b => Congruent a b
src/Rel8/Table/Aggregate.hs−1
@@ -1,5 +1,4 @@
11{-# language FlexibleContexts #-}
2−{-# language NamedFieldPuns #-}
32{-# language ScopedTypeVariables #-}
43{-# language TypeApplications #-}
54{-# language TypeFamilies #-}
src/Rel8/Table/Eq.hs−2
@@ -5,8 +5,6 @@
55{-# language DisambiguateRecordFields #-}
66{-# language FlexibleContexts #-}
77{-# language FlexibleInstances #-}
8−{-# language LambdaCase #-}
9−{-# language NamedFieldPuns #-}
108{-# language ScopedTypeVariables #-}
119{-# language StandaloneKindSignatures #-}
1210{-# language TypeApplications #-}
src/Rel8/Table/Lifted.hs−1
@@ -1,4 +1,3 @@
1−{-# language ConstrainedClassMethods #-}
21{-# language ConstraintKinds #-}
32{-# language DataKinds #-}
43{-# language FlexibleContexts #-}
src/Rel8/Table/Ord.hs−1
@@ -3,7 +3,6 @@
33{-# language DefaultSignatures #-}
44{-# language DisambiguateRecordFields #-}
55{-# language FlexibleInstances #-}
6−{-# language NamedFieldPuns #-}
76{-# language ScopedTypeVariables #-}
87{-# language StandaloneKindSignatures #-}
98{-# language TypeApplications #-}
src/Rel8/Table/Order.hs−1
@@ -1,5 +1,4 @@
11{-# language DataKinds #-}
2−{-# language NamedFieldPuns #-}
32{-# language ScopedTypeVariables #-}
43{-# language TypeApplications #-}
54{-# language TypeFamilies #-}
src/Rel8/Table/Recontextualize.hs−44
@@ -17,13 +17,11 @@ import Data.Kind ( Constraint, Type )
1717import Prelude ()
1818
1919-- rel8
20−import Rel8.Opaque ( Opaque )
2120import Rel8.Schema.Context ( Col )
2221import Rel8.Schema.Context.Label ( Labelable )
2322import Rel8.Schema.HTable ( HTable )
2423import qualified Rel8.Schema.Kind as K
2524import Rel8.Schema.Nullability ( Sql )
26−import Rel8.Schema.Spec ( KnownSpec )
2725import Rel8.Table ( Table, Congruent )
2826import Rel8.Type ( DBType )
2927
@@ -43,51 +41,9 @@ class
4341 , b from -> a
4442
4543
46−instance KnownSpec spec =>
47− Recontextualize from to (Col from spec) (Col to spec)
48−
49−
50−{-
51−instance Sql DBType a =>
52− Recontextualize Aggregate Insertion (Aggregate (Expr a)) (Insertion a)
53−
54−
55−instance Sql DBType a => Recontextualize Expr Insertion (Expr a) (Insertion a)
56−-}
57−
58−
5944instance Sql DBType a => Recontextualize Identity Identity (Identity a) (Identity a)
6045
6146
62−{-
63−instance Sql DBType a =>
64− Recontextualize Identity Insertion (Identity a) (Insertion a)
65−
66−
67−instance Sql DBType a =>
68− Recontextualize Insertion Aggregate (Insertion a) (Aggregate (Expr a))
69−
70−
71−instance Sql DBType a => Recontextualize Insertion Expr (Insertion a) (Expr a)
72−
73−
74−instance Sql DBType a =>
75− Recontextualize Insertion Identity (Insertion a) (Identity a)
76−
77−
78−instance Sql DBType a => Recontextualize Insertion Insertion (Insertion a) (Insertion a)
79−
80−
81−instance Sql DBType a => Recontextualize Insertion Name (Insertion a) (Name a)
82−
83−
84−instance Sql DBType a => Recontextualize Name Insertion (Name a) (Insertion a)
85−-}
86−
87−
88−instance Recontextualize from to (Opaque from a) (Opaque to a)
89−
90−
9147instance HTable t => Recontextualize from to (t (Col from)) (t (Col to))
9248
9349
src/Rel8/Table/Serialize.hs−1
@@ -9,7 +9,6 @@
99{-# language StandaloneKindSignatures #-}
1010{-# language TypeApplications #-}
1111{-# language TypeFamilies #-}
12−{-# language ViewPatterns #-}
1312{-# language UndecidableInstances #-}
1413
1514module Rel8.Table.Serialize
src/Rel8/Type.hs+3−14
@@ -1,8 +1,6 @@
11{-# language FlexibleInstances #-}
2−{-# language MultiParamTypeClasses #-}
2+{-# language MonoLocalBinds #-}
33{-# language StandaloneKindSignatures #-}
4−{-# language TypeApplications #-}
5−{-# language UndecidableInstances #-}
64{-# language UndecidableInstances #-}
75
86module Rel8.Type
@@ -37,10 +35,9 @@ import qualified Opaleye.Internal.HaskellDB.PrimQuery as Opaleye
3735import qualified Opaleye.Internal.HaskellDB.Sql.Default as Opaleye ( quote )
3836
3937-- rel8
40−import Rel8.Opaque ( Opaque )
4138import Rel8.Schema.Nullability
42− ( NotNull, Unnullify
43− , HasNullability, nullabilization
39+ ( NotNull
40+ , nullabilization
4441 , Sql
4542 )
4643import Rel8.Type.Array ( listTypeInformation, nonEmptyTypeInformation )
@@ -283,11 +280,3 @@ instance Sql DBType a => DBType [a] where
283280
284281instance Sql DBType a => DBType (NonEmpty a) where
285282 typeInformation = nonEmptyTypeInformation nullabilization typeInformation
286−
287−
288−instance {-# OVERLAPPING #-} DBType Opaque where
289− typeInformation = error "opaque"
290−
291−
292−instance {-# INCOHERENT #-} (HasNullability a, DBType (Unnullify a)) =>
293− Sql DBType a
src/Rel8/Type/Eq.hs+2−7
@@ -1,5 +1,6 @@
11{-# language FlexibleContexts #-}
22{-# language FlexibleInstances #-}
3+{-# language MonoLocalBinds #-}
34{-# language MultiParamTypeClasses #-}
45{-# language StandaloneKindSignatures #-}
56{-# language UndecidableInstances #-}
@@ -26,8 +27,7 @@ import qualified Data.ByteString.Lazy as Lazy ( ByteString )
2627import Data.CaseInsensitive ( CI )
2728
2829-- rel8
29−import Rel8.Opaque ( Opaque )
30−import Rel8.Schema.Nullability ( Unnullify, HasNullability, Sql )
30+import Rel8.Schema.Nullability ( Sql )
3131import Rel8.Type ( DBType )
3232
3333-- scientific
@@ -76,8 +76,3 @@ instance DBEq UUID
7676instance DBEq Value
7777instance Sql DBEq a => DBEq [a]
7878instance Sql DBEq a => DBEq (NonEmpty a)
79−instance DBEq Opaque
80−
81−
82−instance {-# INCOHERENT #-} (HasNullability a, DBEq (Unnullify a)) =>
83− Sql DBEq a
src/Rel8/Type/Monoid.hs+1−8
@@ -27,10 +27,7 @@ import Data.CaseInsensitive ( CI )
2727import {-# SOURCE #-} Rel8.Expr ( Expr )
2828import Rel8.Expr.Array ( sempty )
2929import Rel8.Expr.Serialize ( litExpr )
30−import Rel8.Schema.Nullability
31− ( Unnullify
32− , Sql, HasNullability, nullabilization
33− )
30+import Rel8.Schema.Nullability ( Sql, nullabilization )
3431import Rel8.Type ( DBType, typeInformation )
3532import Rel8.Type.Semigroup ( DBSemigroup )
3633
@@ -80,7 +77,3 @@ instance DBMonoid ByteString where
8077
8178instance DBMonoid Lazy.ByteString where
8279 memptyExpr = litExpr ""
83−
84−
85−instance {-# INCOHERENT #-} (HasNullability a, DBMonoid (Unnullify a)) =>
86− Sql DBMonoid a
src/Rel8/Type/Num.hs−13
@@ -17,7 +17,6 @@ import Data.Kind ( Constraint, Type )
1717import Prelude
1818
1919-- rel8
20−import Rel8.Schema.Nullability ( HasNullability, Unnullify, Sql )
2120import Rel8.Type ( DBType )
2221
2322-- scientific
@@ -36,10 +35,6 @@ instance DBNum Double
3635instance DBNum Scientific
3736
3837
39−instance {-# INCOHERENT #-} (HasNullability a, DBNum (Unnullify a)) =>
40− Sql DBNum a
41−
42−
4338-- | The class of database types that can be coerced to from integral
4439-- expressions. This is a Rel8 concept, and allows us to provide
4540-- 'fromIntegral'.
@@ -50,16 +45,8 @@ instance DBIntegral Int32
5045instance DBIntegral Int64
5146
5247
53−instance {-# INCOHERENT #-} (HasNullability a, DBIntegral (Unnullify a)) =>
54− Sql DBIntegral a
55−
56−
5748-- | The class of database types that support the @/@ operator.
5849class DBNum a => DBFractional a
5950instance DBFractional Float
6051instance DBFractional Double
6152instance DBFractional Scientific
62−
63−
64−instance {-# INCOHERENT #-} (HasNullability a, DBFractional (Unnullify a)) =>
65− Sql DBFractional a
src/Rel8/Type/Ord.hs+2−15
@@ -1,5 +1,6 @@
11{-# language FlexibleContexts #-}
22{-# language FlexibleInstances #-}
3+{-# language MonoLocalBinds #-}
34{-# language MultiParamTypeClasses #-}
45{-# language StandaloneKindSignatures #-}
56{-# language UndecidableInstances #-}
@@ -24,8 +25,7 @@ import qualified Data.ByteString.Lazy as Lazy ( ByteString )
2425import Data.CaseInsensitive ( CI )
2526
2627-- rel8
27−import Rel8.Opaque ( Opaque )
28−import Rel8.Schema.Nullability ( Unnullify, Sql, HasNullability )
28+import Rel8.Schema.Nullability ( Sql )
2929import Rel8.Type.Eq ( DBEq )
3030
3131-- scientific
@@ -70,11 +70,6 @@ instance DBOrd Lazy.ByteString
7070instance DBOrd UUID
7171instance Sql DBOrd a => DBOrd [a]
7272instance Sql DBOrd a => DBOrd (NonEmpty a)
73−instance {-# OVERLAPPING #-} DBOrd Opaque
74−
75−
76−instance {-# INCOHERENT #-} (HasNullability a, DBOrd (Unnullify a)) =>
77− Sql DBOrd a
7873
7974
8075-- | The class of database types that support the @max@ aggregation function.
@@ -103,10 +98,6 @@ instance Sql DBMax a => DBMax [a]
10398instance Sql DBMax a => DBMax (NonEmpty a)
10499
105100
106−instance {-# INCOHERENT #-} (HasNullability a, DBMax (Unnullify a)) =>
107− Sql DBMax a
108−
109−
110101-- | The class of database types that support the @min@ aggregation function.
111102type DBMin :: Type -> Constraint
112103class DBOrd a => DBMin a
@@ -131,7 +122,3 @@ instance DBMin ByteString
131122instance DBMin Lazy.ByteString
132123instance Sql DBMin a => DBMin [a]
133124instance Sql DBMin a => DBMin (NonEmpty a)
134−
135−
136−instance {-# INCOHERENT #-} (HasNullability a, DBMin (Unnullify a)) =>
137− Sql DBMin a
src/Rel8/Type/Semigroup.hs+1−7
@@ -2,9 +2,7 @@
22{-# language FlexibleContexts #-}
33{-# language FlexibleInstances #-}
44{-# language MultiParamTypeClasses #-}
5−{-# language ScopedTypeVariables #-}
65{-# language StandaloneKindSignatures #-}
7−{-# language TypeApplications #-}
86{-# language TypeFamilies #-}
97{-# language UndecidableInstances #-}
108
@@ -31,7 +29,7 @@ import qualified Opaleye.Internal.HaskellDB.PrimQuery as Opaleye
3129-- rel8
3230import {-# SOURCE #-} Rel8.Expr ( Expr )
3331import Rel8.Expr.Opaleye ( zipPrimExprsWith )
34−import Rel8.Schema.Nullability ( Unnullify, Sql, HasNullability )
32+import Rel8.Schema.Nullability ( Sql )
3533import Rel8.Type ( DBType )
3634
3735-- text
@@ -85,7 +83,3 @@ instance DBSemigroup ByteString where
8583
8684instance DBSemigroup Lazy.ByteString where
8785 (<>.) = zipPrimExprsWith (Opaleye.BinExpr (Opaleye.:||))
88−
89−
90−instance {-# INCOHERENT #-} (HasNullability a, DBSemigroup (Unnullify a)) =>
91− Sql DBSemigroup a
src/Rel8/Type/String.hs−5
@@ -21,7 +21,6 @@ import qualified Data.ByteString.Lazy as Lazy ( ByteString )
2121import Data.CaseInsensitive ( CI )
2222
2323-- rel8
24−import Rel8.Schema.Nullability ( HasNullability, Unnullify, Sql )
2524import Rel8.Type ( DBType )
2625
2726-- text
@@ -39,7 +38,3 @@ instance DBString (CI Text)
3938instance DBString (CI Lazy.Text)
4039instance DBString ByteString
4140instance DBString Lazy.ByteString
42−
43−
44−instance {-# INCOHERENT #-} (HasNullability a, DBString (Unnullify a)) =>
45− Sql DBString a
src/Rel8/Type/Sum.hs−5
@@ -17,7 +17,6 @@ import Data.Kind ( Constraint, Type )
1717import Prelude
1818
1919-- rel8
20−import Rel8.Schema.Nullability ( HasNullability, Unnullify, Sql )
2120import Rel8.Type ( DBType )
2221
2322-- scientific
@@ -37,7 +36,3 @@ instance DBSum Float
3736instance DBSum Double
3837instance DBSum Scientific
3938instance DBSum CalendarDiffTime
40−
41−
42−instance {-# INCOHERENT #-} (HasNullability a, DBSum (Unnullify a)) =>
43− Sql DBSum a