on ca7aaef help sign in
rel8/src/Rel8/Expr/Num.hs
57 lines 1.4 kB history raw
1{-# language FlexibleContexts #-}
2{-# language TypeFamilies #-}
4{-# options_ghc -fno-warn-redundant-constraints #-}
6module Rel8.Expr.Num
7 ( fromIntegral, realToFrac, div, mod, ceiling, floor, round, truncate
8 )
9where
11-- base
12import Prelude ()
14-- rel
15import Rel8.Expr ( Expr( Expr ) )
16import Rel8.Expr.Function ( function )
17import Rel8.Expr.Opaleye ( castExpr )
18import Rel8.Schema.Nullability ( Homonullable, Sql )
19import Rel8.Type.Num ( DBFractional, DBIntegral, DBNum )
22fromIntegral :: (Sql DBIntegral a, Sql DBNum b, Homonullable a b)
23 => Expr a -> Expr b
24fromIntegral (Expr a) = castExpr (Expr a)
27realToFrac :: (Sql DBNum a, Sql DBFractional b, Homonullable a b)
28 => Expr a -> Expr b
29realToFrac (Expr a) = castExpr (Expr a)
32ceiling :: (Sql DBFractional a, Sql DBIntegral b, Homonullable a b)
33 => Expr a -> Expr b
34ceiling = function "CEILING"
37div :: Sql DBIntegral a => Expr a -> Expr a -> Expr a
38div = function "DIV"
41mod :: Sql DBIntegral a => Expr a -> Expr a -> Expr a
42mod = function "MOD"
45floor :: (Sql DBFractional a, Sql DBIntegral b, Homonullable a b)
46 => Expr a -> Expr b
47floor = function "FLOOR"
50round :: (Sql DBFractional a, Sql DBIntegral b, Homonullable a b)
51 => Expr a -> Expr b
52round = function "ROUND"
55truncate :: (Sql DBFractional a, Sql DBIntegral b, Homonullable a b)
56 => Expr a -> Expr b
57truncate = function "TRUNC"