{-# OPTIONS_GHC -fwarn-incomplete-patterns  #-}
{-# OPTIONS_GHC -fwarn-missing-methods      #-}
{-# LANGUAGE DeriveDataTypeable             #-}
{-# LANGUAGE DeriveFunctor                  #-}
{-# LANGUAGE GeneralizedNewtypeDeriving     #-}
{-# LANGUAGE PatternGuards                  #-}
{-# LANGUAGE TemplateHaskell                #-}

module Facts.Geography.Countries.UnitedStates.Internal.Data where

import Data.Data
import Data.Typeable



-- | The 'State' data type is a list of States in the United States.
data State = Alabama       | Alaska      | Arizona       | Arkansas     | California
           | Colorodo      | Connecticut | Delaware      | Florida      | Georgia
           | Hawaii        | Idaho       | Illinois	     | Indiana      | Iowa
           | Kansas        | Kentucky    | Louisiana	 | Maine        | Maryland
           | Massachusetts | Michigan    | Minnesota     | Mississippi  | Missouri
           | Montana       | Nebraska    | Nevada        | NewHampshire | NewJersey
           | NewMexico     | NewYork	 | NorthCarolina | NorthDakota  | Ohio
           | Oklahoma      | Oregon	     | Pennsylvania  | RhodeIsland  | SouthCarolina
           | SouthDakota   | Tennessee   | Texas         | Utah         | Vermont
           | Virginia      | Washington	 | WestVirginia  | Wisconsin    | Wyoming
           deriving (Data, Enum, Eq, Ord, Typeable)

-- | State abbreviations:
data StateAbbreviation = AL | AK | AZ | AR | CA | CO | CT | DE | FL | GA
                       | HI | ID | IL | IN | IA | KS | KY | LA | ME | MD
                       | MA | MI | MN | MS | MO | MT | NE | NV | NH | NJ
                       | NM | NY | NC | ND | OH | OK | OR | PA | RI | SC
                       | SD | TN | TX | UT | VT | VA | WA | WV | WI | WY
                       deriving (Data, Enum, Eq, Ord, Show, Typeable)


-- | Other US Entities, such as protectorates, districts, and others:
data OtherUSEntity = AmericanSamoa
                   | Guam
                   | NorthernMarianaIslands
                   | PuertoRico
                   | USVirginIslands
                   | DistrictOfColumbia
                   deriving (Data, Eq, Ord, Typeable)

instance Show OtherUSEntity where
         show AmericanSamoa          = "American Samoa"
         show Guam                   = "Guam"
         show NorthernMarianaIslands = "Northern Mariana Islands"
         show PuertoRico             = "Puerto Rico"
         show USVirginIslands        = "U.S. Virgin Islands"
         show DistrictOfColumbia     = "District of Columbia"



-- | An easy to modify representation of the bijection between 'State's and their
--   'StateCode's.

states_and_state_codes :: [ (State, StateAbbreviation)]
states_and_state_codes  = [ ( Alabama       , AL )
                          , ( Alaska        , AK )
                          , ( Arizona       , AZ )
                          , ( Arkansas      , AR )
                          , ( California    , CA )
                          , ( Colorodo      , CO )
                          , ( Connecticut   , CT )
                          , ( Delaware      , DE )
                          , ( Florida       , FL )
                          , ( Georgia       , GA )
                          , ( Hawaii        , HI )
                          , ( Idaho         , ID )
                          , ( Illinois      , IL )
                          , ( Indiana       , IN )
                          , ( Iowa          , IA )
                          , ( Kansas        , KS )
                          , ( Kentucky      , KY )
                          , ( Louisiana     , LA )
                          , ( Maine         , ME )
                          , ( Maryland      , MD )
                          , ( Massachusetts , MA )
                          , ( Michigan      , MI )
                          , ( Minnesota     , MN )
                          , ( Mississippi   , MS )
                          , ( Missouri      , MO )
                          , ( Montana       , MT )
                          , ( Nebraska      , NE )
                          , ( Nevada        , NV )
                          , ( NewHampshire  , NH )
                          , ( NewJersey     , NJ )
                          , ( NewMexico     , NM )
                          , ( NewYork	    , NY )
                          , ( NorthCarolina , NC )
                          , ( NorthDakota   , ND )
                          , ( Ohio          , OH )
                          , ( Oklahoma      , OK )
                          , ( Oregon        , OR )
                          , ( Pennsylvania  , PA )
                          , ( RhodeIsland   , RI )
                          , ( SouthCarolina , SC )
                          , ( SouthDakota   , SD )
                          , ( Tennessee     , TN )
                          , ( Texas         , TX )
                          , ( Utah          , UT )
                          , ( Vermont       , VT )
                          , ( Virginia      , VA )
                          , ( Washington    , WA )
                          , ( WestVirginia  , WV )
                          , ( Wisconsin     , WI )
                          , ( Wyoming       , WY )
                          ]