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