Safe Haskell | None |
---|---|
Language | Haskell2010 |
Add arithmetic operators to deal with Units. @todo add unit conversion
- class Addable a b c | a b -> c where
- class Multipliable a b c | a b -> c where
- (!*!) :: a -> b -> c
- class Divisible a b c | a b -> c where
- (!/!) :: a -> b -> c
- class Quantify a u q where
- (!*) :: a -> u -> q
- class Dequantify a u q | u q -> a where
- (!/) :: q -> u -> a
- x :: SQLFragment ((:) * (Quantity DLength Double) ([] *)) ([] *)
Arithmetic operators for SQLFragments holding dimensional units and quantities
class Addable a b c | a b -> c where
Addition Subtraction
Num n => Addable (SQLFragment ((:) * (Tagged * l (Dimensional v a n)) ([] *)) ([] *)) (SQLFragment ((:) * (Tagged * l' (Dimensional v a n)) ([] *)) ([] *)) (SQLFragment ((:) * (Tagged * l (Dimensional v a n)) ([] *)) ([] *)) | |
Num n => Addable (SQLFragment ((:) * (Dimensional v a n) ([] *)) ([] *)) (SQLFragment ((:) * (Dimensional v a n) ([] *)) ([] *)) (SQLFragment ((:) * (Dimensional v a n) ([] *)) ([] *)) | |
(Num n, (~) * v DQuantity) => Addable (Dimensional v a n) (Dimensional v a n) (Dimensional v a n) |
class Multipliable a b c | a b -> c where
Multiplication
(!*!) :: a -> b -> c
(Num n, Mul a b c) => Multipliable (SQLFragment ((:) * (Tagged * l (Dimensional v a n)) ([] *)) ([] *)) (SQLFragment ((:) * (Tagged * l' (Dimensional v b n)) ([] *)) ([] *)) (SQLFragment ((:) * (Tagged * l (Dimensional v c n)) ([] *)) ([] *)) | |
(Num n, Mul a b c) => Multipliable (SQLFragment ((:) * (Dimensional v a n) ([] *)) ([] *)) (SQLFragment ((:) * (Dimensional v b n) ([] *)) ([] *)) (SQLFragment ((:) * (Dimensional v c n) ([] *)) ([] *)) | |
(Num n, Mul a b c) => Multipliable (Dimensional v a n) (Dimensional v b n) (Dimensional v c n) |
class Divisible a b c | a b -> c where
Division
(!/!) :: a -> b -> c
(Num n, Mul a b c) => Divisible (SQLFragment ((:) * (Tagged * l (Dimensional v a n)) ([] *)) ([] *)) (SQLFragment ((:) * (Tagged * l' (Dimensional v b n)) ([] *)) ([] *)) (SQLFragment ((:) * (Tagged * l (Dimensional v c n)) ([] *)) ([] *)) | |
(Num n, Div a b c) => Divisible (SQLFragment ((:) * (Dimensional v a n) ([] *)) ([] *)) (SQLFragment ((:) * (Dimensional v b n) ([] *)) ([] *)) (SQLFragment ((:) * (Dimensional v c n) ([] *)) ([] *)) | |
(Fractional n, Div a b c, (~) * v DQuantity) => Divisible (Dimensional v a n) (Dimensional v b n) (Dimensional v c n) |
Export Dimensional operators
class Quantify a u q where
(!*) :: a -> u -> q
Num a => Quantify a (Unit d a) (Quantity d a) | |
Num a => Quantify (SQLFragment ((:) * a ([] *)) p) (Unit d a) (SQLFragment ((:) * (Quantity d a) ([] *)) p) | |
Num a => Quantify (SQLFragment ((:) * (Tagged * l a) ([] *)) p) (Unit d a) (SQLFragment ((:) * (Tagged * l (Quantity d a)) ([] *)) p) |
class Dequantify a u q | u q -> a where
(!/) :: q -> u -> a
Fractional a => Dequantify a (Unit d a) (Quantity d a) | |
Fractional a => Dequantify (SQLFragment ((:) * a ([] *)) p) (Unit d a) (SQLFragment ((:) * (Quantity d a) ([] *)) p) | |
Fractional a => Dequantify (SQLFragment ((:) * (Tagged * l a) ([] *)) p) (Unit d a) (SQLFragment ((:) * (Tagged * l (Quantity d a)) ([] *)) p) |
x :: SQLFragment ((:) * (Quantity DLength Double) ([] *)) ([] *)