on 6a3913b help sign in
rel8/src/Rel8/Type/Num.hs
65 lines 1.7 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
43-- | The class of database types that can be coerced to from integral
44-- expressions. This is a Rel8 concept, and allows us to provide
45-- 'fromIntegral'.
46type DBIntegral :: Type -> Constraint
47class DBNum a => DBIntegral a
48instance DBIntegral Int16
49instance DBIntegral Int32
50instance DBIntegral Int64
53instance {-# INCOHERENT #-} (HasNullability a, DBIntegral (Unnullify a)) =>
54 Sql DBIntegral a
57-- | The class of database types that support the @/@ operator.
58class DBNum a => DBFractional a
59instance DBFractional Float
60instance DBFractional Double
61instance DBFractional Scientific
64instance {-# INCOHERENT #-} (HasNullability a, DBFractional (Unnullify a)) =>
65 Sql DBFractional a