packages feed

simple-units 1.0.0.0 → 1.0.1.0

raw patch · 5 files changed

+200/−21 lines, 5 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Units.Simple: atto :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: atto' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: centi :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: centi' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: deci :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: deci' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: deka :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: deka' :: Num a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: exa :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: exa' :: Num a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: femto :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: femto' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: giga :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: giga' :: Num a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: gram :: Fractional a => Quantity (SingleUnit 'Kilogram) a
+ Units.Simple: gram' :: Fractional a => a -> Quantity (SingleUnit 'Kilogram) a
+ Units.Simple: hecto :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: hecto' :: Num a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: kilo :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: kilo' :: Num a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: mega :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: mega' :: Num a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: micro :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: micro' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: milli :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: milli' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: nano :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: nano' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: peta :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: peta' :: Num a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: pico :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: pico' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: tera :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: tera' :: Num a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: yocto :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: yocto' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: yotta :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: yotta' :: Num a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: zepto :: Fractional a => Quantity us a -> Quantity us a
+ Units.Simple: zepto' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a
+ Units.Simple: zetta :: Num a => Quantity us a -> Quantity us a
+ Units.Simple: zetta' :: Num a => (a -> Quantity us a) -> a -> Quantity us a

Files

simple-units.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 1bf2ea2a4041479d0c14336601f236f12e4c746191ab5dff6a13b335a3e29fef+-- hash: d6f127891744fc332ebbf4a673910fb2099711e9821adfba9c313c6b961cb175  name:           simple-units-version:        1.0.0.0+version:        1.0.1.0 synopsis:       Simple arithmetic with SI units using type-checked dimensional analysis. description:    Please see the README on GitHub at <https://github.com/groscoe/simple-units#readme> category:       Numeric, Numerical
src/Units/Simple.hs view
@@ -18,9 +18,9 @@   , (./)    -- *Base SI Units-  -- |Smart constructors for quantities in all the base SI Units.-  -- The constructors are provided in both unitary (non-ticked) and-  -- function (ticked) forms.+  -- |Smart constructors for quantities in all the base SI Units, plus grams+  -- (see "SI Prefixes"). The constructors are provided in both unitary+  -- (non-ticked) and function (ticked) forms.   --   -- Examples:   --@@ -34,6 +34,8 @@   , meter'   , kilogram   , kilogram'+  , gram+  , gram'   , second   , second'   , ampere@@ -44,6 +46,53 @@   , mole'   , candela   , candela'++  -- *SI Prefixes+  -- |The 20 base SI prefixes representing powers of 10.+  -- Reference: <https://physics.nist.gov/cuu/Units/prefixes.html>+  --+  -- __Note:__ Though smart constructors for kilograms are provided, it is+  -- recommended to use the prefixes with the 'gram' and 'gram'' constructors.+  , yocto+  , yocto'+  , zepto+  , zepto'+  , atto+  , atto'+  , femto+  , femto'+  , pico+  , pico'+  , nano+  , nano'+  , micro+  , micro'+  , milli+  , milli'+  , centi+  , centi'+  , deci+  , deci'+  , deka+  , deka'+  , hecto+  , hecto'+  , kilo+  , kilo'+  , mega+  , mega'+  , giga+  , giga'+  , tera+  , tera'+  , peta+  , peta'+  , exa+  , exa'+  , zetta+  , zetta'+  , yotta+  , yotta'   ) where  @@ -54,9 +103,9 @@ type SingleUnit (u :: Unit) = '( '[ '(u, 1)], '[]) type Adimensional = '( '[], '[]) --- | A quantity with no associated dimension. Can be multiplied or divided--- by any other quantity, but can only be added to or subtracted from--- other adimensional quantities.+-- | A 'Quantity' with no associated dimension. Can be multiplied or divided+-- by any other 'Quantity', but can only be added to or subtracted from+-- another adimensional 'Quantity'. -- -- >>> 2*adim + 4*adim -- 6 <adimensional>@@ -69,12 +118,17 @@ adim :: Num a => Quantity Adimensional a adim = Quantity 1 +-- SI units meter :: Num a => Quantity (SingleUnit 'Meter) a meter = Quantity 1  kilogram :: Num a => Quantity (SingleUnit 'Kilogram) a kilogram = Quantity 1 +-- |A constructor for 1/1000th of a kilogram, to use with SI prefixes.+gram :: Fractional a => Quantity (SingleUnit 'Kilogram) a+gram = Quantity 1e-3+ second :: Num a => Quantity (SingleUnit 'Second) a second = Quantity 1 @@ -99,6 +153,10 @@ kilogram' :: Num a => a -> Quantity (SingleUnit 'Kilogram) a kilogram' = Quantity +-- |A constructor for 1/1000th of a kilogram, to use with SI prefixes.+gram' :: Fractional a => a -> Quantity (SingleUnit 'Kilogram) a+gram' = (*1e-3) . Quantity+ second' :: Num a => a -> Quantity (SingleUnit 'Second) a second' = Quantity @@ -113,3 +171,124 @@  candela' :: Num a => a -> Quantity (SingleUnit 'Candela) a candela' = Quantity++-- SI prefixes+yocto :: Fractional a => Quantity us a -> Quantity us a+yocto = (* 1e-24)++yocto' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+yocto' constructor = yocto . constructor++zepto :: Fractional a => Quantity us a -> Quantity us a+zepto = (* 1e-21)++zepto' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+zepto' constructor = zepto . constructor++atto :: Fractional a => Quantity us a -> Quantity us a+atto = (* 1e-18)++atto' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+atto' constructor = atto . constructor++femto :: Fractional a => Quantity us a -> Quantity us a+femto = (* 1e-15)++femto' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+femto' constructor = femto . constructor++pico :: Fractional a => Quantity us a -> Quantity us a+pico = (* 1e-12)++pico' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+pico' constructor = pico . constructor++nano :: Fractional a => Quantity us a -> Quantity us a+nano = (* 1e-9)++nano' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+nano' constructor = nano . constructor++micro :: Fractional a => Quantity us a -> Quantity us a+micro = (* 1e-6)++micro' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+micro' constructor = micro . constructor++milli :: Fractional a => Quantity us a -> Quantity us a+milli = (* 1e-3)++milli' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+milli' constructor = milli . constructor++centi :: Fractional a => Quantity us a -> Quantity us a+centi = (* 1e-2)++centi' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+centi' constructor = centi . constructor++deci :: Fractional a => Quantity us a -> Quantity us a+deci = (* 1e-1)++deci' :: Fractional a => (a -> Quantity us a) -> a -> Quantity us a+deci' constructor = deci . constructor++deka :: Num a => Quantity us a -> Quantity us a+deka = (* 10)++deka' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+deka' constructor = deka . constructor++hecto :: Num a => Quantity us a -> Quantity us a+hecto = (* 100)++hecto' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+hecto' constructor = hecto . constructor++kilo :: Num a => Quantity us a -> Quantity us a+kilo = (* 1000)++kilo' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+kilo' constructor = kilo . constructor++mega :: Num a => Quantity us a -> Quantity us a+mega = (* 1000000)++mega' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+mega' constructor = mega . constructor++giga :: Num a => Quantity us a -> Quantity us a+giga = (* 1000000000)++giga' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+giga' constructor = giga . constructor++tera :: Num a => Quantity us a -> Quantity us a+tera = (* 1000000000000)++tera' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+tera' constructor = tera . constructor++peta :: Num a => Quantity us a -> Quantity us a+peta = (* 1000000000000000)++peta' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+peta' constructor = peta . constructor++exa :: Num a => Quantity us a -> Quantity us a+exa = (* 1000000000000000000)++exa' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+exa' constructor = exa . constructor++zetta :: Num a => Quantity us a -> Quantity us a+zetta = (* 1000000000000000000000)++zetta' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+zetta' constructor = zetta . constructor++yotta :: Num a => Quantity us a -> Quantity us a+yotta = (* 1000000000000000000000000)++yotta' :: Num a => (a -> Quantity us a) -> a -> Quantity us a+yotta' constructor = yotta . constructor
src/Units/Simple/Arithmetic.hs view
@@ -96,8 +96,8 @@ -- -- Examples: ----- >>> 2*meter .+ 3*meter--- 5 m+-- >>> 2 * kilo meter .+ 3 * kilo meter+-- 5000 m -- >>> 2*meter .+ 1*second -- <BLANKLINE> -- <interactive>:16:1-19: error:
src/Units/Simple/Quantity.hs view
@@ -31,9 +31,9 @@ -- >>> 2 :: Quantity (SingleUnit 'Second) Rational -- 2 % 1 s ----- Associated units are represented through a phantom parameter of the @Units@ kind synonym.+-- Associated units are represented through a phantom parameter of the 'Units' kind synonym. -- These are currently implemented as a type-level pair of lists representing the power--- to which each unit is raised. Units can be inspected through @showUnits@.+-- to which each unit is raised. Units can be inspected through 'showUnits'. -- -- New constructors may be written by combining the provided ones, such as --@@ -45,21 +45,21 @@ -- >>> g -- gravitational constant -- 6.67408e-11 m^3/kg*s^2 -- >>> let gravity m1 m2 r = g .* (m1 * kilogram) .* (m2 * kilogram) ./ (r*meter .* r*meter)--- >>> let earth_mass = 5.972e24 * kilogram--- >>> let mars_mass = 6.417e23 * kilogram--- >>> let earth_radius = 6371e3 * meter--- >>> let mars_radius = 3389.5e3 * meter+-- >>> let earth_mass = 5.972e24 * kilo gram+-- >>> let mars_mass = 6.417e23 * kilo gram+-- >>> let earth_radius = 6371 * kilo meter+-- >>> let mars_radius = 3389.5 * kilo meter -- >>> let weight_on_earth mass = gravity mass earth_mass earth_radius -- >>> let weight_on_mars mass = gravity mass mars_mass mars_radius--- >>> weight_on_earth (80 * kilogram)+-- >>> weight_on_earth (80 * kilo gram) -- 785.5719790179963 kg*m/s^2--- >>> weight_on_mars (80 * kilogram)+-- >>> weight_on_mars (80 * kilo gram) -- 298.22370259533704 kg*m/s^2--- >>> fromQuantity $ weight_on_mars 1 / (fromQuantity $ weight_on_earth 1)+-- >>> weight_on_mars 1 / weight_on_earth 1 -- 0.3796261966575378 newtype Quantity (us :: Units) a =   Quantity {-    fromQuantity :: a -- ^Unwraps a @Quantity@, losing all unit information+    fromQuantity :: a -- ^Unwraps a 'Quantity', losing all unit information   }   deriving ( Eq            , Ord
src/Units/Simple/Unit.hs view
@@ -56,7 +56,7 @@  type UnitRepr (us :: Units) = UnitRepr' (Eval (Fst us)) (Eval (Snd us)) --- | A string representation of "Units". Useful for debugging.+-- | A string representation of 'Units'. Useful for debugging. showUnits :: forall us. KnownSymbol (UnitRepr us) => String showUnits = symbolVal (Proxy @(UnitRepr us))