on cc0705f help sign in
rel8/src/Rel8/Type/Ord.hs
140 lines 3.4 kB history raw
1{-# language FlexibleContexts #-}
2{-# language FlexibleInstances #-}
3{-# language MultiParamTypeClasses #-}
4{-# language StandaloneKindSignatures #-}
5{-# language UndecidableInstances #-}
7module Rel8.Type.Ord
8 ( DBOrd
9 , DBMax, DBMin
10 )
11where
13-- base
14import Data.Int ( Int16, Int32, Int64 )
15import Data.Kind ( Constraint, Type )
16import Data.List.NonEmpty ( NonEmpty )
17import Prelude
19-- bytestring
20import Data.ByteString ( ByteString )
21import qualified Data.ByteString.Lazy as Lazy ( ByteString )
23-- case-insensitive
24import Data.CaseInsensitive ( CI )
26-- rel8
27import Rel8.Opaque ( Opaque )
28import Rel8.Schema.Nullability ( Unnullify, Sql, HasNullability )
29import Rel8.Type.Eq ( DBEq )
31-- scientific
32import Data.Scientific ( Scientific )
34-- text
35import Data.Text ( Text )
36import qualified Data.Text.Lazy as Lazy ( Text )
38-- time
39import Data.Time.Calendar ( Day )
40import Data.Time.Clock ( DiffTime, NominalDiffTime, UTCTime )
41import Data.Time.LocalTime ( TimeOfDay, LocalTime )
43-- uuid
44import Data.UUID ( UUID )
47-- | The class of database types that support the @<@, @<=@, @>@ and @>=@
48-- operators.
49type DBOrd :: Type -> Constraint
50class DBEq a => DBOrd a
51instance DBOrd Bool
52instance DBOrd Char
53instance DBOrd Int16
54instance DBOrd Int32
55instance DBOrd Int64
56instance DBOrd Float
57instance DBOrd Double
58instance DBOrd Scientific
59instance DBOrd UTCTime
60instance DBOrd Day
61instance DBOrd LocalTime
62instance DBOrd TimeOfDay
63instance DBOrd DiffTime
64instance DBOrd NominalDiffTime
65instance DBOrd Text
66instance DBOrd Lazy.Text
67instance DBOrd (CI Text)
68instance DBOrd (CI Lazy.Text)
69instance DBOrd ByteString
70instance DBOrd Lazy.ByteString
71instance DBOrd UUID
72instance Sql DBOrd a => DBOrd [a]
73instance Sql DBOrd a => DBOrd (NonEmpty a)
74instance {-# OVERLAPPING #-} DBOrd Opaque
77instance {-# INCOHERENT #-} (HasNullability a, DBOrd (Unnullify a)) =>
78 Sql DBOrd a
81-- | The class of database types that support the @max@ aggregation function.
82type DBMax :: Type -> Constraint
83class DBOrd a => DBMax a
84instance DBMax Bool
85instance DBMax Char
86instance DBMax Int16
87instance DBMax Int32
88instance DBMax Int64
89instance DBMax Float
90instance DBMax Double
91instance DBMax Scientific
92instance DBMax UTCTime
93instance DBMax Day
94instance DBMax LocalTime
95instance DBMax TimeOfDay
96instance DBMax DiffTime
97instance DBMax NominalDiffTime
98instance DBMax Text
99instance DBMax Lazy.Text
100instance DBMax (CI Text)
101instance DBMax (CI Lazy.Text)
102instance DBMax ByteString
103instance DBMax Lazy.ByteString
104instance Sql DBMax a => DBMax [a]
105instance Sql DBMax a => DBMax (NonEmpty a)
108instance {-# INCOHERENT #-} (HasNullability a, DBMax (Unnullify a)) =>
109 Sql DBMax a
112-- | The class of database types that support the @min@ aggregation function.
113type DBMin :: Type -> Constraint
114class DBOrd a => DBMin a
115instance DBMin Bool
116instance DBMin Char
117instance DBMin Int16
118instance DBMin Int32
119instance DBMin Int64
120instance DBMin Float
121instance DBMin Double
122instance DBMin Scientific
123instance DBMin UTCTime
124instance DBMin Day
125instance DBMin LocalTime
126instance DBMin TimeOfDay
127instance DBMin DiffTime
128instance DBMin NominalDiffTime
129instance DBMin Text
130instance DBMin Lazy.Text
131instance DBMin (CI Text)
132instance DBMin (CI Lazy.Text)
133instance DBMin ByteString
134instance DBMin Lazy.ByteString
135instance Sql DBMin a => DBMin [a]
136instance Sql DBMin a => DBMin (NonEmpty a)
139instance {-# INCOHERENT #-} (HasNullability a, DBMin (Unnullify a)) =>
140 Sql DBMin a