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 +2/−2
- src/Units/Simple.hs +185/−6
- src/Units/Simple/Arithmetic.hs +2/−2
- src/Units/Simple/Quantity.hs +10/−10
- src/Units/Simple/Unit.hs +1/−1
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))