on 9216dbd help sign in
rel8/src/Rel8/Type/Ord.hs
137 lines 3.3 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 ( UTCTime )
41import Data.Time.LocalTime ( CalendarDiffTime, LocalTime, TimeOfDay )
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 CalendarDiffTime
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
76instance {-# INCOHERENT #-} (HasNullability a, DBOrd (Unnullify a)) =>
77 Sql DBOrd a
80-- | The class of database types that support the @max@ aggregation function.
81type DBMax :: Type -> Constraint
82class DBOrd a => DBMax a
83instance DBMax Bool
84instance DBMax Char
85instance DBMax Int16
86instance DBMax Int32
87instance DBMax Int64
88instance DBMax Float
89instance DBMax Double
90instance DBMax Scientific
91instance DBMax UTCTime
92instance DBMax Day
93instance DBMax LocalTime
94instance DBMax TimeOfDay
95instance DBMax CalendarDiffTime
96instance DBMax Text
97instance DBMax Lazy.Text
98instance DBMax (CI Text)
99instance DBMax (CI Lazy.Text)
100instance DBMax ByteString
101instance DBMax Lazy.ByteString
102instance Sql DBMax a => DBMax [a]
103instance Sql DBMax a => DBMax (NonEmpty a)
106instance {-# INCOHERENT #-} (HasNullability a, DBMax (Unnullify a)) =>
107 Sql DBMax a
110-- | The class of database types that support the @min@ aggregation function.
111type DBMin :: Type -> Constraint
112class DBOrd a => DBMin a
113instance DBMin Bool
114instance DBMin Char
115instance DBMin Int16
116instance DBMin Int32
117instance DBMin Int64
118instance DBMin Float
119instance DBMin Double
120instance DBMin Scientific
121instance DBMin UTCTime
122instance DBMin Day
123instance DBMin LocalTime
124instance DBMin TimeOfDay
125instance DBMin CalendarDiffTime
126instance DBMin Text
127instance DBMin Lazy.Text
128instance DBMin (CI Text)
129instance DBMin (CI Lazy.Text)
130instance DBMin ByteString
131instance DBMin Lazy.ByteString
132instance Sql DBMin a => DBMin [a]
133instance Sql DBMin a => DBMin (NonEmpty a)
136instance {-# INCOHERENT #-} (HasNullability a, DBMin (Unnullify a)) =>
137 Sql DBMin a