{-# LANGUAGE TemplateHaskell, TypeFamilies, TypeOperators #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Units.Imperial.Length -- 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 , it so happens that -- Imperial and US customary units of length have the same base (the -- international yard at 0.9144 meters). However, if subdivisions are -- generally the same, Imperial units feature multiples of the yard that -- US customary ones generally don't (e.g. the Imperial furlong is defined -- by reference to the international yard, not the US survey one). -- -- 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: -- -- -- ----------------------------------------------------------------------------- module Data.Units.Imperial.Length where import Data.Metrology.TH import qualified Data.Units.US.Misc as US import Language.Haskell.TH declareDerivedUnit "Thou" [t| US.Mil |] 1 (Just "th") declareDerivedUnit "Inch" [t| US.Inch |] 1 (Just "in") declareDerivedUnit "Foot" [t| US.Foot |] 1 (Just "ft") declareDerivedUnit "Yard" [t| US.Yard |] 1 (Just "yd") declareDerivedUnit "Chain" [t| Yard |] 22 (Just "ch") declareDerivedUnit "Furlong" [t| Chain |] 10 (Just "fur") declareDerivedUnit "Mile" [t| US.Mile |] 1 (Just "mi") declareDerivedUnit "League" [t| Mile |] 3 (Just "lea") declareDerivedUnit "Hand" [t| Inch |] 4 (Just "hand") -- | Common lengths units: 'Foot', 'Inch', 'Yard', and 'Mile' commonLengths :: [Name] commonLengths = [ ''Foot, ''Inch, ''Yard, ''Mile ] -- | Other lengths units: 'Thou', 'Hand', 'Chain', 'Furlong' and 'League' otherLengths :: [Name] otherLengths = [ ''Thou, ''Hand, ''Chain, ''Furlong, ''League ]