units-defs-2.2.1: Data/Units/Imperial/Weight.hs
{-# LANGUAGE TemplateHaskell, TypeFamilies, TypeOperators #-}
-----------------------------------------------------------------------------
-- |
-- Module : Data.Units.Imperial.Weight
-- Copyright : (C) 2013 Richard Eisenberg
-- License : BSD-style (see LICENSE)
-- Maintainer : Richard Eisenberg (rae@cs.brynmawr.edu)
-- Stability : experimental
-- Portability : non-portable
--
-- Due to the <https://en.wikipedia.org/wiki/International_yard_and_pound
-- International yard and pound agreement of 1959>, it so happens that
-- Imperial and US customary units of weight have the same base (the
-- international pound at 0.45359237 kilograms). However, if subdivisions
-- are generally the same, Imperial units feature different multiples of
-- the pound, due to the presence of the stone. As in, using English
-- conventions, the hundredweight is the *long* one (the short one is the
-- cental). As is the ton.
-- Also, of the troy system (the international one being, more or less,
-- the avoirdupoids one) only the ounce is legal.
--
-- Where possible, reference have been made to UK legislation. However,
-- Wikipedia's page is /much/ better organized than any government
-- resource immediately available.
--
-- The UK legislation used as references are as follows:
-- <http://www.legislation.gov.uk/ukpga/1985/72/enacted>
-- <http://www.legislation.gov.uk/uksi/1994/2867/schedule/part/VI/made>
-- <http://www.legislation.gov.uk/uksi/1995/1804/schedule/made>
-----------------------------------------------------------------------------
module Data.Units.Imperial.Weight where
import Data.Metrology.TH
import qualified Data.Units.SI as SI
import qualified Data.Units.US.Avoirdupois as Avdp
import Language.Haskell.TH
declareDerivedUnit "Pound" [t| Avdp.Pound |] 1 (Just "lb")
declareDerivedUnit "Grain" [t| Avdp.Grain |] 1 (Just "gr")
declareDerivedUnit "Dram" [t| Avdp.Dram |] 1 (Just "dr")
declareDerivedUnit "Ounce" [t| Avdp.Ounce |] 1 (Just "oz")
declareDerivedUnit "TroyOunce" [t| SI.Gramme |] 31.1034768 (Just "t oz")
declareDerivedUnit "Stone" [t| Pound |] 14 (Just "st")
declareDerivedUnit "Quarter" [t| Stone |] 2 (Just "qr")
declareDerivedUnit "Cental" [t| Pound |] 100 (Just "cental")
declareDerivedUnit "Hundredweight" [t| Quarter |] 4 (Just "cwt")
declareDerivedUnit "Ton" [t| Hundredweight |] 20 (Just "t")
-- | Includes 'Ounce', 'Pound', 'Ton'
commonMassMeasures :: [Name]
commonMassMeasures = [ ''Ounce, ''Pound, ''Ton ]
-- | Includes 'Grain', 'Dram', 'TroyOunce', 'Stone', 'Quarter', 'Cental' and 'Hundredweight'
otherMassMeasures :: [Name]
otherMassMeasures = [ ''Grain, ''Dram, ''TroyOunce, ''Stone, ''Quarter, ''Cental, ''Hundredweight ]