jinquantities-0.1.0: Unit conversion and manipulation library.

Safe HaskellSafe
LanguageHaskell2010

Data.Quantities.Constructors

Description

Defines the common constructors used to build quantities.

Synopsis

Documentation

defaultDefinitions :: Either (QuantityError Double) Definitions Source #

Default set of definitions that come predefined.

>>> import Data.Quantities

fromString :: String -> Either (QuantityError Double) (Quantity Double) Source #

Create a Quantity by parsing a string. Uses an UndefinedUnitError for undefined units. Handles arithmetic expressions as well.

>>> fromString "25 m/s"
Right 25.0 meter / second
>>> fromString "fakeunit"
Left (UndefinedUnitError "fakeunit")
>>> fromString "ft + 12in"
Right 2.0 foot

This function also supports unit conversions, by placing "=>" in between two valid expressions. This behavior is undefined (and returns a ScalingFactorError) if the quantity to be converted to has a magnitude.

>>> fromString "min => s"
Right 60.0 second
>>> fromString "2 ft + 6 in => ft"
Right 2.5 foot
>>> fromString "m => 3 ft"
Left (ScalingFactorError 3.0 foot)

Make sure not to use dimensional quantities in exponents.

>>> fromString "m ** 2"
Right 1.0 meter ** 2
>>> fromString "m ** (2s)"
Left (ParserError "Used non-dimensionless exponent in ( Right 1.0 meter ) ** ( Right 2.0 second )")

fromString' :: Definitions -> String -> Either (QuantityError Double) (Quantity Double) Source #

Create quantities with custom definitions.

>>> let myDefString = defaultDefString ++ "\nmy_unit = 100 s"
>>> let (Right d) = readDefinitions myDefString
>>> let myFromString = fromString' d
>>> myFromString "25 my_unit"
Right 25.0 my_unit

unitsFromString :: String -> Either (QuantityError Double) CompoundUnit Source #

Parse units from a string. Equivalent to fmap units . fromString

>>> unitsFromString "N * s"
Right newton second