{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE TypeSynonymInstances #-} module Facts.Geography.Countries.UnitedStates ( State (..) , StateAbbreviation (..) , StateCode , OtherUSEntity (..) , state_by_state_code , state_code_by_state ) where import Facts.Geography.Countries.UnitedStates.Internal.Data import Facts.Geography.Countries.UnitedStates.Internal.Splices import Data.Char import Data.Data import Data.Functor import Data.Maybe import Data.Typeable import Test.QuickCheck import Test.QuickCheck.Gen instance Show State where show Alabama = "Alabama" show Alaska = "Alaska" show Arkansas = "Arkansas" show Arizona = "Arizona" show California = "California" show Colorodo = "Colorodo" show Connecticut = "Connecticut" show Delaware = "Delaware" show Florida = "Florida" show Georgia = "Georgia" show Hawaii = "Hawaii" show Idaho = "Idaho" show Illinois = "Illinois" show Indiana = "Indiana" show Iowa = "Iowa" show Kansas = "Kansas" show Kentucky = "Kentucky" show Louisiana = "Louisiana" show Maine = "Maine" show Maryland = "Maryland" show Massachusetts = "Massachusetts" show Michigan = "Michigan" show Minnesota = "Minnesota" show Mississippi = "Mississippi" show Missouri = "Missouri" show Montana = "Montana" show Nebraska = "Nebraska" show Nevada = "Nevada" show NewHampshire = "New Hampshire" show NewJersey = "New Jersey" show NewMexico = "New Mexico" show NewYork = "New York" show NorthCarolina = "North Carolina" show NorthDakota = "North Dakota" show Ohio = "Ohio" show Oklahoma = "Oklahoma" show Oregon = "Oregon" show Pennsylvania = "Pennsylvania" show RhodeIsland = "Rhode Island" show SouthCarolina = "South Carolina" show SouthDakota = "South Dakota" show Tennessee = "Tennessee" show Texas = "Texas" show Utah = "Utah" show Vermont = "Vermont" show Virginia = "Virginia" show Washington = "Washington" show WestVirginia = "West Virginia" show Wisconsin = "Wisconsin" show Wyoming = "Wyoming" type StateCode = StateAbbreviation instance Arbitrary State where arbitrary = elements [Alabama .. Wyoming] instance Arbitrary StateCode where arbitrary = elements [AL .. WY] prop_state_and_state_code_are_inverses :: State -> Bool prop_state_and_state_code_are_inverses state = (state_by_state_code . state_code_by_state $ state) == state prop_state_code_and_state_are_inverses :: StateCode -> Bool prop_state_code_and_state_are_inverses code = (state_code_by_state . state_by_state_code $ code) == code