{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.MXStateCodes
( Code(..)
, all
, toName
, fromName
)
where
import Data.Aeson ( ToJSON
, FromJSON
)
import qualified Data.Text as T
import GHC.Generics ( Generic )
import Prelude hiding ( all )
data Code
= AGU
| BCN
| BCS
| CAM
| CHH
| CHP
| CMX
| COA
| COL
| DUR
| GRO
| GUA
| HID
| JAL
| MEX
| MIC
| MOR
| NAY
| NLE
| OAX
| PUE
| QUE
| ROO
| SIN
| SLP
| SON
| TAB
| TAM
| TLA
| VER
| YUC
| ZAC
deriving (Show, Read, Eq, Enum, Bounded, Generic)
instance ToJSON Code
instance FromJSON Code
all :: [Code]
all = enumFrom minBound
toName :: Code -> T.Text
toName c = case c of
AGU -> "Aguascalientes"
BCN -> "Baja California"
BCS -> "Baja California Sur"
CAM -> "Campeche"
CHH -> "Chihuahua"
CHP -> "Chiapas"
CMX -> "Ciudad de México"
COA -> "Coahuila de Zaragoza"
COL -> "Colima"
DUR -> "Durango"
GRO -> "Guerrero"
GUA -> "Guanajuato"
HID -> "Hidalgo"
JAL -> "Jalisco"
MEX -> "México"
MIC -> "Michoacán de Ocampo"
MOR -> "Morelos"
NAY -> "Nayarit"
NLE -> "Nuevo León"
OAX -> "Oaxaca"
PUE -> "Puebla"
QUE -> "Querétaro"
ROO -> "Quintana Roo"
SIN -> "Sinaloa"
SLP -> "San Luis Potosí"
SON -> "Sonora"
TAB -> "Tabasco"
TAM -> "Tamaulipas"
TLA -> "Tlaxcala"
VER -> "Veracruz de Ignacio de la Llave"
YUC -> "Yucatán"
ZAC -> "Zacatecas"
fromName :: T.Text -> Maybe Code
fromName n = case T.toLower n of
"ciudad de méxico" -> Just CMX
"aguascalientes" -> Just AGU
"baja california" -> Just BCN
"baja california sur" -> Just BCS
"campeche" -> Just CAM
"coahuila de zaragoza" -> Just COA
"colima" -> Just COL
"chiapas" -> Just CHP
"chihuahua" -> Just CHH
"durango" -> Just DUR
"guanajuato" -> Just GUA
"guerrero" -> Just GRO
"hidalgo" -> Just HID
"jalisco" -> Just JAL
"méxico" -> Just MEX
"michoacán de ocampo" -> Just MIC
"morelos" -> Just MOR
"nayarit" -> Just NAY
"nuevo león" -> Just NLE
"oaxaca" -> Just OAX
"puebla" -> Just PUE
"querétaro" -> Just QUE
"quintana roo" -> Just ROO
"san luis potosí" -> Just SLP
"sinaloa" -> Just SIN
"sonora" -> Just SON
"tabasco" -> Just TAB
"tamaulipas" -> Just TAM
"tlaxcala" -> Just TLA
"veracruz de ignacio de la llave" -> Just VER
"yucatán" -> Just YUC
"zacatecas" -> Just ZAC
_ -> Nothing