units-defs-2.2.1: Data/Units/Astronomical.hs
{-# LANGUAGE TemplateHaskell, TypeFamilies, TypeOperators #-}
-----------------------------------------------------------------------------
-- |
-- Module : Data.Units.Astronomical
-- Copyright : (C) 2013 Richard Eisenberg
-- License : BSD-style (see LICENSE)
-- Maintainer : Richard Eisenberg (rae@cs.brynmawr.edu)
-- Stability : experimental
-- Portability : non-portable
--
-- The system of astronomical units, as defined by the International
-- Astronomical Union in 1976 and since then updated a few times.
--
-- The IAU documents used as reference are as follows:
-- <http://www.iau.org/static/resolutions/IAU1976_French.pdf>
-- <http://www.iau.org/static/resolutions/IAU1994_French.pdf>
-- <http://syrte.obspm.fr/IAU_resolutions/Res_IAU2012_B2.pdf>
-- <https://www.iau.org/publications/proceedings_rules/units/>
-----------------------------------------------------------------------------
module Data.Units.Astronomical (
-- * Lengths
AstronomicalUnit(..), LightYear(..), Parsec(..),
-- * Time
Day(..), JulianYear(..), JulianCentury(..),
-- * Mass
SolarMass(..), JovianMass(..), EarthMass(..)
) where
import Data.Constants.Math
import Data.Metrology.TH
import Data.Metrology
import Data.Units.SI
import Data.Units.SI.Prefixes
declareDerivedUnit "Day" [t| Second |] 86400 (Just "D")
declareDerivedUnit "JulianCentury" [t| Day |] 36525 (Just "julian century")
declareDerivedUnit "JulianYear" [t| JulianCentury |] 0.01 (Just "a")
declareDerivedUnit "AstronomicalUnit" [t| Metre |] 149597870700 (Just "au")
declareDerivedUnit "LightYear" [t| Metre |] 9460730472580800 (Just "ly")
declareDerivedUnit "Parsec" [t| AstronomicalUnit |] (648000 / piR) (Just "pc")
declareDerivedUnit "SolarMass" [t| Kilo :@ Gram |] (1.9891 * 10 ^ (30 :: Int)) (Just "S")
declareDerivedUnit "EarthMass" [t| SolarMass |] (1 / 332946.0487) (Just "E")
declareDerivedUnit "JovianMass" [t| SolarMass |] (1 / 1047.348644) (Just "MJ")