{-# LANGUAGE TemplateHaskell, TypeFamilies, TypeOperators #-}

-----------------------------------------------------------------------------
-- |
-- Module      :  Data.Units.Imperial.Nautical
-- Copyright   :  (C) 2013 Richard Eisenberg
-- License     :  BSD-style (see LICENSE)
-- Maintainer  :  Richard Eisenberg (rae@cs.brynmawr.edu)
-- Stability   :  experimental
-- Portability :  non-portable
--
-- As per current UK legislation, the nautical mile is defined as 1853 m,
-- not 1852 (as it was previously).
--
-- 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.Nautical where

import Data.Metrology.TH

import Data.Units.SI

import Language.Haskell.TH

declareDerivedUnit "NauticalMile" [t| Metre        |] 1853 (Just "NM")
declareDerivedUnit "Cable"        [t| NauticalMile |] 0.1  (Just "cable")
declareDerivedUnit "Fathom"       [t| Cable        |] 0.01 (Just "ftm")

-- | Nautical lengths: All units above
nauticalLengths :: [Name]
nauticalLengths :: [Name]
nauticalLengths = [ ''Fathom, ''Cable, ''NauticalMile ]