packages feed

dimensional 1.0.1.2 → 1.0.1.3

raw patch · 3 files changed

+20/−11 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Numeric.Units.Dimensional.UnitNames.InterchangeNames: instance GHC.Generics.Constructor Numeric.Units.Dimensional.UnitNames.InterchangeNames.C1_0InterchangeName
- Numeric.Units.Dimensional.UnitNames.InterchangeNames: instance GHC.Generics.Constructor Numeric.Units.Dimensional.UnitNames.InterchangeNames.C1_0InterchangeNameAuthority
- Numeric.Units.Dimensional.UnitNames.InterchangeNames: instance GHC.Generics.Constructor Numeric.Units.Dimensional.UnitNames.InterchangeNames.C1_1InterchangeNameAuthority
- Numeric.Units.Dimensional.UnitNames.InterchangeNames: instance GHC.Generics.Constructor Numeric.Units.Dimensional.UnitNames.InterchangeNames.C1_2InterchangeNameAuthority
- Numeric.Units.Dimensional.UnitNames.InterchangeNames: instance GHC.Generics.Datatype Numeric.Units.Dimensional.UnitNames.InterchangeNames.D1InterchangeName
- Numeric.Units.Dimensional.UnitNames.InterchangeNames: instance GHC.Generics.Datatype Numeric.Units.Dimensional.UnitNames.InterchangeNames.D1InterchangeNameAuthority
- Numeric.Units.Dimensional.UnitNames.InterchangeNames: instance GHC.Generics.Selector Numeric.Units.Dimensional.UnitNames.InterchangeNames.S1_0_0InterchangeName
- Numeric.Units.Dimensional.UnitNames.InterchangeNames: instance GHC.Generics.Selector Numeric.Units.Dimensional.UnitNames.InterchangeNames.S1_0_1InterchangeName
- Numeric.Units.Dimensional.Variants: instance GHC.Generics.Constructor Numeric.Units.Dimensional.Variants.C1_0Metricality
- Numeric.Units.Dimensional.Variants: instance GHC.Generics.Constructor Numeric.Units.Dimensional.Variants.C1_0Variant
- Numeric.Units.Dimensional.Variants: instance GHC.Generics.Constructor Numeric.Units.Dimensional.Variants.C1_1Metricality
- Numeric.Units.Dimensional.Variants: instance GHC.Generics.Constructor Numeric.Units.Dimensional.Variants.C1_1Variant
- Numeric.Units.Dimensional.Variants: instance GHC.Generics.Datatype Numeric.Units.Dimensional.Variants.D1Metricality
- Numeric.Units.Dimensional.Variants: instance GHC.Generics.Datatype Numeric.Units.Dimensional.Variants.D1Variant
+ Numeric.Units.Dimensional: data family Dimensional v :: Dimension -> * -> *;
+ Numeric.Units.Dimensional: infixl 6 -
+ Numeric.Units.Dimensional: infixl 7 /~~
+ Numeric.Units.Dimensional: infixr 8 **
+ Numeric.Units.Dimensional: }
+ Numeric.Units.Dimensional.Dimensions.TermLevel: infixl 7 /
+ Numeric.Units.Dimensional.Dimensions.TermLevel: infixr 8 ^
+ Numeric.Units.Dimensional.UnitNames: infixl 7 /
+ Numeric.Units.Dimensional.UnitNames: infixr 8 ^
- Numeric.Units.Dimensional: class KnownVariant (v :: Variant) where data family Dimensional v :: Dimension -> * -> *
+ Numeric.Units.Dimensional: class KnownVariant (v :: Variant) where data Dimensional v :: Dimension -> * -> * where {
- Numeric.Units.Dimensional: siUnit :: (KnownDimension d, Num a) => Unit NonMetric d a
+ Numeric.Units.Dimensional: siUnit :: forall d a. (KnownDimension d, Num a) => Unit NonMetric d a
- Numeric.Units.Dimensional.Dynamic: demoteQuantity :: (KnownDimension d) => Quantity d v -> AnyQuantity v
+ Numeric.Units.Dimensional.Dynamic: demoteQuantity :: forall d v. (KnownDimension d) => Quantity d v -> AnyQuantity v
- Numeric.Units.Dimensional.Dynamic: demoteUnit :: (KnownDimension d) => Unit a d v -> AnyUnit
+ Numeric.Units.Dimensional.Dynamic: demoteUnit :: forall a d v. (KnownDimension d) => Unit a d v -> AnyUnit
- Numeric.Units.Dimensional.Dynamic: promoteQuantity :: (KnownDimension d) => AnyQuantity v -> Maybe (Quantity d v)
+ Numeric.Units.Dimensional.Dynamic: promoteQuantity :: forall d v. (KnownDimension d) => AnyQuantity v -> Maybe (Quantity d v)
- Numeric.Units.Dimensional.Dynamic: promoteUnit :: (KnownDimension d) => AnyUnit -> Maybe (Unit NonMetric d ExactPi)
+ Numeric.Units.Dimensional.Dynamic: promoteUnit :: forall d. (KnownDimension d) => AnyUnit -> Maybe (Unit NonMetric d ExactPi)
- Numeric.Units.Dimensional.UnitNames: relax :: (Typeable m1, Typeable m2) => UnitName m1 -> Maybe (UnitName m2)
+ Numeric.Units.Dimensional.UnitNames: relax :: forall m1 m2. (Typeable m1, Typeable m2) => UnitName m1 -> Maybe (UnitName m2)

Files

CHANGELOG.md view
@@ -1,3 +1,7 @@+1.0.1.3 (2016-09)
+-----------------
+* Fixed an issue with applying metric prefixes to units with non-rational conversion factors.
+
 1.0.1.2 (2016-05)
 -----------------
 * Support for GHC 8.0.1-rc4, avoiding GHC Trac issue 12026.
dimensional.cabal view
@@ -1,5 +1,5 @@ name:                dimensional
-version:             1.0.1.2
+version:             1.0.1.3
 license:             BSD3
 license-file:        LICENSE
 copyright:           Bjorn Buckwalter 2006-2015
src/Numeric/Units/Dimensional.hs view
@@ -665,8 +665,11 @@ -- Supplying negative defining quantities is allowed and handled gracefully, but is discouraged
 -- on the grounds that it may be unexpected by other readers.
 mkUnitR :: Floating a => UnitName m -> ExactPi -> Unit m1 d a -> Unit m d a
-mkUnitR n s' (Unit _ s x) | isExactZero s = error "Supplying zero as a conversion factor is not valid."
-                          | otherwise     = Unit n (s' Prelude.* s) (approximateValue s' Prelude.* x)
+mkUnitR n s (Unit _ e _) | isExactZero s = error "Supplying zero as a conversion factor is not valid."
+                         | otherwise     = Unit n e' x'
+  where
+    e' = s Prelude.* e
+    x' = approximateValue e'
 
 -- | Forms a new atomic 'Unit' by specifying its 'UnitName' and its definition as a multiple of another 'Unit'.
 --
@@ -675,11 +678,12 @@ --
 -- For more information see 'mkUnitR'.
 mkUnitQ :: Fractional a => UnitName m -> Rational -> Unit m1 d a -> Unit m d a
-mkUnitQ n s' (Unit _ s _) | s' == 0                       = error "Supplying zero as a conversion factor is not valid."
-                          | Just q <- toExactRational s'' = Unit n s'' (fromRational q)
-                          | otherwise                     = error "The resulting conversion factor is not an exact rational." 
+mkUnitQ n s (Unit _ e x) | s == 0    = error "Supplying zero as a conversion factor is not valid."
+                         | Just x'' <- toExactRational e' = Unit n e' (fromRational x'')
+                         | otherwise = Unit n e' x'
   where
-    s'' = fromRational s' Prelude.* s                               
+    e' = fromRational s Prelude.* e
+    x' = fromRational s Prelude.* x
 
 -- | Forms a new atomic 'Unit' by specifying its 'UnitName' and its definition as a multiple of another 'Unit'.
 --
@@ -688,8 +692,9 @@ --
 -- For more information see 'mkUnitR'.
 mkUnitZ :: Num a => UnitName m -> Integer -> Unit m1 d a -> Unit m d a
-mkUnitZ n s' (Unit _ s _) | s' == 0                      = error "Supplying zero as a conversion factor is not valid."
-                          | Just z <- toExactInteger s'' = Unit n s'' (fromInteger z)
-                          | otherwise                    = error "The resulting conversion factor is not an exact integer."
+mkUnitZ n s (Unit _ e x) | s == 0    = error "Supplying zero as a conversion factor is not valid."
+                         | Just x'' <- toExactInteger e' = Unit n e' (fromInteger x'')
+                         | otherwise = Unit n e' x'
   where
-    s'' = fromInteger s' Prelude.* s
+    e' = fromInteger s Prelude.* e
+    x' = fromInteger s Prelude.* x