packages feed

dimensional 1.5 → 1.6

raw patch · 13 files changed

+99/−42 lines, 13 filesdep +binarydep −Globdep −doctestdep −template-haskelldep ~basePVP ok

version bump matches the API change (PVP)

Dependencies added: binary

Dependencies removed: Glob, doctest, template-haskell

Dependency ranges changed: base

API changes (from Hackage documentation)

- Numeric.Units.Dimensional: data family Dimensional v :: Dimension -> Type -> Type
- Numeric.Units.Dimensional.Coercion: data family Dimensional v :: Dimension -> Type -> Type
- Numeric.Units.Dimensional.FixedPoint: data family Dimensional v :: Dimension -> Type -> Type
- Numeric.Units.Dimensional.Prelude: data family Dimensional v :: Dimension -> Type -> Type;
+ Numeric.Units.Dimensional: data Dimensional v :: Dimension -> Type -> Type
+ Numeric.Units.Dimensional.Coercion: data Dimensional v :: Dimension -> Type -> Type
+ Numeric.Units.Dimensional.FixedPoint: data Dimensional v :: Dimension -> Type -> Type
+ Numeric.Units.Dimensional.Prelude: class a ~# b => (a :: k) ~ (b :: k)
+ Numeric.Units.Dimensional.Prelude: data Dimensional v :: Dimension -> Type -> Type;
+ Numeric.Units.Dimensional.Prelude: liftA2 :: Applicative f => (a -> b -> c) -> f a -> f b -> f c
+ Numeric.Units.Dimensional.SIUnits: quecto :: Fractional a => Unit 'Metric d a -> Unit 'NonMetric d a
+ Numeric.Units.Dimensional.SIUnits: quetta :: Num a => Unit 'Metric d a -> Unit 'NonMetric d a
+ Numeric.Units.Dimensional.SIUnits: ronna :: Num a => Unit 'Metric d a -> Unit 'NonMetric d a
+ Numeric.Units.Dimensional.SIUnits: ronto :: Fractional a => Unit 'Metric d a -> Unit 'NonMetric d a
- Numeric.Units.Dimensional.Coercion: coerce :: forall (k :: RuntimeRep) (a :: TYPE k) (b :: TYPE k). Coercible a b => a -> b
+ Numeric.Units.Dimensional.Coercion: coerce :: forall {k :: RuntimeRep} (a :: TYPE k) (b :: TYPE k). Coercible a b => a -> b
- Numeric.Units.Dimensional.Prelude: (!!) :: [a] -> Int -> a
+ Numeric.Units.Dimensional.Prelude: (!!) :: HasCallStack => [a] -> Int -> a
- Numeric.Units.Dimensional.Prelude: class Bounded a
+ Numeric.Units.Dimensional.Prelude: class () => Bounded a
- Numeric.Units.Dimensional.Prelude: class Category (cat :: k -> k -> Type)
+ Numeric.Units.Dimensional.Prelude: class () => Category (cat :: k -> k -> Type)
- Numeric.Units.Dimensional.Prelude: class Enum a
+ Numeric.Units.Dimensional.Prelude: class () => Enum a
- Numeric.Units.Dimensional.Prelude: class Eq a
+ Numeric.Units.Dimensional.Prelude: class () => Eq a
- Numeric.Units.Dimensional.Prelude: class Foldable (t :: Type -> Type)
+ Numeric.Units.Dimensional.Prelude: class () => Foldable (t :: Type -> Type)
- Numeric.Units.Dimensional.Prelude: class Functor (f :: Type -> Type)
+ Numeric.Units.Dimensional.Prelude: class () => Functor (f :: Type -> Type)
- Numeric.Units.Dimensional.Prelude: class Num a
+ Numeric.Units.Dimensional.Prelude: class () => Num a
- Numeric.Units.Dimensional.Prelude: class Read a
+ Numeric.Units.Dimensional.Prelude: class () => Read a
- Numeric.Units.Dimensional.Prelude: class Semigroup a
+ Numeric.Units.Dimensional.Prelude: class () => Semigroup a
- Numeric.Units.Dimensional.Prelude: class Show a
+ Numeric.Units.Dimensional.Prelude: class () => Show a
- Numeric.Units.Dimensional.Prelude: cycle :: [a] -> [a]
+ Numeric.Units.Dimensional.Prelude: cycle :: HasCallStack => [a] -> [a]
- Numeric.Units.Dimensional.Prelude: data Bool
+ Numeric.Units.Dimensional.Prelude: data () => Bool
- Numeric.Units.Dimensional.Prelude: data Char
+ Numeric.Units.Dimensional.Prelude: data () => Char
- Numeric.Units.Dimensional.Prelude: data Double
+ Numeric.Units.Dimensional.Prelude: data () => Double
- Numeric.Units.Dimensional.Prelude: data Either a b
+ Numeric.Units.Dimensional.Prelude: data () => Either a b
- Numeric.Units.Dimensional.Prelude: data Float
+ Numeric.Units.Dimensional.Prelude: data () => Float
- Numeric.Units.Dimensional.Prelude: data IO a
+ Numeric.Units.Dimensional.Prelude: data () => IO a
- Numeric.Units.Dimensional.Prelude: data Int
+ Numeric.Units.Dimensional.Prelude: data () => Int
- Numeric.Units.Dimensional.Prelude: data Integer
+ Numeric.Units.Dimensional.Prelude: data () => Integer
- Numeric.Units.Dimensional.Prelude: data Maybe a
+ Numeric.Units.Dimensional.Prelude: data () => Maybe a
- Numeric.Units.Dimensional.Prelude: data Ordering
+ Numeric.Units.Dimensional.Prelude: data () => Ordering
- Numeric.Units.Dimensional.Prelude: data Word
+ Numeric.Units.Dimensional.Prelude: data () => Word
- Numeric.Units.Dimensional.Prelude: head :: [a] -> a
+ Numeric.Units.Dimensional.Prelude: head :: HasCallStack => [a] -> a
- Numeric.Units.Dimensional.Prelude: infixl 6 -
+ Numeric.Units.Dimensional.Prelude: infixl 6 +
- Numeric.Units.Dimensional.Prelude: infixl 7 `quot`
+ Numeric.Units.Dimensional.Prelude: infixl 7 `mod`
- Numeric.Units.Dimensional.Prelude: init :: [a] -> [a]
+ Numeric.Units.Dimensional.Prelude: init :: HasCallStack => [a] -> [a]
- Numeric.Units.Dimensional.Prelude: last :: [a] -> a
+ Numeric.Units.Dimensional.Prelude: last :: HasCallStack => [a] -> a
- Numeric.Units.Dimensional.Prelude: seq :: forall (r :: RuntimeRep) a (b :: TYPE r). a -> b -> b
+ Numeric.Units.Dimensional.Prelude: seq :: forall {r :: RuntimeRep} a (b :: TYPE r). a -> b -> b
- Numeric.Units.Dimensional.Prelude: tail :: [a] -> [a]
+ Numeric.Units.Dimensional.Prelude: tail :: HasCallStack => [a] -> [a]
- Numeric.Units.Dimensional.Prelude: type family (a :: Dimension) * (b :: Dimension)
+ Numeric.Units.Dimensional.Prelude: type family NRoot (d :: Dimension) (x :: TypeInt)

Files

CHANGELOG.md view
@@ -1,6 +1,11 @@+1.6 (2024-08)+-------------++* Added a package flag `binary`, enabling optional dependency on the `binary` package to provide instances of `Binary`.+ 1.5 (2022-06) --------------* Add Julian `decade`, `century`, and `millennium` to `NonSI`.+* Add Julian `decade` and `millennium` to `NonSI`. * Rename `deka` prefix to `deca` in accordance with [international spelling](https://www.bipm.org/documents/20126/41483022/SI-Brochure-9.pdf/fcf090b2-04e6-88cc-1149-c3e029ad8232). * Change `astronomicalUnit` symbol to lowercase (`au`). * Remove `semigroups` dependency.
README.md view
@@ -5,7 +5,6 @@ Data kinds and closed type families provide a flexible, safe, and discoverable implementation that leads to largely self-documenting client code. -[![Build Status](https://api.travis-ci.com/bjornbm/dimensional.svg?branch=master)](https://app.travis-ci.com/github/bjornbm/dimensional) [![Hackage Version](https://img.shields.io/hackage/v/dimensional.svg)](https://hackage.haskell.org/package/dimensional) [![Stackage version](https://www.stackage.org/package/dimensional/badge/lts?label=Stackage)](https://www.stackage.org/package/dimensional) @@ -62,6 +61,21 @@          putStrLn $ "Average speed is: " ++ showIn (mile / hour) averageSpeed          putStrLn $ "If we don't want to be explicit about units, the show instance uses the SI basis: " ++ show averageSpeed          putStrLn $ "The journey requires " ++ show wholeSeconds ++ " seconds, rounded up to the nearest second."+```++## Package Flags++To provide `Binary` serialization for `Quantity` from the `binary` package, the `binary` flag can be used like so:++```bash+cabal install dimensional -f binary+```++If you use a `cabal.project` file, you can instead add the following clause to activate this package flag:++```txt+package dimensional+    flags: +binary ```  ## Contributing
dimensional.cabal view
@@ -1,8 +1,8 @@ name:                dimensional-version:             1.5+version:             1.6 license:             BSD3 license-file:        LICENSE-copyright:           Bjorn Buckwalter 2006-2022+copyright:           Bjorn Buckwalter 2006-2024 author:              Bjorn Buckwalter maintainer:          bjorn@buckwalter.se stability:           experimental@@ -11,7 +11,13 @@ category:            Math, Physics synopsis:            Statically checked physical dimensions cabal-version:       >= 1.10-tested-with:         GHC == 8.0.1, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.1, GHC == 8.8.3, GHC == 8.10.4+tested-with:         GHC == 8.10.7,+                     GHC == 9.0.2,+                     GHC == 9.2.8,+                     GHC == 9.4.8,+                     GHC == 9.6.6,+                     GHC == 9.8.2,+                     GHC == 9.10.1 build-type:          Simple  description:@@ -37,6 +43,11 @@                      examples/GM.lhs,                      examples/NewtonianMechanics.hs +flag binary+  description: Provide instances for use with the binary package.+  default:     False+  manual:      True+ source-repository head   type:     git   location: https://github.com/bjornbm/dimensional/@@ -72,6 +83,9 @@                        Numeric.Units.Dimensional.Float   other-modules:       Numeric.Units.Dimensional.Internal                        Numeric.Units.Dimensional.UnitNames.Internal+  if flag(binary)+    build-depends:     binary >= 0.7 && < 1+    cpp-options:       -DUSE_BINARY  test-suite tests   type:                exitcode-stdio-1.0@@ -90,19 +104,6 @@                        QuickCheck,                        base   build-tool-depends: hspec-discover:hspec-discover == 2.*--test-suite doctests-  type:                exitcode-stdio-1.0-  ghc-options:         -threaded-  main-is:             DocTests.hs-  hs-source-dirs:      tests-  default-language:    Haskell2010-  build-depends:       dimensional,-                       doctest,-                       Glob,-                       QuickCheck,-                       template-haskell,-                       base  benchmark simple   type:                exitcode-stdio-1.0
src/Numeric/Units/Dimensional.hs view
@@ -240,6 +240,8 @@ -- $setup -- >>> :set -XFlexibleInstances -- >>> :set -XNoImplicitPrelude+-- >>> :set -fno-warn-orphans+-- >>> :set -fno-warn-type-defaults -- >>> import Test.QuickCheck.Arbitrary -- >>> import Numeric.Units.Dimensional.Prelude -- >>> import Numeric.Units.Dimensional.Float
src/Numeric/Units/Dimensional/Dimensions/TermLevel.hs view
@@ -1,6 +1,7 @@ {-# OPTIONS_HADDOCK not-home, show-extensions #-}  {-# LANGUAGE BangPatterns #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-}@@ -36,6 +37,9 @@ where  import Control.DeepSeq+#if USE_BINARY+import qualified Data.Binary+#endif import Data.Data import Data.Semigroup (Semigroup(..)) import Data.Monoid (Monoid(..))@@ -44,6 +48,7 @@ import qualified Prelude as P  -- $setup+-- >>> :set -fno-warn-orphans -- >>> import Prelude (negate) -- >>> import Control.Applicative -- >>> import Test.QuickCheck.Arbitrary@@ -66,6 +71,10 @@   mempty = dOne   mappend = (<>) +#if USE_BINARY+instance Data.Binary.Binary Dimension'+#endif+ -- | The dimension of a dynamic value, which may not have any dimension at all. data DynamicDimension = NoDimension -- ^ The value has no valid dimension.                       | SomeDimension Dimension' -- ^ The value has the given dimension.@@ -73,6 +82,10 @@   deriving (Eq, Ord, Show, Data, Generic, Typeable)  instance NFData DynamicDimension where++#if USE_BINARY+instance Data.Binary.Binary DynamicDimension+#endif  -- | Dimensional values, or those that are only possibly dimensional, inhabit this class, -- which allows access to a term-level representation of their dimension.
src/Numeric/Units/Dimensional/Dynamic.hs view
@@ -9,6 +9,7 @@ Defines types for manipulation of units and quantities without phantom types for their dimensions. -} +{-# LANGUAGE CPP #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-}@@ -37,6 +38,9 @@  import Control.DeepSeq import Control.Monad+#if USE_BINARY+import qualified Data.Binary+#endif import Data.Data import Data.ExactPi import Data.Kind@@ -115,6 +119,10 @@   mempty = demoteQuantity (1 Dim.*~ one)   mappend = (<>) +#if USE_BINARY+instance (Data.Binary.Binary a) => Data.Binary.Binary (AnyQuantity a)+#endif+ -- | Possibly a 'Quantity' whose 'Dimension' is only known dynamically. -- -- By modeling the absence of a value, this type differs from 'AnyQuantity' in that it may@@ -193,6 +201,10 @@ instance Num a => Monoid (DynQuantity a) where   mempty = demoteQuantity (1 Dim.*~ one)   mappend = (<>)++#if USE_BINARY+instance (Data.Binary.Binary a) => Data.Binary.Binary (DynQuantity a)+#endif  -- | A 'DynQuantity' which does not correspond to a value of any dimension. invalidQuantity :: DynQuantity a
src/Numeric/Units/Dimensional/Float.hs view
@@ -45,6 +45,7 @@ import Numeric.Units.Dimensional.Coercion  -- $setup+-- >>> :set -fno-warn-type-defaults -- >>> :set -XExtendedDefaultRules -- >>> :set -XNegativeLiterals 
src/Numeric/Units/Dimensional/Internal.hs view
@@ -28,6 +28,9 @@ import Control.Applicative import Control.DeepSeq import Data.AEq (AEq)+#if USE_BINARY+import qualified Data.Binary+#endif import Data.Coerce (coerce) import Data.Data import Data.Kind@@ -57,6 +60,7 @@  -- $setup -- >>> :set -XNoImplicitPrelude+-- >>> :set -fno-warn-type-defaults -- >>> import Numeric.Units.Dimensional.Prelude  -- | A unit of measurement.@@ -136,6 +140,10 @@ instance (Num a) => Monoid (SQuantity s d a) where   mempty = Quantity 0   mappend = (<>)++#if USE_BINARY+deriving instance (Data.Binary.Binary a) => Data.Binary.Binary (SQuantity s d a)+#endif  {- 
src/Numeric/Units/Dimensional/NonSI.hs view
@@ -85,6 +85,7 @@ import qualified Prelude  -- $setup+-- >>> :set -fno-warn-type-defaults -- >>> import Data.ExactPi -- >>> import Data.Function (on) -- >>> import Numeric.Units.Dimensional.Coercion
src/Numeric/Units/Dimensional/Quantities.hs view
@@ -418,6 +418,7 @@ -}  -- $setup+-- >>> :set -fno-warn-type-defaults -- >>> import Numeric.Units.Dimensional.Prelude  -- | Constructs a unit of area from a unit of length, taking the area of a square whose sides are that length.
src/Numeric/Units/Dimensional/SIUnits.hs view
@@ -52,9 +52,9 @@   astronomicalUnit,   -- * SI Prefixes   -- $multiples-  deka, deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta,+  deka, deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta, ronna, quetta,   -- $submultiples-  deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto,+  deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto, ronto, quecto,   -- $reified-prefixes   Prefix, applyPrefix, siPrefixes )@@ -88,7 +88,7 @@     n' = N.applyPrefix p (name u)     x = N.scaleFactor p -deca, deka, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta+deca, deka, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta, ronna, quetta   :: Num a => Unit 'Metric d a -> Unit 'NonMetric d a -- | The "deca" prefix, denoting a factor of 10. deca  = applyMultiple I.deca -- International English.@@ -112,7 +112,12 @@ zetta = applyMultiple I.zetta -- | The "yotta" prefix, denoting a factor of 10^24. yotta = applyMultiple I.yotta+-- | The "ronna" prefix, denoting a factor of 10^27.+ronna = applyMultiple I.ronna+-- | The "quetta" prefix, denoting a factor of 10^30.+quetta = applyMultiple I.quetta + {- $submultiples Then the submultiples. -}@@ -124,7 +129,7 @@     n' = N.applyPrefix p (name u)     x = N.scaleFactor p -deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto+deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto, ronto, quecto   :: Fractional a => Unit 'Metric d a -> Unit 'NonMetric d a -- | The "deci" prefix, denoting a factor of 0.1. deci  = applyPrefix I.deci@@ -146,6 +151,11 @@ zepto = applyPrefix I.zepto -- | The "yocto" prefix, denoting a factor of 10^-24. yocto = applyPrefix I.yocto+-- | The "ronto" prefix, denoting a factor of 10^-27.+ronto = applyPrefix I.ronto+-- | The "quecto" prefix, denoting a factor of 10^-30.+quecto = applyPrefix I.quecto+  {- $reified-prefixes 
src/Numeric/Units/Dimensional/UnitNames/Internal.hs view
@@ -187,7 +187,7 @@ baseUnitNames :: [UnitName 'NonMetric] baseUnitNames = [weaken nMeter, nKilogram, weaken nSecond, weaken nAmpere, weaken nKelvin, weaken nMole, weaken nCandela] -deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta :: Prefix+deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta, ronna, quetta :: Prefix deca  = prefix "da" "da" "deca" 1e1 hecto = prefix "h" "h" "hecto"  1e2 kilo  = prefix "k" "k" "kilo"   1e3@@ -198,7 +198,10 @@ exa   = prefix "E" "E" "exa"    1e18 zetta = prefix "Z" "Z" "zetta"  1e21 yotta = prefix "Y" "Y" "yotta"  1e24-deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto :: Prefix+ronna = prefix "R" "R" "ronna" 1e27+quetta = prefix "Q" "Q" "quetta" 1e30++deci, centi, milli, micro, nano, pico, femto, atto, zepto, yocto, ronto, quecto :: Prefix deci  = prefix "d" "d" "deci"   1e-1 centi = prefix "c" "c" "centi"  1e-2 milli = prefix "m" "m" "milli"  1e-3@@ -209,10 +212,13 @@ atto  = prefix "a" "a" "atto"   1e-18 zepto = prefix "z" "z" "zepto"  1e-21 yocto = prefix "y" "y" "yocto"  1e-24+ronto = prefix "r" "r" "ronto"  1e-27+quecto = prefix "q" "q" "quecto"  1e-30 + -- | A list of all 'Prefix'es defined by the SI. siPrefixes :: [Prefix]-siPrefixes = [yocto, zepto, atto, femto, pico, nano, micro, milli, centi, deci, deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta]+siPrefixes = [quecto, ronto, yocto, zepto, atto, femto, pico, nano, micro, milli, centi, deci, deca, hecto, kilo, mega, giga, tera, peta, exa, zetta, yotta, ronna, quetta]  -- | Forms a 'UnitName' from a 'Metric' name by applying a metric prefix. applyPrefix :: Prefix -> UnitName 'Metric -> UnitName 'NonMetric
− tests/DocTests.hs
@@ -1,17 +0,0 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE TypeSynonymInstances #-}--module Main (main) where--import System.FilePath.Glob (glob)-import Test.DocTest (doctest)--#if MIN_VERSION_base(4,12,0)-doctestFlags = ["-XNoStarIsType"]-#else-doctestFlags = []-#endif--main :: IO ()-main = glob "src/**/*.hs" >>= (doctest . (doctestFlags++))