module Data.ISO3166_CountryCodes
(CountryCode(..),
countryNameFromCode,
readableCountryName
) where
import qualified Prelude as P
import Prelude ((.),not,(==),otherwise,(&&),(==),(/=))
import Control.Monad
import Data.Char
import Data.List
readableCountryName :: CountryCode -> P.String
readableCountryName
= concat . intersperse " " . rearrange . fmap up1 . words .
countryNameFromCode
where up1 [] = []
up1 (c:rest) | not (isAlpha c) = c:up1 rest
up1 "OF" = "of"
up1 "THE" = "the"
up1 "AND" = "and"
up1 "U.S." = "US"
up1 ('M':'C':l) = "Mc"++up1 l
up1 ('D':'\'':l) = "d'"++up1 l
up1 (c:cs) = toUpper c: downup cs
downup [] = []
downup (c:cs) | c=='-' = c:up1 cs
| otherwise = toLower c:downup cs
rearrange [] = []
rearrange [c] = [c]
rearrange ll@(n:l)
| last l `elem` ["of", "the"] && last n == ','
= onhead up1 l++[[c|c<-n,c/=',']]
| otherwise = ll
onhead f [] = []
onhead f (h:r) = f h:r
data CountryCode =
AF
|
AX
|
AL
|
DZ
|
AS
|
AD
|
AO
|
AI
|
AQ
|
AG
|
AR
|
AM
|
AW
|
AU
|
AT
|
AZ
|
BS
|
BH
|
BD
|
BB
|
BY
|
BE
|
BZ
|
BJ
|
BM
|
BT
|
BO
|
BQ
|
BA
|
BW
|
BV
|
BR
|
IO
|
BN
|
BG
|
BF
|
BI
|
KH
|
CM
|
CA
|
CV
|
KY
|
CF
|
TD
|
CL
|
CN
|
CX
|
CC
|
CO
|
KM
|
CG
|
CD
|
CK
|
CR
|
CI
|
HR
|
CU
|
CW
|
CY
|
CZ
|
DK
|
DJ
|
DM
|
DO
|
EC
|
EG
|
SV
|
GQ
|
ER
|
EE
|
ET
|
FK
|
FO
|
FJ
|
FI
|
FR
|
GF
|
PF
|
TF
|
GA
|
GM
|
GE
|
DE
|
GH
|
GI
|
GR
|
GL
|
GD
|
GP
|
GU
|
GT
|
GG
|
GN
|
GW
|
GY
|
HT
|
HM
|
VA
|
HN
|
HK
|
HU
|
IS
|
IN
|
ID
|
IR
|
IQ
|
IE
|
IM
|
IL
|
IT
|
JM
|
JP
|
JE
|
JO
|
KZ
|
KE
|
KI
|
KP
|
KR
|
KW
|
KG
|
LA
|
LV
|
LB
|
LS
|
LR
|
LY
|
LI
|
LT
|
LU
|
MO
|
MK
|
MG
|
MW
|
MY
|
MV
|
ML
|
MT
|
MH
|
MQ
|
MR
|
MU
|
YT
|
MX
|
FM
|
MD
|
MC
|
MN
|
ME
|
MS
|
MA
|
MZ
|
MM
|
NA
|
NR
|
NP
|
NL
|
NC
|
NZ
|
NI
|
NE
|
NG
|
NU
|
NF
|
MP
|
NO
|
OM
|
PK
|
PW
|
PS
|
PA
|
PG
|
PY
|
PE
|
PH
|
PN
|
PL
|
PT
|
PR
|
QA
|
RE
|
RO
|
RU
|
RW
|
BL
|
SH
|
KN
|
LC
|
MF
|
PM
|
VC
|
WS
|
SM
|
ST
|
SA
|
SN
|
RS
|
SC
|
SL
|
SG
|
SX
|
SK
|
SI
|
SB
|
SO
|
ZA
|
GS
|
SS
|
ES
|
LK
|
SD
|
SR
|
SJ
|
SZ
|
SE
|
CH
|
SY
|
TW
|
TJ
|
TZ
|
TH
|
TL
|
TG
|
TK
|
TO
|
TT
|
TN
|
TR
|
TM
|
TC
|
TV
|
UG
|
UA
|
AE
|
GB
|
US
|
UM
|
UY
|
UZ
|
VU
|
VE
|
VN
|
VG
|
VI
|
WF
|
EH
|
YE
|
ZM
|
ZW
deriving (P.Eq,P.Read,P.Show,P.Enum,P.Bounded,P.Ord)
countryNameFromCode:: CountryCode -> P.String
countryNameFromCode AF = "AFGHANISTAN"
countryNameFromCode AX = "ÅLAND ISLANDS"
countryNameFromCode AL = "ALBANIA"
countryNameFromCode DZ = "ALGERIA"
countryNameFromCode AS = "AMERICAN SAMOA"
countryNameFromCode AD = "ANDORRA"
countryNameFromCode AO = "ANGOLA"
countryNameFromCode AI = "ANGUILLA"
countryNameFromCode AQ = "ANTARCTICA"
countryNameFromCode AG = "ANTIGUA AND BARBUDA"
countryNameFromCode AR = "ARGENTINA"
countryNameFromCode AM = "ARMENIA"
countryNameFromCode AW = "ARUBA"
countryNameFromCode AU = "AUSTRALIA"
countryNameFromCode AT = "AUSTRIA"
countryNameFromCode AZ = "AZERBAIJAN"
countryNameFromCode BS = "BAHAMAS"
countryNameFromCode BH = "BAHRAIN"
countryNameFromCode BD = "BANGLADESH"
countryNameFromCode BB = "BARBADOS"
countryNameFromCode BY = "BELARUS"
countryNameFromCode BE = "BELGIUM"
countryNameFromCode BZ = "BELIZE"
countryNameFromCode BJ = "BENIN"
countryNameFromCode BM = "BERMUDA"
countryNameFromCode BT = "BHUTAN"
countryNameFromCode BO = "BOLIVIA, PLURINATIONAL STATE OF"
countryNameFromCode BQ = "BONAIRE, SINT EUSTATIUS AND SABA"
countryNameFromCode BA = "BOSNIA AND HERZEGOVINA"
countryNameFromCode BW = "BOTSWANA"
countryNameFromCode BV = "BOUVET ISLAND"
countryNameFromCode BR = "BRAZIL"
countryNameFromCode IO = "BRITISH INDIAN OCEAN TERRITORY"
countryNameFromCode BN = "BRUNEI DARUSSALAM"
countryNameFromCode BG = "BULGARIA"
countryNameFromCode BF = "BURKINA FASO"
countryNameFromCode BI = "BURUNDI"
countryNameFromCode KH = "CAMBODIA"
countryNameFromCode CM = "CAMEROON"
countryNameFromCode CA = "CANADA"
countryNameFromCode CV = "CAPE VERDE"
countryNameFromCode KY = "CAYMAN ISLANDS"
countryNameFromCode CF = "CENTRAL AFRICAN REPUBLIC"
countryNameFromCode TD = "CHAD"
countryNameFromCode CL = "CHILE"
countryNameFromCode CN = "CHINA"
countryNameFromCode CX = "CHRISTMAS ISLAND"
countryNameFromCode CC = "COCOS (KEELING) ISLANDS"
countryNameFromCode CO = "COLOMBIA"
countryNameFromCode KM = "COMOROS"
countryNameFromCode CG = "CONGO"
countryNameFromCode CD = "CONGO, THE DEMOCRATIC REPUBLIC OF THE"
countryNameFromCode CK = "COOK ISLANDS"
countryNameFromCode CR = "COSTA RICA"
countryNameFromCode CI = "CÔTE D'IVOIRE"
countryNameFromCode HR = "CROATIA"
countryNameFromCode CU = "CUBA"
countryNameFromCode CW = "CURAÇAO"
countryNameFromCode CY = "CYPRUS"
countryNameFromCode CZ = "CZECH REPUBLIC"
countryNameFromCode DK = "DENMARK"
countryNameFromCode DJ = "DJIBOUTI"
countryNameFromCode DM = "DOMINICA"
countryNameFromCode DO = "DOMINICAN REPUBLIC"
countryNameFromCode EC = "ECUADOR"
countryNameFromCode EG = "EGYPT"
countryNameFromCode SV = "EL SALVADOR"
countryNameFromCode GQ = "EQUATORIAL GUINEA"
countryNameFromCode ER = "ERITREA"
countryNameFromCode EE = "ESTONIA"
countryNameFromCode ET = "ETHIOPIA"
countryNameFromCode FK = "FALKLAND ISLANDS (MALVINAS)"
countryNameFromCode FO = "FAROE ISLANDS"
countryNameFromCode FJ = "FIJI"
countryNameFromCode FI = "FINLAND"
countryNameFromCode FR = "FRANCE"
countryNameFromCode GF = "FRENCH GUIANA"
countryNameFromCode PF = "FRENCH POLYNESIA"
countryNameFromCode TF = "FRENCH SOUTHERN TERRITORIES"
countryNameFromCode GA = "GABON"
countryNameFromCode GM = "GAMBIA"
countryNameFromCode GE = "GEORGIA"
countryNameFromCode DE = "GERMANY"
countryNameFromCode GH = "GHANA"
countryNameFromCode GI = "GIBRALTAR"
countryNameFromCode GR = "GREECE"
countryNameFromCode GL = "GREENLAND"
countryNameFromCode GD = "GRENADA"
countryNameFromCode GP = "GUADELOUPE"
countryNameFromCode GU = "GUAM"
countryNameFromCode GT = "GUATEMALA"
countryNameFromCode GG = "GUERNSEY"
countryNameFromCode GN = "GUINEA"
countryNameFromCode GW = "GUINEA-BISSAU"
countryNameFromCode GY = "GUYANA"
countryNameFromCode HT = "HAITI"
countryNameFromCode HM = "HEARD ISLAND AND MCDONALD ISLANDS"
countryNameFromCode VA = "HOLY SEE (VATICAN CITY STATE)"
countryNameFromCode HN = "HONDURAS"
countryNameFromCode HK = "HONG KONG"
countryNameFromCode HU = "HUNGARY"
countryNameFromCode IS = "ICELAND"
countryNameFromCode IN = "INDIA"
countryNameFromCode ID = "INDONESIA"
countryNameFromCode IR = "IRAN, ISLAMIC REPUBLIC OF"
countryNameFromCode IQ = "IRAQ"
countryNameFromCode IE = "IRELAND"
countryNameFromCode IM = "ISLE OF MAN"
countryNameFromCode IL = "ISRAEL"
countryNameFromCode IT = "ITALY"
countryNameFromCode JM = "JAMAICA"
countryNameFromCode JP = "JAPAN"
countryNameFromCode JE = "JERSEY"
countryNameFromCode JO = "JORDAN"
countryNameFromCode KZ = "KAZAKHSTAN"
countryNameFromCode KE = "KENYA"
countryNameFromCode KI = "KIRIBATI"
countryNameFromCode KP = "KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF"
countryNameFromCode KR = "KOREA, REPUBLIC OF"
countryNameFromCode KW = "KUWAIT"
countryNameFromCode KG = "KYRGYZSTAN"
countryNameFromCode LA = "LAO PEOPLE'S DEMOCRATIC REPUBLIC"
countryNameFromCode LV = "LATVIA"
countryNameFromCode LB = "LEBANON"
countryNameFromCode LS = "LESOTHO"
countryNameFromCode LR = "LIBERIA"
countryNameFromCode LY = "LIBYA"
countryNameFromCode LI = "LIECHTENSTEIN"
countryNameFromCode LT = "LITHUANIA"
countryNameFromCode LU = "LUXEMBOURG"
countryNameFromCode MO = "MACAO"
countryNameFromCode MK = "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF"
countryNameFromCode MG = "MADAGASCAR"
countryNameFromCode MW = "MALAWI"
countryNameFromCode MY = "MALAYSIA"
countryNameFromCode MV = "MALDIVES"
countryNameFromCode ML = "MALI"
countryNameFromCode MT = "MALTA"
countryNameFromCode MH = "MARSHALL ISLANDS"
countryNameFromCode MQ = "MARTINIQUE"
countryNameFromCode MR = "MAURITANIA"
countryNameFromCode MU = "MAURITIUS"
countryNameFromCode YT = "MAYOTTE"
countryNameFromCode MX = "MEXICO"
countryNameFromCode FM = "MICRONESIA, FEDERATED STATES OF"
countryNameFromCode MD = "MOLDOVA, REPUBLIC OF"
countryNameFromCode MC = "MONACO"
countryNameFromCode MN = "MONGOLIA"
countryNameFromCode ME = "MONTENEGRO"
countryNameFromCode MS = "MONTSERRAT"
countryNameFromCode MA = "MOROCCO"
countryNameFromCode MZ = "MOZAMBIQUE"
countryNameFromCode MM = "MYANMAR"
countryNameFromCode NA = "NAMIBIA"
countryNameFromCode NR = "NAURU"
countryNameFromCode NP = "NEPAL"
countryNameFromCode NL = "NETHERLANDS"
countryNameFromCode NC = "NEW CALEDONIA"
countryNameFromCode NZ = "NEW ZEALAND"
countryNameFromCode NI = "NICARAGUA"
countryNameFromCode NE = "NIGER"
countryNameFromCode NG = "NIGERIA"
countryNameFromCode NU = "NIUE"
countryNameFromCode NF = "NORFOLK ISLAND"
countryNameFromCode MP = "NORTHERN MARIANA ISLANDS"
countryNameFromCode NO = "NORWAY"
countryNameFromCode OM = "OMAN"
countryNameFromCode PK = "PAKISTAN"
countryNameFromCode PW = "PALAU"
countryNameFromCode PS = "PALESTINE, STATE OF"
countryNameFromCode PA = "PANAMA"
countryNameFromCode PG = "PAPUA NEW GUINEA"
countryNameFromCode PY = "PARAGUAY"
countryNameFromCode PE = "PERU"
countryNameFromCode PH = "PHILIPPINES"
countryNameFromCode PN = "PITCAIRN"
countryNameFromCode PL = "POLAND"
countryNameFromCode PT = "PORTUGAL"
countryNameFromCode PR = "PUERTO RICO"
countryNameFromCode QA = "QATAR"
countryNameFromCode RE = "RÉUNION"
countryNameFromCode RO = "ROMANIA"
countryNameFromCode RU = "RUSSIAN FEDERATION"
countryNameFromCode RW = "RWANDA"
countryNameFromCode BL = "SAINT BARTHÉLEMY"
countryNameFromCode SH = "SAINT HELENA, ASCENSION AND TRISTAN DA CUNHA"
countryNameFromCode KN = "SAINT KITTS AND NEVIS"
countryNameFromCode LC = "SAINT LUCIA"
countryNameFromCode MF = "SAINT MARTIN (FRENCH PART)"
countryNameFromCode PM = "SAINT PIERRE AND MIQUELON"
countryNameFromCode VC = "SAINT VINCENT AND THE GRENADINES"
countryNameFromCode WS = "SAMOA"
countryNameFromCode SM = "SAN MARINO"
countryNameFromCode ST = "SAO TOME AND PRINCIPE"
countryNameFromCode SA = "SAUDI ARABIA"
countryNameFromCode SN = "SENEGAL"
countryNameFromCode RS = "SERBIA"
countryNameFromCode SC = "SEYCHELLES"
countryNameFromCode SL = "SIERRA LEONE"
countryNameFromCode SG = "SINGAPORE"
countryNameFromCode SX = "SINT MAARTEN (DUTCH PART)"
countryNameFromCode SK = "SLOVAKIA"
countryNameFromCode SI = "SLOVENIA"
countryNameFromCode SB = "SOLOMON ISLANDS"
countryNameFromCode SO = "SOMALIA"
countryNameFromCode ZA = "SOUTH AFRICA"
countryNameFromCode GS = "SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS"
countryNameFromCode SS = "SOUTH SUDAN"
countryNameFromCode ES = "SPAIN"
countryNameFromCode LK = "SRI LANKA"
countryNameFromCode SD = "SUDAN"
countryNameFromCode SR = "SURINAME"
countryNameFromCode SJ = "SVALBARD AND JAN MAYEN"
countryNameFromCode SZ = "SWAZILAND"
countryNameFromCode SE = "SWEDEN"
countryNameFromCode CH = "SWITZERLAND"
countryNameFromCode SY = "SYRIAN ARAB REPUBLIC"
countryNameFromCode TW = "TAIWAN, PROVINCE OF CHINA"
countryNameFromCode TJ = "TAJIKISTAN"
countryNameFromCode TZ = "TANZANIA, UNITED REPUBLIC OF"
countryNameFromCode TH = "THAILAND"
countryNameFromCode TL = "TIMOR-LESTE"
countryNameFromCode TG = "TOGO"
countryNameFromCode TK = "TOKELAU"
countryNameFromCode TO = "TONGA"
countryNameFromCode TT = "TRINIDAD AND TOBAGO"
countryNameFromCode TN = "TUNISIA"
countryNameFromCode TR = "TURKEY"
countryNameFromCode TM = "TURKMENISTAN"
countryNameFromCode TC = "TURKS AND CAICOS ISLANDS"
countryNameFromCode TV = "TUVALU"
countryNameFromCode UG = "UGANDA"
countryNameFromCode UA = "UKRAINE"
countryNameFromCode AE = "UNITED ARAB EMIRATES"
countryNameFromCode GB = "UNITED KINGDOM"
countryNameFromCode US = "UNITED STATES"
countryNameFromCode UM = "UNITED STATES MINOR OUTLYING ISLANDS"
countryNameFromCode UY = "URUGUAY"
countryNameFromCode UZ = "UZBEKISTAN"
countryNameFromCode VU = "VANUATU"
countryNameFromCode VE = "VENEZUELA, BOLIVARIAN REPUBLIC OF"
countryNameFromCode VN = "VIET NAM"
countryNameFromCode VG = "VIRGIN ISLANDS, BRITISH"
countryNameFromCode VI = "VIRGIN ISLANDS, U.S."
countryNameFromCode WF = "WALLIS AND FUTUNA"
countryNameFromCode EH = "WESTERN SAHARA"
countryNameFromCode YE = "YEMEN"
countryNameFromCode ZM = "ZAMBIA"
countryNameFromCode ZW = "ZIMBABWE"