Usage

Simply importing Numeric.Units.Dimensional.Prelude provides access to dimensional arithmetic opertors, SI units and other common units
accepted for use with the SI, and convenient aliases for quantities with commonly used dimensions.

The Unit d a type represents a unit with dimension d, whose conversion factor to the coherent SI base unit of the corresponding dimension
is represented by a value of type a. a is commonly chosen to be Double, but can be any Floating type. Where possible, support is also
provided for Fractional or Num values.

Similarly, the Quantity d a type represents a quantity with dimension d, whose numeric value is of type a. Aliases allow the use of, e.g.,
Length Double to mean Quantity DLength Double. A complete list of available aliases is given in the haddock documentation for the
Numeric.Units.Dimensional.Quantities.

In the example below, we will solve a simple word problem.

A car travels at 60 kilometers per hour for one mile, at 50 kph for one mile,
at 40 kph for one mile, and at 30 kph for one mile. How many minutes does the journey take?
What is the average speed of the car? How many seconds does the journey take, rounded up to the next whole second?

Breaking: Changed Numeric.Units.Dimensional.Prelude to export (.) and id
from Control.Category instead of from Prelude.

Breaking: Created a product function which take the product of a foldable structure of
Dimensionless values. Exported this product function from Numeric.Units.Dimensional.Prelude
instead of the one from Prelude.

Breaking: Changed the HasDimension typeclass to require an instance of the new
HasDynamicDimension typeclass.

Breaking: Added operators for AnyUnit to the Numeric.Units.Dimensional.Dynamic
module which may cause name collisions.

Breaking: Added dynamic versions of (*~), (/~), and siUnit to the Numeric.Units.Dimensional.Dynamic
module which may cause name collisions.

Breaking: Removed exports of nMeter, nSecond, kilo, etc from Numeric.Units.Dimensional.UnitNames.
Access these instead by inspecting the relevant units or prefixes.

Breaking: Generalized the type of dimensionlessLength from
(Num a, Foldable f) => f (Dimensional v d a) -> Dimensionless a) to
(Num a, Foldable f) => f b -> Dimensionless a. This provides a weaker constraint on the type a
and may result in ambiguous types in code that depends on the former less general type.