on ca7aaef help sign in
rel8/src/Rel8/Type/Num.hs
62 lines 1.5 kB history raw
1{-# language DataKinds #-}
2{-# language FlexibleContexts #-}
3{-# language FlexibleInstances #-}
4{-# language MultiParamTypeClasses #-}
5{-# language StandaloneKindSignatures #-}
6{-# language TypeFamilies #-}
7{-# language UndecidableInstances #-}
9module Rel8.Type.Num
10 ( DBNum, DBIntegral, DBFractional
11 )
12where
14-- base
15import Data.Int ( Int16, Int32, Int64 )
16import Data.Kind ( Constraint, Type )
17import Prelude
19-- rel8
20import Rel8.Schema.Nullability ( HasNullability, Unnullify, Sql )
21import Rel8.Type ( DBType )
23-- scientific
24import Data.Scientific ( Scientific )
27-- | The class of database types that support the @+@, @*@, @-@ operators, and
28-- the @abs@, @negate@, @sign@ functions.
29type DBNum :: Type -> Constraint
30class DBType a => DBNum a
31instance DBNum Int16
32instance DBNum Int32
33instance DBNum Int64
34instance DBNum Float
35instance DBNum Double
36instance DBNum Scientific
39instance {-# INCOHERENT #-} (HasNullability a, DBNum (Unnullify a)) =>
40 Sql DBNum a
43type DBIntegral :: Type -> Constraint
44class DBNum a => DBIntegral a
45instance DBIntegral Int16
46instance DBIntegral Int32
47instance DBIntegral Int64
50instance {-# INCOHERENT #-} (HasNullability a, DBIntegral (Unnullify a)) =>
51 Sql DBIntegral a
54-- | The class of database types that support the @/@ operator.
55class DBNum a => DBFractional a
56instance DBFractional Float
57instance DBFractional Double
58instance DBFractional Scientific
61instance {-# INCOHERENT #-} (HasNullability a, DBFractional (Unnullify a)) =>
62 Sql DBFractional a