diff --git a/ChangeLog.md b/ChangeLog.md
new file mode 100644
--- /dev/null
+++ b/ChangeLog.md
@@ -0,0 +1,7 @@
+# Revision history for data-standards
+
+## 0.1.0.0  -- 2018-07-06
+
+* ISO 3166-1, in all three variants (alpha-2, alpha-3, and numeric)
+  * Methods of converting between all three
+  * Historic or otherwise discouraged codes marked as such
diff --git a/Data/Standards/ISO/Country/Primary.hs b/Data/Standards/ISO/Country/Primary.hs
new file mode 100644
--- /dev/null
+++ b/Data/Standards/ISO/Country/Primary.hs
@@ -0,0 +1,24 @@
+{-# OPTIONS_HADDOCK not-home #-}
+
+{- | Module      : Data.Standards.ISO.Country.Primary
+ -   Description : The country codes described by ISO 3166-1.
+ -   Copyright   : (c) 2018 Samuel May
+ -   License     : MPL-2.0
+ -   Maintainer  : ag.eitilt@gmail.com
+ -   Stability   : provisional
+ -   Portability : portable
+ -}
+module Data.Standards.ISO.Country.Primary
+    ( module Data.Standards.ISO.Country.Primary.Translation
+    , A2.Alpha2 ( .. )
+    , A3.Alpha3 ( .. )
+    , N.Numeric ( .. )
+    , C.Status ( .. )
+    ) where
+
+import qualified Data.Standards.ISO.Country.Primary.Alpha2 as A2
+import qualified Data.Standards.ISO.Country.Primary.Alpha3 as A3
+import qualified Data.Standards.ISO.Country.Primary.Common as C
+import qualified Data.Standards.ISO.Country.Primary.Numeric as N
+
+import Data.Standards.ISO.Country.Primary.Translation
diff --git a/Data/Standards/ISO/Country/Primary/Alpha2.hs b/Data/Standards/ISO/Country/Primary/Alpha2.hs
new file mode 100644
--- /dev/null
+++ b/Data/Standards/ISO/Country/Primary/Alpha2.hs
@@ -0,0 +1,473 @@
+{- | Module      : Data.Standards.ISO.Country.Primary.Alpha2
+ -   Description : The two-character country codes described by ISO 3166-1.
+ -   Copyright   : (c) 2018 Samuel May
+ -   License     : MPL-2.0
+ -   Maintainer  : ag.eitilt@gmail.com
+ -   Stability   : provisional
+ -   Portability : portable
+ -}
+module Data.Standards.ISO.Country.Primary.Alpha2
+    ( Alpha2 ( .. )
+    , Status ( .. )
+    , codeStatus
+    ) where
+
+import Data.Standards.ISO.Country.Primary.Common
+
+import qualified Data.Hashable as H
+
+{-# WARNING UK "Official country code is GB" #-}
+
+{-# DEPRECATED AN "Divided into BQ, CW and SX, or use ISO 3166-3 code ANHH" #-}
+{-# DEPRECATED BU "Use new code MM or ISO 3166-3 code BUMM" #-}
+{-# DEPRECATED CS "Divided into ME and RS, or use ISO 3166-3 code CSXX; previous usage divided into CZ and SK, or use ISO 3166-3 code CSHH" #-}
+{-# DEPRECATED NT "Divided between IQ and SA, or use ISO 3166-3 code NTHH" #-}
+{-# DEPRECATED TP "Use new code TL or ISO 3166-3 code TPTL" #-}
+{-# DEPRECATED YU "Use ISO 3166-3 code YUCS" #-}
+{-# DEPRECATED ZR "Use new code CD or ISO 3166-3 code ZRCD" #-}
+
+{-# DEPRECATED DY "Use official code BJ" #-}
+{-# DEPRECATED EW "Use official code EE" #-}
+{-# DEPRECATED FL "Use official code LI" #-}
+{-# DEPRECATED JA "Use official code JM" #-}
+{-# DEPRECATED LF "Use code for entire country LY" #-}
+{-# DEPRECATED PI "Use official code PH" #-}
+{-# DEPRECATED RA "Use official code AR" #-}
+{-# DEPRECATED RB "Use official code BO or BW, respectively" #-}
+{-# DEPRECATED RC "Use official code CN" #-}
+{-# DEPRECATED RH "Use official code HT" #-}
+{-# DEPRECATED RI "Use official code ID" #-}
+{-# DEPRECATED RM "Use official code MG" #-}
+{-# DEPRECATED RN "Use official code NE" #-}
+{-# DEPRECATED RP "Use official code PH" #-}
+{-# DEPRECATED SF "Use official code FI" #-}
+{-# DEPRECATED WG "Use official code GD" #-}
+{-# DEPRECATED WL "Use official code LC" #-}
+{-# DEPRECATED WV "Use official code VC" #-}
+{-# DEPRECATED YV "Use official code VE" #-}
+
+{-# WARNING AP,BX,EF,EM,EP,EV,GC,IB,OA,WO "Not an official ISO 3166-1 code" #-}
+
+{-# DEPRECATED CT "Use new code KI or ISO 3166-3 code CTKI" #-}
+{-# DEPRECATED DD "Use new code DE or ISO 3166-3 code DDDE" #-}
+{-# DEPRECATED FQ "Divided into TF and part of AQ, or use ISO 3166-3 code FQHH" #-}
+{-# DEPRECATED HV "Use new code BF or ISO 3166-3 code HVBF" #-}
+{-# DEPRECATED JT "Use new code UM or ISO 3166-3 code JTUM" #-}
+{-# DEPRECATED MI "Use new code UM or ISO 3166-3 code MIUM" #-}
+{-# DEPRECATED NH "Use new code VU or ISO 3166-3 code NHVU" #-}
+{-# DEPRECATED NQ "Use new code AQ or ISO 3166-3 code NQAQ" #-}
+{-# DEPRECATED PC "Divided into FM, MH, MP and PW, or use ISO 3166-3 code PCHH" #-}
+{-# DEPRECATED PU "Use new code UM or ISO 3166-3 code PUUM" #-}
+{-# DEPRECATED PZ "Use new code PA or ISO 3166-3 code PZPA" #-}
+{-# DEPRECATED VD "Use new code VN or ISO 3166-3 code VDVN" #-}
+{-# DEPRECATED WK "Use new code UM or ISO 3166-3 code WKUM" #-}
+{-# DEPRECATED YD "Use new code YE or ISO 3166-3 code YDYE" #-}
+
+-- | The official, recommended codes for countries, translated into a type-safe
+-- representation.  Unless otherwise specified, all codes are 'Official'.
+data Alpha2
+    = AC  -- ^ 'ExceptionalReservation': Ascension Island
+    | AD  -- ^ Andorra
+    | AE  -- ^ United Arab Emirates (the)
+    | AF  -- ^ Afghanistan
+    | AG  -- ^ Antigua and Barbuda
+    | AI  -- ^ Anguilla; previously French Afar and Issas
+    | AL  -- ^ Albania
+    | AM  -- ^ Armenia
+    | AN  -- ^ 'TransitionalReservation': Netherlands Antilles
+    | AO  -- ^ Angola
+    | AP  -- ^ 'NotInUse': African Regional Industrial Property Organization
+    | AQ  -- ^ Antarctica
+    | AR  -- ^ Argentina
+    | AS  -- ^ American Samoa
+    | AT  -- ^ Austria
+    | AU  -- ^ Australia
+    | AW  -- ^ Aruba
+    | AX  -- ^ Åland Islands
+    | AZ  -- ^ Azerbaijan
+
+    | BA  -- ^ Bosnia and Herzegovina
+    | BB  -- ^ Barbados
+    | BD  -- ^ Bangladesh
+    | BE  -- ^ Belgium
+    | BF  -- ^ Burkina Faso
+    | BG  -- ^ Bulgaria
+    | BH  -- ^ Bahrain
+    | BI  -- ^ Burundi
+    | BJ  -- ^ Benin
+    | BL  -- ^ Saint Barthélemy
+    | BM  -- ^ Bermuda
+    | BN  -- ^ Brunei Darussalam
+    | BO  -- ^ Bolivia (Plurinational State of)
+    | BQ  -- ^ Bonaire, Sint Eustatius and Saba; previously British Antarctic Territory (the)
+    | BR  -- ^ Brazil
+    | BS  -- ^ Bahamas (the)
+    | BT  -- ^ Bhutan
+    | BU  -- ^ 'TransitionalReservation': Burma
+    | BV  -- ^ Bouvet Island
+    | BW  -- ^ Botswana
+    | BX  -- ^ 'NotInUse': Benelux Trademarks and Design Offices
+    | BY  -- ^ Belarus
+    | BZ  -- ^ Belize
+
+    | CA  -- ^ Canada
+    | CC  -- ^ Cocos (Keeling) Islands (the)
+    | CD  -- ^ Congo (the Democratic Republic of the)
+    | CF  -- ^ Central African Republic (the)
+    | CG  -- ^ Congo (the)
+    | CH  -- ^ Switzerland
+    | CI  -- ^ Côte d'Ivoire
+    | CK  -- ^ Cook Islands (the)
+    | CL  -- ^ Chile
+    | CM  -- ^ Cameroon
+    | CN  -- ^ China
+    | CO  -- ^ Colombia
+    | CP  -- ^ 'ExceptionalReservation': Clipperton Island
+    | CR  -- ^ Costa Rica
+    | CS  -- ^ 'TransitionalReservation': Serbia and Montenegro; previously Czechoslovakia
+    | CT  -- ^ 'Withdrawn': Canton and Enderbury Islands (the)
+    | CU  -- ^ Cuba
+    | CV  -- ^ Cabo Verde
+    | CW  -- ^ Curaçao
+    | CX  -- ^ Christmas Island
+    | CY  -- ^ Cyprus
+    | CZ  -- ^ Czechia
+
+    | DD  -- ^ 'Withdrawn': German Democratic Republic (the)
+    | DE  -- ^ Germany
+    | DG  -- ^ 'ExceptionalReservation': Diego Garcia
+    | DJ  -- ^ Djibouti
+    | DK  -- ^ Denmark
+    | DM  -- ^ Dominica
+    | DO  -- ^ Dominican Republic (the)
+    | DY  -- ^ 'IndeterminateReservation': Benin (road vehicles); previously Dahomey
+    | DZ  -- ^ Algeria
+
+    | EA  -- ^ 'ExceptionalReservation': Ceuta & Melilla
+    | EC  -- ^ Ecuador
+    | EE  -- ^ Estonia
+    | EF  -- ^ 'NotInUse': European Community Patent Convention
+    | EM  -- ^ 'NotInUse': European Trademark Office
+    | EP  -- ^ 'NotInUse': European Patent Organization
+    | EV  -- ^ 'NotInUse': Eurasian Patent Organization
+    | EW  -- ^ 'IndeterminateReservation': Estonia (road vehicles)
+    | EG  -- ^ Egypt
+    | EH  -- ^ Western Sahara
+    | ER  -- ^ Eritrea
+    | ES  -- ^ Spain
+    | ET  -- ^ Ethiopia
+    | EU  -- ^ 'ExceptionalReservation': European Union (the)
+    | EZ  -- ^ 'ExceptionalReservation': Eurozone (the)
+
+    | FI  -- ^ Finland
+    | FJ  -- ^ Fiji
+    | FK  -- ^ Falkland Islands (the) [Malvinas]
+    | FL  -- ^ 'IndeterminateReservation': Liechtenstein (road vehicles)
+    | FM  -- ^ Micronesia (Federated States of)
+    | FO  -- ^ Faroe Islands (the)
+    | FQ  -- ^ 'Withdrawn': French Southern and Antarctic Territories (the)
+    | FR  -- ^ France
+    | FX  -- ^ 'ExceptionalReservation': France, Metropolitan
+
+    | GA  -- ^ Gabon
+    | GB  -- ^ United Kingdom of Great Britain and Northern Ireland (the)
+    | GC  -- ^ 'NotInUse': Patent Office of the Cooperation Council for the Arab States of the Gulf
+    | GD  -- ^ Grenada
+    | GE  -- ^ Georgia; previously Gilbert and Ellice Islands (the)
+    | GF  -- ^ French Guiana
+    | GG  -- ^ Guernsey
+    | GH  -- ^ Ghana
+    | GI  -- ^ Gibraltar
+    | GL  -- ^ Greenland
+    | GM  -- ^ Gambia (the)
+    | GN  -- ^ Guinea
+    | GP  -- ^ Guadeloupe
+    | GQ  -- ^ Equatorial Guinea
+    | GR  -- ^ Greece
+    | GS  -- ^ South Georgia and the South Sandwich Islands
+    | GT  -- ^ Guatemala
+    | GU  -- ^ Guam
+    | GW  -- ^ Guinea-Bissau
+    | GY  -- ^ Guyana
+
+    | HK  -- ^ Hong Kong
+    | HM  -- ^ Heard Island and McDonald Islands
+    | HN  -- ^ Honduras
+    | HR  -- ^ Croatia
+    | HT  -- ^ Haiti
+    | HU  -- ^ Hungary
+    | HV  -- ^ 'Withdrawn': Upper Volta
+
+    | IB  -- ^ 'NotInUse': World Intellectual Property Organization, International Bureau
+    | IC  -- ^ 'ExceptionalReservation': Canary Islands (the)
+    | ID  -- ^ Indonesia
+    | IE  -- ^ Ireland
+    | IL  -- ^ Israel
+    | IM  -- ^ Isle of Man
+    | IN  -- ^ India
+    | IO  -- ^ British Indian Ocean Territory (the)
+    | IQ  -- ^ Iraq
+    | IR  -- ^ Iran (Islamic Republic of)
+    | IS  -- ^ Iceland
+    | IT  -- ^ Italy
+
+    | JA  -- ^ 'IndeterminateReservation': Jamaica (road vehicles)
+    | JE  -- ^ Jersey
+    | JM  -- ^ Jamaica
+    | JO  -- ^ Jordan
+    | JP  -- ^ Japan
+    | JT  -- ^ 'Withdrawn': Johnston Island
+
+    | KE  -- ^ Kenya
+    | KG  -- ^ Kyrgyzstan
+    | KH  -- ^ Cambodia
+    | KI  -- ^ Kiribati
+    | KM  -- ^ Comoros (the)
+    | KN  -- ^ Saint Kitts and Nevis
+    | KP  -- ^ Korea (the Democratic People's Republic of)
+    | KR  -- ^ Korea (the Republic of)
+    | KW  -- ^ Kuwait
+    | KY  -- ^ Cayman Islands (the)
+    | KZ  -- ^ Kazakhstan
+
+    | LA  -- ^ Lao People's Democratic Republic (the)
+    | LB  -- ^ Lebanon
+    | LC  -- ^ Saint Lucia
+    | LF  -- ^ 'IndeterminateReservation': Lybia Fezzan (road vehicles)
+    | LI  -- ^ Liechtenstein
+    | LK  -- ^ Sri Lanka
+    | LR  -- ^ Liberia
+    | LS  -- ^ Lesotho
+    | LT  -- ^ Lithuania
+    | LU  -- ^ Luxembourg
+    | LV  -- ^ Latvia
+    | LY  -- ^ Libya
+
+    | MA  -- ^ Morocco
+    | MC  -- ^ Monaco
+    | MD  -- ^ Moldova (the Republic of)
+    | ME  -- ^ Montenegro
+    | MF  -- ^ Saint Martin (French part)
+    | MG  -- ^ Madagascar
+    | MH  -- ^ Marshall Islands (the)
+    | MI  -- ^ 'Withdrawn': Midway Islands (the)
+    | MK  -- ^ Macedonia (the former Yugoslav Republic of)
+    | ML  -- ^ Mali
+    | MM  -- ^ Myanmar
+    | MN  -- ^ Mongolia
+    | MO  -- ^ Macao
+    | MP  -- ^ Northern Mariana Islands (the)
+    | MQ  -- ^ Martinique
+    | MR  -- ^ Mauritania
+    | MS  -- ^ Montserrat
+    | MT  -- ^ Malta
+    | MU  -- ^ Mauritius
+    | MV  -- ^ Maldives
+    | MW  -- ^ Malawi
+    | MX  -- ^ Mexico
+    | MY  -- ^ Malaysia
+    | MZ  -- ^ Mozambique
+
+    | NA  -- ^ Namibia
+    | NC  -- ^ New Caledonia
+    | NE  -- ^ Niger (the)
+    | NF  -- ^ Norfolk Island
+    | NG  -- ^ Nigeria
+    | NH  -- ^ 'Withdrawn': New Hebrides
+    | NI  -- ^ Nicaragua
+    | NL  -- ^ Netherlands (the)
+    | NO  -- ^ Norway
+    | NP  -- ^ Nepal
+    | NQ  -- ^ 'Withdrawn': Dronning Maud Land
+    | NR  -- ^ Nauru
+    | NT  -- ^ 'TransitionalReservation': Saudi Arabian-Iraqi neutral zone (the)
+    | NU  -- ^ Niue
+    | NZ  -- ^ New Zealand
+
+    | OA  -- ^ 'NotInUse': African Intellectual Property Organization
+    | OM  -- ^ Oman
+
+    | PA  -- ^ Panama
+    | PC  -- ^ 'Withdrawn': Pacific Islands (Trust Territory of the)
+    | PE  -- ^ Peru
+    | PF  -- ^ French Polynesia
+    | PG  -- ^ Papua New Guinea
+    | PH  -- ^ Philippines (the)
+    | PI  -- ^ 'IndeterminateReservation': Philippines (road vehicles)
+    | PK  -- ^ Pakistan
+    | PL  -- ^ Poland
+    | PM  -- ^ Saint Pierre and Miquelon
+    | PN  -- ^ Pitcairn
+    | PR  -- ^ Puerto Rico
+    | PS  -- ^ Palestine, State of
+    | PT  -- ^ Portugal
+    | PU  -- ^ 'Withdrawn': United States Miscellaneous Pacific Islands (the)
+    | PW  -- ^ Palau
+    | PY  -- ^ Paraguay
+    | PZ  -- ^ 'Withdrawn': Panama Canal Zone (the)
+
+    | QA  -- ^ Qatar
+
+    | RA  -- ^ 'IndeterminateReservation': Argentina (road vehicles)
+    | RB  -- ^ 'IndeterminateReservation': Bolivia & Botswana (road vehicles)
+    | RC  -- ^ 'IndeterminateReservation': China (road vehicles)
+    | RE  -- ^ Réunion
+    | RH  -- ^ 'IndeterminateReservation': Haiti (road vehicles); previously Southern Rhodesia
+    | RI  -- ^ 'IndeterminateReservation': Indonesia (road vehicles)
+    | RM  -- ^ 'IndeterminateReservation': Madagascar (road vehicles)
+    | RN  -- ^ 'IndeterminateReservation': Niger (road vehicles)
+    | RO  -- ^ Romania
+    | RP  -- ^ 'IndeterminateReservation': Philippines (road vehicles)
+    | RS  -- ^ Serbia
+    | RU  -- ^ Russian Federation (the)
+    | RW  -- ^ Rwanda
+
+    | SA  -- ^ Saudi Arabia
+    | SB  -- ^ Solomon Islands
+    | SC  -- ^ Seychelles
+    | SD  -- ^ Sudan (the)
+    | SE  -- ^ Sweden
+    | SF  -- ^ 'IndeterminateReservation': Finland
+    | SG  -- ^ Singapore
+    | SH  -- ^ Saint Helena, Ascension and Tristan da Cunha
+    | SI  -- ^ Slovenia
+    | SJ  -- ^ Svalbard and Jan Mayen
+    | SK  -- ^ Slovakia; previously Sikkim
+    | SL  -- ^ Sierra Leone
+    | SM  -- ^ San Marino
+    | SN  -- ^ Senegal
+    | SO  -- ^ Somalia
+    | SR  -- ^ Suriname
+    | SS  -- ^ South Sudan
+    | ST  -- ^ Sao Tome and Principe
+    | SU  -- ^ 'ExceptionalReservation': USSR (the)
+    | SV  -- ^ El Salvador
+    | SX  -- ^ Sint Maarten (Dutch part)
+    | SY  -- ^ Syrian Arab Republic
+    | SZ  -- ^ Swaziland
+
+    | TA  -- ^ 'ExceptionalReservation': Tristan da Cunha
+    | TC  -- ^ Turks and Caicos Islands (the)
+    | TD  -- ^ Chad
+    | TF  -- ^ French Southern Territories (the)
+    | TG  -- ^ Togo
+    | TH  -- ^ Thailand
+    | TJ  -- ^ Tajikistan
+    | TK  -- ^ Tokelau
+    | TL  -- ^ Timor-Leste
+    | TM  -- ^ Turkmenistan
+    | TN  -- ^ Tunisia
+    | TO  -- ^ Tonga
+    | TR  -- ^ Turkey
+    | TP  -- ^ 'TransitionalReservation': East Timor
+    | TT  -- ^ Trinidad and Tobago
+    | TV  -- ^ Tuvalu
+    | TW  -- ^ Taiwan (Province of China)
+    | TZ  -- ^ Tanzania, United Republic of
+
+    | UA  -- ^ Ukraine
+    | UG  -- ^ Uganda
+    | UK  -- ^ 'ExceptionalReservation': United Kingdom (the)
+    | UM  -- ^ United States Minor Outlying Islands (the)
+    | UN  -- ^ 'ExceptionalReservation': United Nations (the)
+    | US  -- ^ United States of America (the)
+    | UY  -- ^ Uruguay
+    | UZ  -- ^ Uzbekistan
+
+    | VA  -- ^ Holy See (the)
+    | VC  -- ^ Saint Vincent and the Grenadines
+    | VD  -- ^ 'Withdrawn': Viet Nam (Democratic Republic of)
+    | VE  -- ^ Venezuela (Bolivarian Republic of)
+    | VG  -- ^ Virgin Islands (British)
+    | VI  -- ^ Virgin Islands (U.S.)
+    | VN  -- ^ Viet Nam
+    | VU  -- ^ Vanuatu
+
+    | WF  -- ^ Wallis and Futuna
+    | WG  -- ^ 'IndeterminateReservation': Grenada (road vehicles)
+    | WK  -- ^ 'Withdrawn': Wake Island
+    | WL  -- ^ 'IndeterminateReservation': Saint Lucia (road vehicles)
+    | WO  -- ^ 'NotInUse': World Intellectual Property Organization
+    | WS  -- ^ Samoa
+    | WV  -- ^ 'IndeterminateReservation': Saint Vincent (road vehicles)
+
+    | YD  -- ^ 'Withdrawn': Yemen (Democratic)
+    | YE  -- ^ Yemen
+    | YT  -- ^ Mayotte
+    | YU  -- ^ 'TransitionalReservation': Yugoslavia
+    | YV  -- ^ 'IndeterminateReservation': Venezuela (road vehicles)
+
+    | ZA  -- ^ South Africa
+    | ZM  -- ^ Zambia
+    | ZR  -- ^ 'TransitionalReservation': Zaire
+    | ZW  -- ^ Zimbabwe
+  deriving ( Eq, Show, Read, Enum, Bounded )
+
+instance H.Hashable Alpha2 where
+    hashWithSalt = H.hashUsing fromEnum
+
+-- | The stability of any particular country code.
+codeStatus :: Alpha2 -> Status
+codeStatus AC = ExceptionalReservation
+codeStatus AN = TransitionalReservation
+codeStatus AP = NotInUse
+codeStatus BU = TransitionalReservation
+codeStatus BX = NotInUse
+codeStatus CP = ExceptionalReservation
+codeStatus CS = TransitionalReservation
+codeStatus CT = Withdrawn
+codeStatus DD = Withdrawn
+codeStatus DG = ExceptionalReservation
+codeStatus DY = IndeterminateReservation
+codeStatus EA = ExceptionalReservation
+codeStatus EF = NotInUse
+codeStatus EM = NotInUse
+codeStatus EP = NotInUse
+codeStatus EU = ExceptionalReservation
+codeStatus EV = NotInUse
+codeStatus EW = IndeterminateReservation
+codeStatus EZ = ExceptionalReservation
+codeStatus FL = IndeterminateReservation
+codeStatus FQ = Withdrawn
+codeStatus FX = ExceptionalReservation
+codeStatus GC = NotInUse
+codeStatus HV = Withdrawn
+codeStatus IB = NotInUse
+codeStatus IC = ExceptionalReservation
+codeStatus JA = IndeterminateReservation
+codeStatus JT = Withdrawn
+codeStatus LF = IndeterminateReservation
+codeStatus NT = TransitionalReservation
+codeStatus MI = Withdrawn
+codeStatus NH = Withdrawn
+codeStatus NQ = Withdrawn
+codeStatus OA = NotInUse
+codeStatus PC = Withdrawn
+codeStatus PI = IndeterminateReservation
+codeStatus PU = Withdrawn
+codeStatus PZ = Withdrawn
+codeStatus RA = IndeterminateReservation
+codeStatus RB = IndeterminateReservation
+codeStatus RC = IndeterminateReservation
+codeStatus RH = IndeterminateReservation
+codeStatus RI = IndeterminateReservation
+codeStatus RM = IndeterminateReservation
+codeStatus RN = IndeterminateReservation
+codeStatus RP = IndeterminateReservation
+codeStatus SF = IndeterminateReservation
+codeStatus SU = ExceptionalReservation
+codeStatus TA = ExceptionalReservation
+codeStatus TP = TransitionalReservation
+codeStatus UK = ExceptionalReservation
+codeStatus UN = ExceptionalReservation
+codeStatus VD = Withdrawn
+codeStatus WG = IndeterminateReservation
+codeStatus WK = Withdrawn
+codeStatus WL = IndeterminateReservation
+codeStatus WO = NotInUse
+codeStatus WV = IndeterminateReservation
+codeStatus YD = Withdrawn
+codeStatus YU = TransitionalReservation
+codeStatus YV = IndeterminateReservation
+codeStatus ZR = TransitionalReservation
+codeStatus _ = Official
diff --git a/Data/Standards/ISO/Country/Primary/Alpha3.hs b/Data/Standards/ISO/Country/Primary/Alpha3.hs
new file mode 100644
--- /dev/null
+++ b/Data/Standards/ISO/Country/Primary/Alpha3.hs
@@ -0,0 +1,519 @@
+{- | Module      : Data.Standards.ISO.Country.Primary.Alpha3
+ -   Description : The three-character country codes described by ISO 3166-1.
+ -   Copyright   : (c) 2018 Samuel May
+ -   License     : MPL-2.0
+ -   Maintainer  : ag.eitilt@gmail.com
+ -   Stability   : provisional
+ -   Portability : portable
+ -}
+module Data.Standards.ISO.Country.Primary.Alpha3
+    ( Alpha3 ( .. )
+    , Status ( .. )
+    , codeStatus
+    ) where
+
+import Data.Standards.ISO.Country.Primary.Common
+
+import qualified Data.Hashable as H
+
+{-# DEPRECATED ANT "Divided into BES, CUW and SXM, or use ISO 3166-3 code ANHH" #-}
+{-# DEPRECATED BUR "Use new code MMR or ISO 3166-3 code BUMM" #-}
+{-# DEPRECATED BYS "Use new code BLR or ISO 3166-3 code BYAA" #-}
+{-# DEPRECATED CSK "Divided into CZE and SVK, or use ISO 3166-3 code CSHH" #-}
+{-# DEPRECATED NTZ "Divided between IRQ and SAU, or use ISO 3166-3 code NTHH" #-}
+{-# DEPRECATED ROM "Use new code ROU" #-}
+{-# DEPRECATED SCG "Divided into MNE and SRB, or use ISO 3166-3 code CSXX" #-}
+{-# DEPRECATED TMP "Use new code TLS or ISO 3166-3 code TPTL" #-}
+{-# DEPRECATED YUG "Use ISO 3166-3 code YUCS" #-}
+{-# DEPRECATED ZAR "Use new code COD or ISO 3166-3 code ZRCD" #-}
+
+{-# DEPRECATED ADN "Use new code YEM" #-}
+{-# DEPRECATED BDS "Use official code BRB" #-}
+{-# DEPRECATED BRU "Use official code BRN" #-}
+{-# DEPRECATED CDN "Use official code CAN" #-}
+{-# DEPRECATED EAK "Use official code KEN" #-}
+{-# DEPRECATED EAT "Use code for entire country TZA" #-}
+{-# DEPRECATED EAU "Use official code UGA" #-}
+{-# DEPRECATED EAZ "Use code for entire country TZA" #-}
+{-# DEPRECATED GBA "Use code for entire region GGY" #-}
+{-# DEPRECATED GBG "Use official code GGY" #-}
+{-# DEPRECATED GBJ "Use official code JEY" #-}
+{-# DEPRECATED GBM "Use official code IMN" #-}
+{-# DEPRECATED GBZ "Use official code GIB" #-}
+{-# DEPRECATED GCA "Use official code GTM" #-}
+{-# DEPRECATED HKJ "Use official code JOR" #-}
+{-# DEPRECATED MAL "Use official code MYS" #-}
+{-# DEPRECATED RCA "Use official code CAF" #-}
+{-# DEPRECATED RCB "Use official code COG" #-}
+{-# DEPRECATED RCH "Use official code CHL" #-}
+{-# DEPRECATED RMM "Use official code MLI" #-}
+{-# DEPRECATED RNR "Use official code ZMB" #-}
+{-# DEPRECATED ROK "Use official code KOR" #-}
+{-# DEPRECATED RSM "Use official code SMR" #-}
+{-# DEPRECATED RSR "Use official code ZWE" #-}
+{-# DEPRECATED SLO "Use official code SVN" #-}
+{-# DEPRECATED SME "Use official code SUR" #-}
+{-# DEPRECATED TMN "Use official code TKN" #-}
+{-# DEPRECATED WAG "Use official code GMB" #-}
+{-# DEPRECATED WAL "Use official code SLE" #-}
+{-# DEPRECATED WAN "Use official code NGA" #-}
+{-# DEPRECATED ZRE "Use official code ZAR, new code COD or ISO 3166-3 code ZRCD" #-}
+
+{-# WARNING GBD,GBN,GBO,GBP,GBS,UNA,UNK,UNO "Not an official ISO 3166-1 code" #-}
+
+{-# DEPRECATED AFI "Use new code DJI or ISO 3166-3 code AIDJ" #-}
+{-# DEPRECATED ATB "Use new code ATA or ISO 3166-3 code BQAQ" #-}
+{-# DEPRECATED ATN "Use new code ATA or ISO 3166-3 code NQAQ" #-}
+{-# DEPRECATED CTE "Use new code KIR or ISO 3166-3 code CTKI" #-}
+{-# DEPRECATED DDR "Use new code DEU or ISO 3166-3 code DDDE" #-}
+{-# DEPRECATED DHY "Use new code BEN or ISO 3166-3 code DYBJ" #-}
+{-# DEPRECATED GEL "Divided into KIR and TUV, or use ISO 3166-3 code GEHH" #-}
+{-# DEPRECATED HVO "Use new code BFA or ISO 3166-3 code HVBF" #-}
+{-# DEPRECATED JTN "Use new code UMI or ISO 3166-3 code JTUM" #-}
+{-# DEPRECATED MID "Use new code UMI or ISO 3166-3 code MIUM" #-}
+{-# DEPRECATED NHB "Use new code VUT or ISO 3166-3 code NHVU" #-}
+{-# DEPRECATED PCI "Divided into FSM, MHL, MNP and PLW, or use ISO 3166-3 code PCHH" #-}
+{-# DEPRECATED PCZ "Use new code PAN or ISO 3166-3 code PZPA" #-}
+{-# DEPRECATED PHI "Use new code PHL" #-}
+{-# DEPRECATED PUS "Use new code UMI or ISO 3166-3 code PUUM" #-}
+{-# DEPRECATED RHO "Use new code ZWE or ISO 3166-3 code RHZW" #-}
+{-# DEPRECATED SKM "Use new code IND or ISO 3166-3 code SKIN" #-}
+{-# DEPRECATED VDR "Use new code VNM or ISO 3166-3 code VDVN" #-}
+{-# DEPRECATED WAK "Use new code UMI or ISO 3166-3 code WKUM" #-}
+{-# DEPRECATED YMD "Use new code YEM or ISO 3166-3 code YDYE" #-}
+
+-- | The official codes for countries with less collisions and therefore more
+-- similar to the full name, translated into a type-safe representation.  Unless
+-- otherwise specified, all codes are 'Official'.
+data Alpha3
+    = ABW  -- ^ Aruba
+    | ADN  -- ^ 'IndeterminateReservation': Aden (road vehicles)
+    | AFG  -- ^ Afghanistan
+    | AFI  -- ^ 'Withdrawn': French Afar and Issas
+    | AGO  -- ^ Angola
+    | AIA  -- ^ Anguilla
+    | ALA  -- ^ Åland Islands
+    | ALB  -- ^ Albania
+    | AND  -- ^ Andorra
+    | ANT  -- ^ 'TransitionalReservation': Netherlands Antilles
+    | ARE  -- ^ United Arab Emirates (the)
+    | ARG  -- ^ Argentina
+    | ARM  -- ^ Armenia
+    | ASC  -- ^ 'ExceptionalReservation': Ascension Island
+    | ASM  -- ^ American Samoa
+    | ATA  -- ^ Antarctica
+    | ATB  -- ^ 'Withdrawn': British Antarctic Territory (the)
+    | ATF  -- ^ French Southern Territories (the)
+    | ATG  -- ^ Antigua and Barbuda
+    | ATN  -- ^ 'Withdrawn': Dronning Maud Land
+    | AUS  -- ^ Australia
+    | AUT  -- ^ Austria
+    | AZE  -- ^ Azerbaijan
+
+    | BDI  -- ^ Burundi
+    | BDS  -- ^ 'IndeterminateReservation': Barbados (road vehicles)
+    | BEL  -- ^ Belgium
+    | BEN  -- ^ Benin
+    | BES  -- ^ Bonaire, Sint Eustatius and Saba
+    | BFA  -- ^ Burkina Faso
+    | BGD  -- ^ Bangladesh
+    | BGR  -- ^ Bulgaria
+    | BHR  -- ^ Bahrain
+    | BHS  -- ^ Bahamas (the)
+    | BIH  -- ^ Bosnia and Herzegovina
+    | BLM  -- ^ Saint Barthélemy
+    | BLR  -- ^ Belarus
+    | BLZ  -- ^ Belize
+    | BMU  -- ^ Bermuda
+    | BOL  -- ^ Bolivia (Plurinational State of)
+    | BRA  -- ^ Brazil
+    | BRB  -- ^ Barbados
+    | BRN  -- ^ Brunei Darussalam
+    | BRU  -- ^ 'IndeterminateReservation': Brunai (road vehicles)
+    | BTN  -- ^ Bhutan
+    | BUR  -- ^ 'TransitionalReservation': Burma
+    | BVT  -- ^ Bouvet Island
+    | BWA  -- ^ Botswana
+    | BYS  -- ^ 'TransitionalReservation': Byelorussian SSR
+
+    | CAF  -- ^ Central African Republic (the)
+    | CAN  -- ^ Canada
+    | CCK  -- ^ Cocos (Keeling) Islands (the)
+    | CDN  -- ^ 'IndeterminateReservation': Canada (road vehicles)
+    | CHE  -- ^ Switzerland
+    | CHL  -- ^ Chile
+    | CHN  -- ^ China
+    | CIV  -- ^ Côte d'Ivoire
+    | CMR  -- ^ Cameroon
+    | COD  -- ^ Congo (the Democratic Republic of the)
+    | COG  -- ^ Congo (the)
+    | COK  -- ^ Cook Islands (the)
+    | COL  -- ^ Colombia
+    | COM  -- ^ Comoros (the)
+    | CPT  -- ^ 'ExceptionalReservation': Clipperton Island
+    | CPV  -- ^ Cabo Verde
+    | CRI  -- ^ Costa Rica
+    | CSK  -- ^ 'TransitionalReservation': Czechoslovakia
+    | CTE  -- ^ 'Withdrawn': Canton and Enderbury Islands (the)
+    | CUB  -- ^ Cuba
+    | CUW  -- ^ Curaçao
+    | CXR  -- ^ Christmas Island
+    | CYM  -- ^ Cayman Islands (the)
+    | CYP  -- ^ Cyprus
+    | CZE  -- ^ Czechia
+
+    | DDR  -- ^ 'Withdrawn': German Democratic Republic (the)
+    | DEU  -- ^ Germany
+    | DGA  -- ^ 'ExceptionalReservation': Diego Garcia
+    | DHY  -- ^ 'Withdrawn': Dahomey
+    | DJI  -- ^ Djibouti
+    | DMA  -- ^ Dominica
+    | DNK  -- ^ Denmark
+    | DOM  -- ^ Dominican Republic (the)
+    | DZA  -- ^ Algeria
+
+    | EAK  -- ^ 'IndeterminateReservation': Kenya (road vehicles)
+    | EAT  -- ^ 'IndeterminateReservation': Tanganyika (road vehicles)
+    | EAU  -- ^ 'IndeterminateReservation': Uganda (road vehicles)
+    | EAZ  -- ^ 'IndeterminateReservation': Zanzibar (road vehicles)
+    | ECU  -- ^ Ecuador
+    | EGY  -- ^ Egypt
+    | ERI  -- ^ Eritrea
+    | ESH  -- ^ Western Sahara
+    | ESP  -- ^ Spain
+    | EST  -- ^ Estonia
+    | ETH  -- ^ Ethiopia
+
+    | FIN  -- ^ Finland
+    | FJI  -- ^ Fiji
+    | FLK  -- ^ Falkland Islands (the) [Malvinas]
+    | FRA  -- ^ France
+    | FRO  -- ^ Faroe Islands (the)
+    | FSM  -- ^ Micronesia (Federated States of)
+    | FXX  -- ^ 'ExceptionalReservation': France, Metropolitan
+
+    | GAB  -- ^ Gabon
+    | GBA  -- ^ 'IndeterminateReservation': Alderney (road vehicles)
+    | GBD  -- ^ 'NotInUse': British Overseas Territories (passport)
+    | GBG  -- ^ 'IndeterminateReservation': Guernsey (road vehicles)
+    | GBJ  -- ^ 'IndeterminateReservation': Jersey (road vehicles)
+    | GBM  -- ^ 'IndeterminateReservation': Isle of Man (road vehicles)
+    | GBN  -- ^ 'NotInUse': Overseas British national (passport)
+    | GBO  -- ^ 'NotInUse': Overseas Britisn citizen (passport)
+    | GBP  -- ^ 'NotInUse': British protected person (passport)
+    | GBR  -- ^ United Kingdom of Great Britain and Northern Ireland (the)
+    | GBS  -- ^ 'NotInUse': British subject (passport)
+    | GBZ  -- ^ 'IndeterminateReservation': Gibraltar (road vehicles)
+    | GCA  -- ^ 'IndeterminateReservation': Guatemala (road vehicles)
+    | GEO  -- ^ Georgia
+    | GEL  -- ^ 'Withdrawn': Gilbert and Ellice Islands (the)
+    | GGY  -- ^ Guernsey
+    | GHA  -- ^ Ghana
+    | GIB  -- ^ Gibraltar
+    | GIN  -- ^ Guinea
+    | GLP  -- ^ Guadeloupe
+    | GMB  -- ^ Gambia (the)
+    | GNB  -- ^ Guinea-Bissau
+    | GNQ  -- ^ Equatorial Guinea
+    | GRC  -- ^ Greece
+    | GRD  -- ^ Grenada
+    | GRL  -- ^ Greenland
+    | GTM  -- ^ Guatemala
+    | GUF  -- ^ French Guiana
+    | GUM  -- ^ Guam
+    | GUY  -- ^ Guyana
+
+    | HKJ  -- ^ 'IndeterminateReservation': Jordan (road vehicles)
+    | HKG  -- ^ Hong Kong
+    | HMD  -- ^ Heard Island and McDonald Islands
+    | HND  -- ^ Honduras
+    | HRV  -- ^ Croatia
+    | HTI  -- ^ Haiti
+    | HUN  -- ^ Hungary
+    | HVO  -- ^ 'Withdrawn': Upper Volta
+
+    | IDN  -- ^ Indonesia
+    | IMN  -- ^ Isle of Man
+    | IND  -- ^ India
+    | IOT  -- ^ British Indian Ocean Territory (the)
+    | IRL  -- ^ Ireland
+    | IRN  -- ^ Iran (Islamic Republic of)
+    | IRQ  -- ^ Iraq
+    | ISL  -- ^ Iceland
+    | ISR  -- ^ Israel
+    | ITA  -- ^ Italy
+
+    | JAM  -- ^ Jamaica
+    | JEY  -- ^ Jersey
+    | JOR  -- ^ Jordan
+    | JPN  -- ^ Japan
+    | JTN  -- ^ 'Withdrawn': Johnston Island
+
+    | KAZ  -- ^ Kazakhstan
+    | KEN  -- ^ Kenya
+    | KGZ  -- ^ Kyrgyzstan
+    | KHM  -- ^ Cambodia
+    | KIR  -- ^ Kiribati
+    | KNA  -- ^ Saint Kitts and Nevis
+    | KOR  -- ^ Korea (the Republic of)
+    | KWT  -- ^ Kuwait
+
+    | LAO  -- ^ Lao People's Democratic Republic (the)
+    | LBN  -- ^ Lebanon
+    | LBR  -- ^ Liberia
+    | LBY  -- ^ Libya
+    | LCA  -- ^ Saint Lucia
+    | LIE  -- ^ Liechtenstein
+    | LKA  -- ^ Sri Lanka
+    | LSO  -- ^ Lesotho
+    | LTU  -- ^ Lithuania
+    | LUX  -- ^ Luxembourg
+    | LVA  -- ^ Latvia
+
+    | MAC  -- ^ Macao
+    | MAF  -- ^ Saint Martin (French part)
+    | MAL  -- ^ 'IndeterminateReservation': Malaysia (road vehicles)
+    | MAR  -- ^ Morocco
+    | MCO  -- ^ Monaco
+    | MDA  -- ^ Moldova (the Republic of)
+    | MDG  -- ^ Madagascar
+    | MDV  -- ^ Maldives
+    | MEX  -- ^ Mexico
+    | MHL  -- ^ Marshall Islands (the)
+    | MID  -- ^ 'Withdrawn': Midway Islands (the)
+    | MKD  -- ^ Macedonia (the former Yugoslav Republic of)
+    | MLI  -- ^ Mali
+    | MLT  -- ^ Malta
+    | MMR  -- ^ Myanmar
+    | MNE  -- ^ Montenegro
+    | MNG  -- ^ Mongolia
+    | MNP  -- ^ Northern Mariana Islands (the)
+    | MOZ  -- ^ Mozambique
+    | MRT  -- ^ Mauritania
+    | MSR  -- ^ Montserrat
+    | MTQ  -- ^ Martinique
+    | MUS  -- ^ Mauritius
+    | MWI  -- ^ Malawi
+    | MYS  -- ^ Malaysia
+    | MYT  -- ^ Mayotte
+
+    | NAM  -- ^ Namibia
+    | NCL  -- ^ New Caledonia
+    | NER  -- ^ Niger (the)
+    | NFK  -- ^ Norfolk Island
+    | NGA  -- ^ Nigeria
+    | NHB  -- ^ 'Withdrawn': New Hebrides
+    | NIC  -- ^ Nicaragua
+    | NIU  -- ^ Niue
+    | NLD  -- ^ Netherlands (the)
+    | NOR  -- ^ Norway
+    | NPL  -- ^ Nepal
+    | NRU  -- ^ Nauru
+    | NTZ  -- ^ 'TransitionalReservation': Saudi Arabian-Iraqi neutral zone (the)
+    | NZL  -- ^ New Zealand
+
+    | OMN  -- ^ Oman
+
+    | PAK  -- ^ Pakistan
+    | PAN  -- ^ Panama
+    | PCN  -- ^ Pitcairn
+    | PCI  -- ^ 'Withdrawn': Pacific Islands (Trust Territory of the)
+    | PCZ  -- ^ 'Withdrawn': Panama Canal Zone (the)
+    | PER  -- ^ Peru
+    | PHI  -- ^ 'Withdrawn': Philippines
+    | PHL  -- ^ Philippines (the)
+    | PLW  -- ^ Palau
+    | PNG  -- ^ Papua New Guinea
+    | POL  -- ^ Poland
+    | PRI  -- ^ Puerto Rico
+    | PRK  -- ^ Korea (the Democratic People's Republic of)
+    | PRT  -- ^ Portugal
+    | PRY  -- ^ Paraguay
+    | PSE  -- ^ Palestine, State of
+    | PUS  -- ^ 'Withdrawn': United States Miscellaneous Pacific Islands (the)
+    | PYF  -- ^ French Polynesia
+
+    | QAT  -- ^ Qatar
+
+    | RCA  -- ^ 'IndeterminateReservation': Central African Republic (road vehicles)
+    | RCB  -- ^ 'IndeterminateReservation': Congo, People's Republic of (road vehicles)
+    | RCH  -- ^ 'IndeterminateReservation': Chile (road vehicles)
+    | REU  -- ^ Réunion
+    | RHO  -- ^ 'Withdrawn': Southern Rhodesia
+    | RMM  -- ^ 'IndeterminateReservation': Mali (road vehicles)
+    | RNR  -- ^ 'IndeterminateReservation': Zambia (road vehicles)
+    | ROK  -- ^ 'IndeterminateReservation': Korea, Republic of (road vehicles)
+    | ROM  -- ^ 'TransitionalReservation': Romania
+    | ROU  -- ^ Romania
+    | RSM  -- ^ 'IndeterminateReservation': San Marino (road vehicles)
+    | RSR  -- ^ 'IndeterminateReservation': Zimbabwe (road vehicles)
+    | RUS  -- ^ Russian Federation (the)
+    | RWA  -- ^ Rwanda
+
+    | SAU  -- ^ Saudi Arabia
+    | SCG  -- ^ 'TransitionalReservation': Serbia and Montenegro
+    | SDN  -- ^ Sudan (the)
+    | SEN  -- ^ Senegal
+    | SGP  -- ^ Singapore
+    | SGS  -- ^ South Georgia and the South Sandwich Islands
+    | SHN  -- ^ Saint Helena, Ascension and Tristan da Cunha
+    | SJM  -- ^ Svalbard and Jan Mayen
+    | SKM  -- ^ 'Withdrawn': Sikkim
+    | SLB  -- ^ Solomon Islands
+    | SLE  -- ^ Sierra Leone
+    | SLO  -- ^ 'IndeterminateReservation': Slovenia (road vehicles)
+    | SLV  -- ^ El Salvador
+    | SME  -- ^ 'IndeterminateReservation': Suriname (road vehicles)
+    | SMR  -- ^ San Marino
+    | SOM  -- ^ Somalia
+    | SPM  -- ^ Saint Pierre and Miquelon
+    | SRB  -- ^ Serbia
+    | SSD  -- ^ South Sudan
+    | STP  -- ^ Sao Tome and Principe
+    | SUN  -- ^ 'ExceptionalReservation': USSR (the)
+    | SUR  -- ^ Suriname
+    | SVK  -- ^ Slovakia
+    | SVN  -- ^ Slovenia
+    | SWE  -- ^ Sweden
+    | SWZ  -- ^ Swaziland
+    | SXM  -- ^ Sint Maarten (Dutch part)
+    | SYC  -- ^ Seychelles
+    | SYR  -- ^ Syrian Arab Republic
+
+    | TAA  -- ^ 'ExceptionalReservation': Tristan da Cunha
+    | TCA  -- ^ Turks and Caicos Islands (the)
+    | TCD  -- ^ Chad
+    | TGO  -- ^ Togo
+    | THA  -- ^ Thailand
+    | TJK  -- ^ Tajikistan
+    | TKL  -- ^ Tokelau
+    | TKM  -- ^ Turkmenistan
+    | TLS  -- ^ Timor-Leste
+    | TMN  -- ^ 'IndeterminateReservation': Turkmenistan (road vehicles)
+    | TMP  -- ^ 'TransitionalReservation': East Timor
+    | TON  -- ^ Tonga
+    | TTO  -- ^ Trinidad and Tobago
+    | TUN  -- ^ Tunisia
+    | TUR  -- ^ Turkey
+    | TUV  -- ^ Tuvalu
+    | TWN  -- ^ Taiwan (Province of China)
+    | TZA  -- ^ Tanzania, United Republic of
+
+    | UGA  -- ^ Uganda
+    | UKR  -- ^ Ukraine
+    | UMI  -- ^ United States Minor Outlying Islands (the)
+    | UNA  -- ^ 'NotInUse': United Nations Specialized Agency (passport)
+    | UNK  -- ^ 'NotInUse': United Nations Interim Administration in Kosovo (passport)
+    | UNO  -- ^ 'NotInUse': United Nations (passport)
+    | URY  -- ^ Uruguay
+    | USA  -- ^ United States of America (the)
+    | UZB  -- ^ Uzbekistan
+
+    | VAT  -- ^ Holy See (the)
+    | VCT  -- ^ Saint Vincent and the Grenadines
+    | VDR  -- ^ 'Withdrawn': Viet Nam (Democratic Republic of)
+    | VEN  -- ^ Venezuela (Bolivarian Republic of)
+    | VGB  -- ^ Virgin Islands (British)
+    | VIR  -- ^ Virgin Islands (U.S.)
+    | VNM  -- ^ Viet Nam
+    | VUT  -- ^ Vanuatu
+
+    | WAG  -- ^ 'IndeterminateReservation': Gambia (road vehicles)
+    | WAK  -- ^ 'Withdrawn': Wake Island
+    | WAL  -- ^ 'IndeterminateReservation': Sierra Leone (road vehicles)
+    | WAN  -- ^ 'IndeterminateReservation': Nigeria (road vehicles)
+    | WLF  -- ^ Wallis and Futuna
+    | WSM  -- ^ Samoa
+
+    | YEM  -- ^ Yemen
+    | YMD  -- ^ 'Withdrawn': Yemen (Democratic)
+    | YUG  -- ^ 'TransitionalReservation': Yugoslavia
+
+    | ZAF  -- ^ South Africa
+    | ZAR  -- ^ 'TransitionalReservation': Zaire
+    | ZMB  -- ^ Zambia
+    | ZRE  -- ^ 'IndeterminateReservation': Zaire (road vehicles)
+    | ZWE  -- ^ Zimbabwe
+  deriving ( Eq, Show, Read, Enum, Bounded )
+
+instance H.Hashable Alpha3 where
+    hashWithSalt = H.hashUsing fromEnum
+
+-- | The stability of any particular country code.
+codeStatus :: Alpha3 -> Status
+codeStatus ADN = IndeterminateReservation
+codeStatus AFI = Withdrawn
+codeStatus ANT = TransitionalReservation
+codeStatus ASC = ExceptionalReservation
+codeStatus ATB = Withdrawn
+codeStatus ATN = Withdrawn
+codeStatus BDS = IndeterminateReservation
+codeStatus BRU = IndeterminateReservation
+codeStatus BUR = TransitionalReservation
+codeStatus BYS = TransitionalReservation
+codeStatus CDN = IndeterminateReservation
+codeStatus CPT = ExceptionalReservation
+codeStatus CSK = TransitionalReservation
+codeStatus CTE = Withdrawn
+codeStatus DDR = Withdrawn
+codeStatus DGA = ExceptionalReservation
+codeStatus DHY = Withdrawn
+codeStatus EAK = IndeterminateReservation
+codeStatus EAT = IndeterminateReservation
+codeStatus EAU = IndeterminateReservation
+codeStatus EAZ = IndeterminateReservation
+codeStatus FXX = ExceptionalReservation
+codeStatus GBA = IndeterminateReservation
+codeStatus GBD = NotInUse
+codeStatus GBG = IndeterminateReservation
+codeStatus GBJ = IndeterminateReservation
+codeStatus GBM = IndeterminateReservation
+codeStatus GBN = NotInUse
+codeStatus GBO = NotInUse
+codeStatus GBP = NotInUse
+codeStatus GBS = NotInUse
+codeStatus GBZ = IndeterminateReservation
+codeStatus GCA = IndeterminateReservation
+codeStatus GEL = Withdrawn
+codeStatus HKJ = IndeterminateReservation
+codeStatus HVO = Withdrawn
+codeStatus JTN = Withdrawn
+codeStatus MAL = IndeterminateReservation
+codeStatus MID = Withdrawn
+codeStatus NHB = Withdrawn
+codeStatus NTZ = TransitionalReservation
+codeStatus PCI = Withdrawn
+codeStatus PCZ = Withdrawn
+codeStatus PHI = Withdrawn
+codeStatus PUS = Withdrawn
+codeStatus RCA = IndeterminateReservation
+codeStatus RCB = IndeterminateReservation
+codeStatus RCH = IndeterminateReservation
+codeStatus RHO = Withdrawn
+codeStatus RMM = IndeterminateReservation
+codeStatus RNR = IndeterminateReservation
+codeStatus ROK = IndeterminateReservation
+codeStatus ROM = TransitionalReservation
+codeStatus RSM = IndeterminateReservation
+codeStatus RSR = IndeterminateReservation
+codeStatus SCG = TransitionalReservation
+codeStatus SKM = Withdrawn
+codeStatus SLO = IndeterminateReservation
+codeStatus SME = IndeterminateReservation
+codeStatus SUN = ExceptionalReservation
+codeStatus TAA = ExceptionalReservation
+codeStatus TMN = IndeterminateReservation
+codeStatus TMP = TransitionalReservation
+codeStatus UNA = NotInUse
+codeStatus UNK = NotInUse
+codeStatus UNO = NotInUse
+codeStatus VDR = Withdrawn
+codeStatus WAG = IndeterminateReservation
+codeStatus WAK = Withdrawn
+codeStatus WAL = IndeterminateReservation
+codeStatus WAN = IndeterminateReservation
+codeStatus YMD = Withdrawn
+codeStatus YUG = TransitionalReservation
+codeStatus ZAR = TransitionalReservation
+codeStatus ZRE = IndeterminateReservation
+codeStatus _ = Official
diff --git a/Data/Standards/ISO/Country/Primary/Common.hs b/Data/Standards/ISO/Country/Primary/Common.hs
new file mode 100644
--- /dev/null
+++ b/Data/Standards/ISO/Country/Primary/Common.hs
@@ -0,0 +1,32 @@
+{- | Module      : Data.Standards.ISO.Country.Primary.Common
+ -   Description : Types used by all representations described by ISO 3166-1.
+ -   Copyright   : (c) 2018 Samuel May
+ -   License     : MPL-2.0
+ -   Maintainer  : ag.eitilt@gmail.com
+ -   Stability   : stable
+ -   Portability : portable
+ -}
+module Data.Standards.ISO.Country.Primary.Common where
+
+-- | Categories within the standard describing how much warning is given if a
+-- code were to change or be replaced.
+data Status
+    -- | The code is active, and would only be replaced after a period as a
+    -- 'TransitionalReservation'.
+    = Official
+    -- | The code is reserved and any other use is subject to approval.
+    | ExceptionalReservation
+    -- | The code has been marked for deletion, but is currently still reserved
+    -- as implementations remove it or migrate to the replacement.
+    | TransitionalReservation
+    -- | Use of the code is restricted to historic vehicle registrations, but
+    -- may still be reassigned at any point.
+    | IndeterminateReservation
+    -- | The code is used by another standard or high-profile organization, and
+    -- will not be assigned in ISO 3166.  Officially, these are listed as an
+    -- 'IndeterminateReservation'.
+    | NotInUse
+    -- | The code was previously included in the standard, but the country it
+    -- referred to has been reassigned or no longer exists, and so (unless it's
+    -- 'Numeric') it may be reused at any point.
+    | Withdrawn
diff --git a/Data/Standards/ISO/Country/Primary/Numeric.hs b/Data/Standards/ISO/Country/Primary/Numeric.hs
new file mode 100644
--- /dev/null
+++ b/Data/Standards/ISO/Country/Primary/Numeric.hs
@@ -0,0 +1,921 @@
+{- | Module      : Data.Standards.ISO.Country.Primary.Numeric
+ -   Description : The numeric country codes described by ISO 3166-1.
+ -   Copyright   : (c) 2018 Samuel May
+ -   License     : MPL-2.0
+ -   Maintainer  : ag.eitilt@gmail.com
+ -   Stability   : provisional
+ -   Portability : portable
+ -}
+module Data.Standards.ISO.Country.Primary.Numeric
+    ( Numeric ( .. )
+    , Status ( .. )
+    , codeStatus
+    ) where
+
+import Data.Standards.ISO.Country.Primary.Common
+
+import qualified Data.Hashable as H
+import qualified Text.Printf as P
+
+{-# DEPRECATED C080 "Use new code C010 after merge with C216 and C260" #-}
+{-# DEPRECATED C128 "Use new code C296" #-}
+{-# DEPRECATED C200 "Divided into C203 and C703" #-}
+{-# DEPRECATED C216 "Use new code C010 after merge with C080 and C260" #-}
+{-# DEPRECATED C230 "Divided into C231 and C232" #-}
+{-# DEPRECATED C249 "Use new code C250" #-}
+{-# DEPRECATED C278 "Use new code C276 after merge with C280" #-}
+{-# DEPRECATED C280 "Use new code C276 after merge with C278" #-}
+{-# DEPRECATED C396 "Use new code C581 after merge with C488, C849 and C872" #-}
+{-# DEPRECATED C488 "Use new code C581 after merge with C396, C849 and C872" #-}
+{-# DEPRECATED C530 "Divided into C531, C535 and C534" #-}
+{-# DEPRECATED C532 "Divided into C530 and C533" #-}
+{-# DEPRECATED C536 "Divided between C368 and C682" #-}
+{-# DEPRECATED C582 "Divided into C580, C583, C584 and C585" #-}
+{-# DEPRECATED C590 "Use new code C591 after merge with C594" #-}
+{-# DEPRECATED C594 "Use new code C591 after merge with C590" #-}
+{-# DEPRECATED C658 "Divided between C659 and C660" #-}
+{-# DEPRECATED C698 "Use new code C356" #-}
+{-# DEPRECATED C714 "Use new code C704" #-}
+{-# DEPRECATED C720 "Use new code C887 after merge with C886" #-}
+{-# DEPRECATED C736 "Divided between C728 and C729" #-}
+{-# DEPRECATED C810 "Divided into C031, C051, C233, C268, C398, C417, C428, C440, C498, C643, C762, C795 and C860" #-}
+{-# DEPRECATED C849 "Use new code C581 after merge with C396, C488 and C872" #-}
+{-# DEPRECATED C872 "Use new code C581 after merge with C396, C488 and C849" #-}
+{-# DEPRECATED C886 "Use new code C887 after merge with C720" #-}
+{-# DEPRECATED C890 "Divided into C070, C191, C705, C807 and C891" #-}
+{-# DEPRECATED C891 "Divided into C499 and C688" #-}
+
+-- | The official numeric codes for countries, preventing collisions but
+-- using an arbitrary mapping, translated into a type-safe representation.
+-- Unless otherwise specified, all codes are 'Official'.
+data Numeric
+    = C004  -- ^ Afghanistan
+    | C008  -- ^ Albania
+    | C010  -- ^ Antarctica
+    | C012  -- ^ Algeria
+    | C016  -- ^ American Samoa
+    | C020  -- ^ Andorra
+    | C024  -- ^ Angola
+    | C028  -- ^ Antigua and Barbuda
+    | C031  -- ^ Azerbaijan
+    | C032  -- ^ Argentina
+    | C036  -- ^ Australia
+    | C040  -- ^ Austria
+    | C044  -- ^ Bahamas (the)
+    | C048  -- ^ Bahrain
+
+    | C050  -- ^ Bangladesh
+    | C051  -- ^ Armenia
+    | C052  -- ^ Barbados
+    | C056  -- ^ Belgium
+    | C060  -- ^ Bermuda
+    | C064  -- ^ Bhutan
+    | C068  -- ^ Bolivia (Plurinational State of)
+    | C070  -- ^ Bosnia and Herzegovina
+    | C072  -- ^ Botswana
+    | C074  -- ^ Bouvet Island
+    | C076  -- ^ Brazil
+    | C080  -- ^ 'Withdrawn': British Antarctic Territory (the)
+    | C084  -- ^ Belize
+    | C086  -- ^ British Indian Ocean Territory (the)
+    | C090  -- ^ Solomon Islands
+    | C092  -- ^ Virgin Islands (British)
+    | C096  -- ^ Brunei Darussalam
+
+    | C100  -- ^ Bulgaria
+    | C104  -- ^ Myanmar
+    | C108  -- ^ Burundi
+    | C112  -- ^ Belarus
+    | C116  -- ^ Cambodia
+    | C120  -- ^ Cameroon
+    | C124  -- ^ Canada
+    | C128  -- ^ 'Withdrawn': Canton and Enderbury Islands (the)
+    | C132  -- ^ Cabo Verde
+    | C136  -- ^ Cayman Islands (the)
+    | C140  -- ^ Central African Republic (the)
+    | C144  -- ^ Sri Lanka
+    | C148  -- ^ Chad
+
+    | C152  -- ^ Chile
+    | C156  -- ^ China
+    | C158  -- ^ Taiwan (Province of China)
+    | C162  -- ^ Christmas Island
+    | C166  -- ^ Cocos (Keeling) Islands (the)
+    | C170  -- ^ Colombia
+    | C174  -- ^ Comoros (the)
+    | C175  -- ^ Mayotte
+    | C178  -- ^ Congo (the)
+    | C180  -- ^ Congo (the Democratic Republic of the)
+    | C184  -- ^ Cook Islands (the)
+    | C188  -- ^ Costa Rica
+    | C191  -- ^ Croatia
+    | C192  -- ^ Cuba
+    | C196  -- ^ Cyprus
+
+    | C200  -- ^ 'Withdrawn': Czechoslovakia
+    | C203  -- ^ Czechia
+    | C204  -- ^ Benin
+    | C208  -- ^ Denmark
+    | C212  -- ^ Dominica
+    | C214  -- ^ Dominican Republic (the)
+    | C216  -- ^ 'Withdrawn': Dronning Maud Land
+    | C218  -- ^ Ecuador
+    | C222  -- ^ El Salvador
+    | C226  -- ^ Equatorial Guinea
+    | C230  -- ^ 'Withdrawn': Ethiopia
+    | C231  -- ^ Ethiopia
+    | C232  -- ^ Eritrea
+    | C233  -- ^ Estonia
+    | C234  -- ^ Faroe Islands (the)
+    | C238  -- ^ Falkland Islands (the) [Malvinas]
+    | C239  -- ^ South Georgia and the South Sandwich Islands
+    | C242  -- ^ Fiji
+    | C246  -- ^ Finland
+    | C248  -- ^ Ãland Islands
+    | C249  -- ^ 'Withdrawn': France, Metropolitan
+
+    | C250  -- ^ France
+    | C254  -- ^ French Guiana
+    | C258  -- ^ French Polynesia
+    | C260  -- ^ French Southern Territories (the)
+    | C262  -- ^ Djibouti
+    | C266  -- ^ Gabon
+    | C268  -- ^ Georgia
+    | C270  -- ^ Gambia (the)
+    | C275  -- ^ Palestine, State of
+    | C276  -- ^ Germany
+    | C278  -- ^ 'Withdrawn': German Democratic Republic (the)
+    | C280  -- ^ 'Withdrawn': Germany (Federal Republic of)
+    | C288  -- ^ Ghana
+    | C292  -- ^ Gibraltar
+    | C296  -- ^ Kiribati
+
+    | C300  -- ^ Greece
+    | C304  -- ^ Greenland
+    | C308  -- ^ Grenada
+    | C312  -- ^ Guadeloupe
+    | C316  -- ^ Guam
+    | C320  -- ^ Guatemala
+    | C324  -- ^ Guinea
+    | C328  -- ^ Guyana
+    | C332  -- ^ Haiti
+    | C334  -- ^ Heard Island and McDonald Islands
+    | C336  -- ^ Holy See (the)
+    | C340  -- ^ Honduras
+    | C344  -- ^ Hong Kong
+    | C348  -- ^ Hungary
+
+    | C352  -- ^ Iceland
+    | C356  -- ^ India
+    | C360  -- ^ Indonesia
+    | C364  -- ^ Iran (Islamic Republic of)
+    | C368  -- ^ Iraq
+    | C372  -- ^ Ireland
+    | C376  -- ^ Israel
+    | C380  -- ^ Italy
+    | C384  -- ^ CÃ´te d'Ivoire
+    | C388  -- ^ Jamaica
+    | C392  -- ^ Japan
+    | C396  -- ^ 'Withdrawn': Johnston Island
+    | C398  -- ^ Kazakhstan
+
+    | C400  -- ^ Jordan
+    | C404  -- ^ Kenya
+    | C408  -- ^ Korea (the Democratic People's Republic of)
+    | C410  -- ^ Korea (the Republic of)
+    | C414  -- ^ Kuwait
+    | C417  -- ^ Kyrgyzstan
+    | C418  -- ^ Lao People's Democratic Republic (the)
+    | C422  -- ^ Lebanon
+    | C426  -- ^ Lesotho
+    | C428  -- ^ Latvia
+    | C430  -- ^ Liberia
+    | C434  -- ^ Libya
+    | C438  -- ^ Liechtenstein
+    | C440  -- ^ Lithuania
+    | C442  -- ^ Luxembourg
+    | C446  -- ^ Macao
+
+    | C450  -- ^ Madagascar
+    | C454  -- ^ Malawi
+    | C458  -- ^ Malaysia
+    | C462  -- ^ Maldives
+    | C466  -- ^ Mali
+    | C470  -- ^ Malta
+    | C474  -- ^ Martinique
+    | C478  -- ^ Mauritania
+    | C480  -- ^ Mauritius
+    | C484  -- ^ Mexico
+    | C488  -- ^ 'Withdrawn': Midway Islands (the)
+    | C492  -- ^ Monaco
+    | C496  -- ^ Mongolia
+    | C498  -- ^ Moldova (the Republic of)
+    | C499  -- ^ Montenegro
+
+    | C500  -- ^ Montserrat
+    | C504  -- ^ Morocco
+    | C508  -- ^ Mozambique
+    | C512  -- ^ Oman
+    | C516  -- ^ Namibia
+    | C520  -- ^ Nauru
+    | C524  -- ^ Nepal
+    | C528  -- ^ Netherlands (the)
+    | C530  -- ^ 'Withdrawn': Netherlands Antilles
+    | C531  -- ^ CuraÃ§ao
+    | C532  -- ^ 'Withdrawn': Netherlands Antilles
+    | C533  -- ^ Aruba
+    | C534  -- ^ Sint Maarten (Dutch part)
+    | C535  -- ^ Bonaire, Sint Eustatius and Saba
+    | C536  -- ^ 'Withdrawn': Saudi Arabian-Iraqi neutral zone (the)
+    | C540  -- ^ New Caledonia
+    | C548  -- ^ Vanuatu
+
+    | C554  -- ^ New Zealand
+    | C558  -- ^ Nicaragua
+    | C562  -- ^ Niger (the)
+    | C566  -- ^ Nigeria
+    | C570  -- ^ Niue
+    | C574  -- ^ Norfolk Island
+    | C578  -- ^ Norway
+    | C580  -- ^ Northern Mariana Islands (the)
+    | C581  -- ^ United States Minor Outlying Islands (the)
+    | C582  -- ^ 'Withdrawn': Pacific Islands (Trust Territory of the)
+    | C583  -- ^ Micronesia (Federated States of)
+    | C584  -- ^ Marshall Islands (the)
+    | C585  -- ^ Palau
+    | C586  -- ^ Pakistan
+    | C590  -- ^ 'Withdrawn': Panama
+    | C591  -- ^ Panama
+    | C594  -- ^ 'Withdrawn': Panama Canal Zone (the)
+    | C598  -- ^ Papua New Guinea
+
+    | C600  -- ^ Paraguay
+    | C604  -- ^ Peru
+    | C608  -- ^ Philippines (the)
+    | C612  -- ^ Pitcairn
+    | C616  -- ^ Poland
+    | C620  -- ^ Portugal
+    | C624  -- ^ Guinea-Bissau
+    | C626  -- ^ Timor-Leste
+    | C630  -- ^ Puerto Rico
+    | C634  -- ^ Qatar
+    | C638  -- ^ RÃ©union
+    | C642  -- ^ Romania
+    | C643  -- ^ Russian Federation (the)
+    | C646  -- ^ Rwanda
+
+    | C652  -- ^ Saint BarthÃ©lemy
+    | C654  -- ^ Saint Helena, Ascension and Tristan da Cunha
+    | C658  -- ^ 'Withdrawn': Saint Kitts-Nevis-Anguilla
+    | C659  -- ^ Saint Kitts and Nevis
+    | C660  -- ^ Anguilla
+    | C662  -- ^ Saint Lucia
+    | C663  -- ^ Saint Martin (French part)
+    | C666  -- ^ Saint Pierre and Miquelon
+    | C670  -- ^ Saint Vincent and the Grenadines
+    | C674  -- ^ San Marino
+    | C678  -- ^ Sao Tome and Principe
+    | C682  -- ^ Saudi Arabia
+    | C686  -- ^ Senegal
+    | C688  -- ^ Serbia
+    | C690  -- ^ Seychelles
+    | C694  -- ^ Sierra Leone
+    | C698  -- ^ 'Withdrawn': Sikkim
+
+    | C702  -- ^ Singapore
+    | C703  -- ^ Slovakia
+    | C704  -- ^ Viet Nam
+    | C705  -- ^ Slovenia
+    | C706  -- ^ Somalia
+    | C710  -- ^ South Africa
+    | C714  -- ^ 'Withdrawn': Viet Nam (Democratic Republic of)
+    | C716  -- ^ Zimbabwe
+    | C720  -- ^ 'Withdrawn': Yemen (Democratic)
+    | C724  -- ^ Spain
+    | C728  -- ^ South Sudan
+    | C729  -- ^ Sudan (the)
+    | C732  -- ^ Western Sahara
+    | C736  -- ^ 'Withdrawn': Sudan (the)
+    | C740  -- ^ Suriname
+    | C744  -- ^ Svalbard and Jan Mayen
+    | C748  -- ^ Swaziland
+
+    | C752  -- ^ Sweden
+    | C756  -- ^ Switzerland
+    | C760  -- ^ Syrian Arab Republic
+    | C762  -- ^ Tajikistan
+    | C764  -- ^ Thailand
+    | C768  -- ^ Togo
+    | C772  -- ^ Tokelau
+    | C776  -- ^ Tonga
+    | C780  -- ^ Trinidad and Tobago
+    | C784  -- ^ United Arab Emirates (the)
+    | C788  -- ^ Tunisia
+    | C792  -- ^ Turkey
+    | C795  -- ^ Turkmenistan
+    | C796  -- ^ Turks and Caicos Islands (the)
+    | C798  -- ^ Tuvalu
+
+    | C800  -- ^ Uganda
+    | C804  -- ^ Ukraine
+    | C807  -- ^ Macedonia (the former Yugoslav Republic of)
+    | C810  -- ^ 'Withdrawn': USSR (the)
+    | C818  -- ^ Egypt
+    | C826  -- ^ United Kingdom of Great Britain and Northern Ireland (the)
+    | C831  -- ^ Guernsey
+    | C832  -- ^ Jersey
+    | C833  -- ^ Isle of Man
+    | C834  -- ^ Tanzania, United Republic of
+    | C840  -- ^ United States of America (the)
+    | C849  -- ^ 'Withdrawn': United States Miscellaneous Pacific Islands (the)
+
+    | C850  -- ^ Virgin Islands (U.S.)
+    | C854  -- ^ Burkina Faso
+    | C858  -- ^ Uruguay
+    | C860  -- ^ Uzbekistan
+    | C862  -- ^ Venezuela (Bolivarian Republic of)
+    | C872  -- ^ 'Withdrawn': Wake Island
+    | C876  -- ^ Wallis and Futuna
+    | C882  -- ^ Samoa
+    | C886  -- ^ 'Withdrawn': Yemen Arab Republic
+    | C887  -- ^ Yemen
+    | C890  -- ^ 'Withdrawn': Yugoslavia (Socialist Federal Republic of)
+    | C891  -- ^ 'Withdrawn': Serbia and Montenegro
+    | C894  -- ^ Zambia
+  deriving ( Eq, Show, Read, Bounded )
+
+-- | The 'Int' values returned or processed by this instance are the true value
+-- of the country code, rather than being incremental.
+instance Enum Numeric where
+    toEnum i = read $ 'C' : P.printf "%03d" i
+    fromEnum = read . tail . show
+
+    -- The derived instance takes a path through 'fromEnum' and 'toEnum' rather
+    -- than using 'succ' and 'pred'.  This seems like a bug, but if so, it's a
+    -- bug in the Haskell Report not just GHC.
+    -- 
+    -- Relevant sections of the Report: 6.3.4 (which gives rules for 'enumFrom'
+    -- and 'enumFromThen' based on 'enumFromTo' and 'enumFromThenTo' when also
+    -- Bounded that GHC isn't following) and 11.2 (same as above, plus defaults
+    -- for the latter based on 'Int' lists) as well as the definition in the
+    -- Prelude (section 9; the same implementations as GHC despite all being
+    -- 'Int' lists -- running into the same problem with 6.3.4 -- and having a
+    -- note that explicitly says they only make sense for injective mappings).
+    enumFrom = flip enumFromTo maxBound
+    enumFromThen x y = enumFromThenTo x y bound
+       where bound
+               | fromEnum x <= fromEnum y = maxBound
+               | otherwise                = minBound
+
+    enumFromTo x y
+        | x == y                  = [x]
+        | fromEnum x > fromEnum y = []
+        | otherwise               = x : enumFromTo (succ x) y
+
+    enumFromThenTo x1 x2 y
+        | x1 == y   = []
+        | otherwise = x1 : count x1 x2
+      where count x1' x2'
+                | (fromEnum x2' <= fromEnum y) /= forward = [x2]
+                | x1' == x2 = enumFromThenTo x1' x2' y
+                | forward   = count (succ x1') (succ x2')
+                | otherwise = count (pred x1') (pred x2')
+            forward = fromEnum x1 < fromEnum x2
+
+    --TODO: Depending on how the compiler transforms these, it might be better
+    -- to put them into a lookup table; check with benchmarking.
+    succ C004 = C008
+    succ C008 = C010
+    succ C010 = C012
+    succ C012 = C016
+    succ C016 = C020
+    succ C020 = C024
+    succ C024 = C028
+    succ C028 = C031
+    succ C032 = C036
+    succ C036 = C040
+    succ C040 = C044
+    succ C044 = C048
+    succ C048 = C050
+
+    succ C052 = C056
+    succ C056 = C060
+    succ C060 = C064
+    succ C064 = C068
+    succ C068 = C070
+    succ C070 = C072
+    succ C072 = C074
+    succ C074 = C076
+    succ C076 = C080
+    succ C080 = C084
+    succ C084 = C086
+    succ C086 = C090
+    succ C090 = C092
+    succ C092 = C096
+    succ C096 = C100
+
+    succ C100 = C104
+    succ C104 = C108
+    succ C108 = C112
+    succ C112 = C116
+    succ C116 = C120
+    succ C120 = C124
+    succ C124 = C128
+    succ C128 = C132
+    succ C132 = C136
+    succ C136 = C140
+    succ C140 = C144
+    succ C144 = C148
+    succ C148 = C152
+
+    succ C152 = C156
+    succ C156 = C158
+    succ C158 = C162
+    succ C162 = C166
+    succ C166 = C170
+    succ C170 = C174
+    succ C175 = C178
+    succ C178 = C180
+    succ C180 = C184
+    succ C184 = C188
+    succ C188 = C191
+    succ C192 = C196
+    succ C196 = C200
+
+    succ C200 = C203
+    succ C204 = C208
+    succ C208 = C212
+    succ C212 = C214
+    succ C214 = C216
+    succ C216 = C218
+    succ C218 = C222
+    succ C222 = C226
+    succ C226 = C230
+    succ C234 = C238
+    succ C239 = C242
+    succ C242 = C246
+    succ C246 = C248
+
+    succ C250 = C254
+    succ C254 = C258
+    succ C258 = C260
+    succ C260 = C262
+    succ C262 = C266
+    succ C266 = C268
+    succ C268 = C270
+    succ C270 = C275
+    succ C276 = C278
+    succ C278 = C280
+    succ C280 = C288
+    succ C288 = C292
+    succ C292 = C296
+    succ C296 = C300
+
+    succ C300 = C304
+    succ C304 = C308
+    succ C308 = C312
+    succ C312 = C316
+    succ C316 = C320
+    succ C320 = C324
+    succ C324 = C328
+    succ C328 = C332
+    succ C332 = C334
+    succ C334 = C336
+    succ C336 = C340
+    succ C340 = C344
+    succ C344 = C348
+    succ C348 = C352
+
+    succ C352 = C356
+    succ C356 = C360
+    succ C360 = C364
+    succ C364 = C368
+    succ C368 = C372
+    succ C372 = C376
+    succ C376 = C380
+    succ C380 = C384
+    succ C384 = C388
+    succ C388 = C392
+    succ C392 = C396
+    succ C396 = C398
+    succ C398 = C400
+
+    succ C400 = C404
+    succ C404 = C408
+    succ C408 = C410
+    succ C410 = C414
+    succ C414 = C417
+    succ C418 = C422
+    succ C422 = C426
+    succ C426 = C428
+    succ C428 = C430
+    succ C430 = C434
+    succ C434 = C438
+    succ C438 = C440
+    succ C440 = C442
+    succ C442 = C446
+    succ C446 = C450
+
+    succ C450 = C454
+    succ C454 = C458
+    succ C458 = C462
+    succ C462 = C466
+    succ C466 = C470
+    succ C470 = C474
+    succ C474 = C478
+    succ C478 = C480
+    succ C480 = C484
+    succ C484 = C488
+    succ C488 = C492
+    succ C492 = C496
+    succ C496 = C498
+
+    succ C500 = C504
+    succ C504 = C508
+    succ C508 = C512
+    succ C512 = C516
+    succ C516 = C520
+    succ C520 = C524
+    succ C524 = C528
+    succ C528 = C530
+    succ C536 = C540
+    succ C540 = C548
+    succ C548 = C554
+
+    succ C554 = C558
+    succ C558 = C562
+    succ C562 = C566
+    succ C566 = C570
+    succ C570 = C574
+    succ C574 = C578
+    succ C578 = C580
+    succ C586 = C590
+    succ C591 = C594
+    succ C594 = C598
+    succ C598 = C600
+
+    succ C600 = C604
+    succ C604 = C608
+    succ C608 = C612
+    succ C612 = C616
+    succ C616 = C620
+    succ C620 = C624
+    succ C624 = C626
+    succ C626 = C630
+    succ C630 = C634
+    succ C634 = C638
+    succ C638 = C642
+    succ C643 = C646
+    succ C646 = C652
+
+    succ C652 = C654
+    succ C654 = C658
+    succ C660 = C662
+    succ C663 = C666
+    succ C666 = C670
+    succ C670 = C674
+    succ C674 = C678
+    succ C678 = C682
+    succ C682 = C686
+    succ C686 = C688
+    succ C688 = C690
+    succ C690 = C694
+    succ C694 = C698
+    succ C698 = C702
+
+    succ C706 = C710
+    succ C710 = C714
+    succ C714 = C716
+    succ C716 = C720
+    succ C720 = C724
+    succ C724 = C728
+    succ C729 = C732
+    succ C732 = C736
+    succ C736 = C740
+    succ C740 = C744
+    succ C744 = C748
+    succ C748 = C752
+
+    succ C752 = C756
+    succ C756 = C760
+    succ C760 = C762
+    succ C762 = C764
+    succ C764 = C768
+    succ C768 = C772
+    succ C772 = C776
+    succ C776 = C780
+    succ C780 = C784
+    succ C784 = C788
+    succ C788 = C792
+    succ C792 = C795
+    succ C796 = C798
+    succ C798 = C800
+
+    succ C800 = C804
+    succ C804 = C807
+    succ C807 = C810
+    succ C810 = C818
+    succ C818 = C826
+    succ C826 = C831
+    succ C834 = C840
+    succ C840 = C849
+
+    succ C850 = C854
+    succ C854 = C858
+    succ C858 = C860
+    succ C860 = C862
+    succ C862 = C872
+    succ C872 = C876
+    succ C876 = C882
+    succ C882 = C886
+    succ C887 = C890
+    succ C891 = C894
+
+    succ c
+        | c == maxBound = error "tried to take `succ' of last tag in enumeration"
+        | otherwise     = toEnum . (+) 1 $ fromEnum c
+
+    pred C008 = C004
+    pred C010 = C008
+    pred C012 = C010
+    pred C016 = C012
+    pred C020 = C016
+    pred C024 = C020
+    pred C028 = C024
+    pred C031 = C028
+    pred C036 = C032
+    pred C040 = C036
+    pred C044 = C040
+    pred C048 = C044
+
+    pred C050 = C048
+    pred C056 = C052
+    pred C060 = C056
+    pred C064 = C060
+    pred C068 = C064
+    pred C070 = C068
+    pred C072 = C070
+    pred C074 = C072
+    pred C076 = C074
+    pred C080 = C076
+    pred C084 = C080
+    pred C086 = C084
+    pred C090 = C086
+    pred C092 = C090
+    pred C096 = C092
+
+    pred C100 = C096
+    pred C104 = C100
+    pred C108 = C104
+    pred C112 = C108
+    pred C116 = C112
+    pred C120 = C116
+    pred C124 = C120
+    pred C128 = C124
+    pred C132 = C128
+    pred C136 = C132
+    pred C140 = C136
+    pred C144 = C140
+    pred C148 = C144
+
+    pred C152 = C148
+    pred C156 = C152
+    pred C158 = C156
+    pred C162 = C158
+    pred C166 = C162
+    pred C170 = C166
+    pred C174 = C170
+    pred C178 = C175
+    pred C180 = C178
+    pred C184 = C180
+    pred C188 = C184
+    pred C191 = C188
+    pred C196 = C192
+
+    pred C200 = C196
+    pred C203 = C200
+    pred C208 = C204
+    pred C212 = C208
+    pred C214 = C212
+    pred C216 = C214
+    pred C218 = C216
+    pred C222 = C218
+    pred C226 = C222
+    pred C230 = C226
+    pred C238 = C234
+    pred C242 = C239
+    pred C246 = C242
+    pred C248 = C246
+
+    pred C254 = C250
+    pred C258 = C254
+    pred C260 = C258
+    pred C262 = C260
+    pred C266 = C262
+    pred C268 = C266
+    pred C270 = C268
+    pred C275 = C270
+    pred C278 = C276
+    pred C280 = C278
+    pred C288 = C280
+    pred C292 = C288
+    pred C296 = C292
+
+    pred C300 = C296
+    pred C304 = C300
+    pred C308 = C304
+    pred C312 = C308
+    pred C316 = C312
+    pred C320 = C316
+    pred C324 = C320
+    pred C328 = C324
+    pred C332 = C328
+    pred C334 = C332
+    pred C336 = C334
+    pred C340 = C336
+    pred C344 = C340
+    pred C348 = C344
+
+    pred C352 = C348
+    pred C356 = C352
+    pred C360 = C356
+    pred C364 = C360
+    pred C368 = C364
+    pred C372 = C368
+    pred C376 = C372
+    pred C380 = C376
+    pred C384 = C380
+    pred C388 = C384
+    pred C392 = C388
+    pred C396 = C392
+    pred C398 = C396
+
+    pred C400 = C398
+    pred C404 = C400
+    pred C408 = C404
+    pred C410 = C408
+    pred C414 = C410
+    pred C417 = C414
+    pred C422 = C418
+    pred C426 = C422
+    pred C428 = C426
+    pred C430 = C428
+    pred C434 = C430
+    pred C438 = C434
+    pred C440 = C438
+    pred C442 = C440
+    pred C446 = C442
+
+    pred C450 = C446
+    pred C454 = C450
+    pred C458 = C454
+    pred C462 = C458
+    pred C466 = C462
+    pred C470 = C466
+    pred C474 = C470
+    pred C478 = C474
+    pred C480 = C478
+    pred C484 = C480
+    pred C488 = C484
+    pred C492 = C488
+    pred C496 = C492
+    pred C498 = C496
+
+    pred C504 = C500
+    pred C508 = C504
+    pred C512 = C508
+    pred C516 = C512
+    pred C520 = C516
+    pred C524 = C520
+    pred C528 = C524
+    pred C530 = C528
+    pred C540 = C536
+    pred C548 = C540
+
+    pred C554 = C548
+    pred C558 = C554
+    pred C562 = C558
+    pred C566 = C562
+    pred C570 = C566
+    pred C574 = C570
+    pred C578 = C574
+    pred C580 = C578
+    pred C590 = C586
+    pred C594 = C591
+    pred C598 = C594
+
+    pred C600 = C598
+    pred C604 = C600
+    pred C608 = C604
+    pred C612 = C608
+    pred C616 = C612
+    pred C620 = C616
+    pred C624 = C620
+    pred C626 = C624
+    pred C630 = C626
+    pred C634 = C630
+    pred C638 = C634
+    pred C642 = C638
+    pred C646 = C643
+
+    pred C652 = C646
+    pred C654 = C652
+    pred C658 = C654
+    pred C662 = C660
+    pred C666 = C663
+    pred C670 = C666
+    pred C674 = C670
+    pred C678 = C674
+    pred C682 = C678
+    pred C686 = C682
+    pred C688 = C686
+    pred C690 = C688
+    pred C694 = C690
+    pred C698 = C694
+
+    pred C702 = C698
+    pred C710 = C706
+    pred C714 = C710
+    pred C716 = C714
+    pred C720 = C716
+    pred C724 = C720
+    pred C728 = C724
+    pred C732 = C729
+    pred C736 = C732
+    pred C740 = C736
+    pred C744 = C740
+    pred C748 = C744
+
+    pred C752 = C748
+    pred C756 = C752
+    pred C760 = C756
+    pred C762 = C760
+    pred C764 = C762
+    pred C768 = C764
+    pred C772 = C768
+    pred C776 = C772
+    pred C780 = C776
+    pred C784 = C780
+    pred C788 = C784
+    pred C792 = C788
+    pred C795 = C792
+    pred C798 = C796
+
+    pred C800 = C798
+    pred C804 = C800
+    pred C807 = C804
+    pred C810 = C807
+    pred C818 = C810
+    pred C826 = C818
+    pred C831 = C826
+    pred C840 = C834
+    pred C849 = C840
+
+    pred C854 = C850
+    pred C858 = C854
+    pred C860 = C858
+    pred C862 = C860
+    pred C872 = C862
+    pred C876 = C872
+    pred C882 = C876
+    pred C886 = C882
+    pred C890 = C887
+    pred C894 = C891
+
+    pred c
+        | c == minBound = error "tried to take `pred' of first tag in enumeration"
+        | otherwise     = toEnum . subtract 1 $ fromEnum c
+
+instance H.Hashable Numeric where
+    hashWithSalt = H.hashUsing fromEnum
+
+-- | The stability of any particular country code.
+codeStatus :: Numeric -> Status
+codeStatus C080 = Withdrawn
+codeStatus C128 = Withdrawn
+codeStatus C200 = Withdrawn
+codeStatus C216 = Withdrawn
+codeStatus C230 = Withdrawn
+codeStatus C249 = Withdrawn
+codeStatus C278 = Withdrawn
+codeStatus C280 = Withdrawn
+codeStatus C396 = Withdrawn
+codeStatus C488 = Withdrawn
+codeStatus C530 = Withdrawn
+codeStatus C532 = Withdrawn
+codeStatus C536 = Withdrawn
+codeStatus C582 = Withdrawn
+codeStatus C590 = Withdrawn
+codeStatus C594 = Withdrawn
+codeStatus C658 = Withdrawn
+codeStatus C698 = Withdrawn
+codeStatus C714 = Withdrawn
+codeStatus C720 = Withdrawn
+codeStatus C736 = Withdrawn
+codeStatus C810 = Withdrawn
+codeStatus C849 = Withdrawn
+codeStatus C872 = Withdrawn
+codeStatus C886 = Withdrawn
+codeStatus C890 = Withdrawn
+codeStatus C891 = Withdrawn
+codeStatus _ = Official
diff --git a/Data/Standards/ISO/Country/Primary/Translation.hs b/Data/Standards/ISO/Country/Primary/Translation.hs
new file mode 100644
--- /dev/null
+++ b/Data/Standards/ISO/Country/Primary/Translation.hs
@@ -0,0 +1,413 @@
+{-# OPTIONS -Wno-deprecations #-}
+
+{- | Module      : Data.Standards.ISO.Country.Primary.Translation
+ -   Description : Convert between various code formats described by ISO 3166-1.
+ -   Copyright   : (c) 2018 Samuel May
+ -   License     : MPL-2.0
+ -   Maintainer  : ag.eitilt@gmail.com
+ -   Stability   : stable
+ -   Portability : portable
+ -}
+module Data.Standards.ISO.Country.Primary.Translation
+    ( alpha2ToAlpha3
+    , alpha2ToNumeric
+    , alpha3ToAlpha2
+    , alpha3ToNumeric
+    , numericToAlpha2
+    , numericToAlpha3
+    ) where
+
+import qualified Data.Standards.ISO.Country.Primary.Alpha2 as A2
+import qualified Data.Standards.ISO.Country.Primary.Alpha3 as A3
+import qualified Data.Standards.ISO.Country.Primary.Numeric as N
+
+import qualified Data.HashMap.Lazy as M
+import qualified Data.Maybe as Y
+
+-- | Convert an 'Alpha2' country code to an 'Alpha3'.
+alpha2ToAlpha3 :: A2.Alpha2 -> Maybe A3.Alpha3
+alpha2ToAlpha3 = flip M.lookup a2a3
+
+-- | Convert an 'Alpha2' country code to a 'Numeric'.
+alpha2ToNumeric :: A2.Alpha2 -> Maybe N.Numeric
+alpha2ToNumeric = flip M.lookup a2n
+
+-- | Convert an 'Alpha3' country code to an 'Alpha2'.
+alpha3ToAlpha2 :: A3.Alpha3 -> Maybe A2.Alpha2
+alpha3ToAlpha2 = flip M.lookup a3a2
+
+-- | Convert an 'Alpha3' country code to a 'Numeric'.
+alpha3ToNumeric :: A3.Alpha3 -> Maybe N.Numeric
+alpha3ToNumeric = flip M.lookup a3n
+
+-- | Convert a 'Numeric' country code to an 'Alpha2'.
+numericToAlpha2 :: N.Numeric -> Maybe A2.Alpha2
+numericToAlpha2 = flip M.lookup na2
+
+-- | Convert a 'Numeric' country code to an 'Alpha3'.
+numericToAlpha3 :: N.Numeric -> Maybe A3.Alpha3
+numericToAlpha3 = flip M.lookup na3
+
+-- | The mappings between countries which have a unique code in all systems of
+-- representation.
+tuples :: [(Maybe A2.Alpha2, Maybe A3.Alpha3, Maybe N.Numeric)]
+tuples =
+    --TODO: Allow multiple mappings /to/ 'Numeric' for historic names, but only
+    -- a single one /from/ it (the current).
+    [ (Just A2.AC, Just A3.ASC, Nothing    )  -- Ascension Island
+    , (Just A2.AD, Just A3.AND, Just N.C020)  -- Andorra
+    , (Just A2.AE, Just A3.ARE, Just N.C784)  -- United Arab Emirates (the)
+    , (Just A2.AF, Just A3.AFG, Just N.C004)  -- Afghanistan
+    , (Just A2.AG, Just A3.ATG, Just N.C028)  -- Antigua and Barbuda
+    , (Just A2.AI, Just A3.AIA, Just N.C660)  -- Anguilla
+    , (Just A2.AL, Just A3.ALB, Just N.C008)  -- Albania
+    , (Just A2.AM, Just A3.ARM, Just N.C051)  -- Armenia
+    , (Just A2.AN, Just A3.ANT, Just N.C530)  -- Netherlands Antilles
+    , (Just A2.AO, Just A3.AGO, Just N.C024)  -- Angola
+    , (Just A2.AQ, Just A3.ATA, Just N.C010)  -- Antarctica
+    , (Just A2.AR, Just A3.ARG, Just N.C032)  -- Argentina
+    , (Just A2.AS, Just A3.ASM, Just N.C016)  -- American Samoa
+    , (Just A2.AT, Just A3.AUT, Just N.C040)  -- Austria
+    , (Just A2.AU, Just A3.AUS, Just N.C036)  -- Australia
+    , (Just A2.AW, Just A3.ABW, Just N.C533)  -- Aruba
+    , (Just A2.AX, Just A3.ALA, Just N.C248)  -- Åland Islands
+    , (Just A2.AZ, Just A3.AZE, Just N.C031)  -- Azerbaijan
+
+    , (Just A2.BA, Just A3.BIH, Just N.C070)  -- Bosnia and Herzegovina
+    , (Just A2.BB, Just A3.BRB, Just N.C052)  -- Barbados
+    , (Just A2.BD, Just A3.BGD, Just N.C050)  -- Bangladesh
+    , (Just A2.BE, Just A3.BEL, Just N.C056)  -- Belgium
+    , (Just A2.BF, Just A3.BFA, Just N.C854)  -- Burkina Faso
+    , (Just A2.BG, Just A3.BGR, Just N.C100)  -- Bulgaria
+    , (Just A2.BH, Just A3.BHR, Just N.C048)  -- Bahrain
+    , (Just A2.BI, Just A3.BDI, Just N.C108)  -- Burundi
+    , (Just A2.BJ, Just A3.BEN, Just N.C204)  -- Benin
+    , (Just A2.BL, Just A3.BLM, Just N.C652)  -- Saint Barthélemy
+    , (Just A2.BM, Just A3.BMU, Just N.C060)  -- Bermuda
+    , (Just A2.BN, Just A3.BRN, Just N.C096)  -- Brunei Darussalam
+    , (Just A2.BO, Just A3.BOL, Just N.C068)  -- Bolivia (Plurinational State of)
+    , (Nothing   , Just A3.ATB, Just N.C080)  -- British Antarctic Territory (the)
+    , (Just A2.BQ, Just A3.BES, Just N.C535)  -- Bonaire, Sint Eustatius and Saba
+    , (Just A2.BR, Just A3.BRA, Just N.C076)  -- Brazil
+    , (Just A2.BS, Just A3.BHS, Just N.C044)  -- Bahamas (the)
+    , (Just A2.BT, Just A3.BTN, Just N.C064)  -- Bhutan
+    , (Just A2.BU, Just A3.BUR, Nothing    )  -- Burma
+    , (Just A2.BV, Just A3.BVT, Just N.C074)  -- Bouvet Island
+    , (Just A2.BW, Just A3.BWA, Just N.C072)  -- Botswana
+    , (Just A2.BY, Just A3.BLR, Just N.C112)  -- Belarus
+    , (Just A2.BZ, Just A3.BLZ, Just N.C084)  -- Belize
+
+    , (Just A2.CA, Just A3.CAN, Just N.C124)  -- Canada
+    , (Just A2.CC, Just A3.CCK, Just N.C166)  -- Cocos (Keeling) Islands (the)
+    , (Just A2.CD, Just A3.COD, Just N.C180)  -- Congo (the Democratic Republic of the)
+    , (Just A2.CF, Just A3.CAF, Just N.C140)  -- Central African Republic (the)
+    , (Just A2.CG, Just A3.COG, Just N.C178)  -- Congo (the)
+    , (Just A2.CH, Just A3.CHE, Just N.C756)  -- Switzerland
+    , (Just A2.CI, Just A3.CIV, Just N.C384)  -- Côte d'Ivoire
+    , (Just A2.CK, Just A3.COK, Just N.C184)  -- Cook Islands (the)
+    , (Just A2.CL, Just A3.CHL, Just N.C152)  -- Chile
+    , (Just A2.CM, Just A3.CMR, Just N.C120)  -- Cameroon
+    , (Just A2.CN, Just A3.CHN, Just N.C156)  -- China
+    , (Just A2.CO, Just A3.COL, Just N.C170)  -- Colombia
+    , (Just A2.CP, Just A3.CPT, Nothing    )  -- Clipperton Island
+    , (Just A2.CR, Just A3.CRI, Just N.C188)  -- Costa Rica
+    , (Nothing   , Just A3.CSK, Just N.C200)  -- Czechoslovakia
+    , (Just A2.CS, Just A3.SCG, Just N.C891)  -- Serbia and Montenegro
+    , (Just A2.CT, Just A3.CTE, Just N.C128)  -- Canton and Enderbury Islands (the)
+    , (Just A2.CU, Just A3.CUB, Just N.C192)  -- Cuba
+    , (Just A2.CV, Just A3.CPV, Just N.C132)  -- Cabo Verde
+    , (Just A2.CW, Just A3.CUW, Just N.C531)  -- Curaçao
+    , (Just A2.CX, Just A3.CXR, Just N.C162)  -- Christmas Island
+    , (Just A2.CY, Just A3.CYP, Just N.C196)  -- Cyprus
+    , (Just A2.CZ, Just A3.CZE, Just N.C203)  -- Czechia
+
+    , (Just A2.DD, Just A3.DDR, Just N.C278)  -- German Democratic Republic (the)
+    , (Just A2.DE, Just A3.DEU, Just N.C276)  -- Germany
+    , (Just A2.DG, Just A3.DGA, Nothing    )  -- Diego Garcia
+    , (Just A2.DJ, Just A3.DJI, Just N.C262)  -- Djibouti
+    , (Just A2.DK, Just A3.DNK, Just N.C208)  -- Denmark
+    , (Just A2.DM, Just A3.DMA, Just N.C212)  -- Dominica
+    , (Just A2.DO, Just A3.DOM, Just N.C214)  -- Dominican Republic (the)
+    , (Just A2.DZ, Just A3.DZA, Just N.C012)  -- Algeria
+
+    , (Just A2.EA, Nothing    , Nothing    )  -- Ceuta & Melilla
+    , (Just A2.EC, Just A3.ECU, Just N.C218)  -- Ecuador
+    , (Just A2.EE, Just A3.EST, Just N.C233)  -- Estonia
+    , (Just A2.EG, Just A3.EGY, Just N.C818)  -- Egypt
+    , (Just A2.EH, Just A3.ESH, Just N.C732)  -- Western Sahara
+    , (Just A2.ER, Just A3.ERI, Just N.C232)  -- Eritrea
+    , (Just A2.ES, Just A3.ESP, Just N.C724)  -- Spain
+    , (Just A2.ET, Just A3.ETH, Just N.C231)  -- Ethiopia
+    , (Just A2.EU, Nothing    , Nothing    )  -- European Union
+    , (Just A2.EZ, Nothing    , Nothing    )  -- Eurozone
+
+    , (Just A2.FI, Just A3.FIN, Just N.C246)  -- Finland
+    , (Just A2.FJ, Just A3.FJI, Just N.C242)  -- Fiji
+    , (Just A2.FK, Just A3.FLK, Just N.C238)  -- Falkland Islands (the) [Malvinas]
+    , (Just A2.FM, Just A3.FSM, Just N.C583)  -- Micronesia (Federated States of)
+    , (Just A2.FO, Just A3.FRO, Just N.C234)  -- Faroe Islands (the)
+    , (Just A2.FR, Just A3.FRA, Just N.C250)  -- France
+    , (Just A2.FX, Just A3.FXX, Just N.C249)  -- France, Metropolitan
+
+    , (Just A2.GA, Just A3.GAB, Just N.C266)  -- Gabon
+    , (Just A2.GB, Just A3.GBR, Just N.C826)  -- United Kingdom of Great Britain and Northern Ireland (the)
+    , (Just A2.GD, Just A3.GRD, Just N.C308)  -- Grenada
+    , (Just A2.GE, Just A3.GEO, Just N.C268)  -- Georgia
+    , (Just A2.GF, Just A3.GUF, Just N.C254)  -- French Guiana
+    , (Just A2.GG, Just A3.GGY, Just N.C831)  -- Guernsey
+    , (Just A2.GH, Just A3.GHA, Just N.C288)  -- Ghana
+    , (Just A2.GI, Just A3.GIB, Just N.C292)  -- Gibraltar
+    , (Just A2.GL, Just A3.GRL, Just N.C304)  -- Greenland
+    , (Just A2.GM, Just A3.GMB, Just N.C270)  -- Gambia (the)
+    , (Just A2.GN, Just A3.GIN, Just N.C324)  -- Guinea
+    , (Just A2.GP, Just A3.GLP, Just N.C312)  -- Guadeloupe
+    , (Just A2.GQ, Just A3.GNQ, Just N.C226)  -- Equatorial Guinea
+    , (Just A2.GR, Just A3.GRC, Just N.C300)  -- Greece
+    , (Just A2.GS, Just A3.SGS, Just N.C239)  -- South Georgia and the South Sandwich Islands
+    , (Just A2.GT, Just A3.GTM, Just N.C320)  -- Guatemala
+    , (Just A2.GU, Just A3.GUM, Just N.C316)  -- Guam
+    , (Just A2.GW, Just A3.GNB, Just N.C624)  -- Guinea-Bissau
+    , (Just A2.GY, Just A3.GUY, Just N.C328)  -- Guyana
+
+    , (Just A2.HK, Just A3.HKG, Just N.C344)  -- Hong Kong
+    , (Just A2.HM, Just A3.HMD, Just N.C334)  -- Heard Island and McDonald Islands
+    , (Just A2.HN, Just A3.HND, Just N.C340)  -- Honduras
+    , (Just A2.HR, Just A3.HRV, Just N.C191)  -- Croatia
+    , (Just A2.HT, Just A3.HTI, Just N.C332)  -- Haiti
+    , (Just A2.HU, Just A3.HUN, Just N.C348)  -- Hungary
+    , (Just A2.HV, Just A3.HVO, Nothing    )  -- Upper Volta
+
+    , (Just A2.IC, Nothing    , Nothing    )  -- Canary Islands
+    , (Just A2.ID, Just A3.IDN, Just N.C360)  -- Indonesia
+    , (Just A2.IE, Just A3.IRL, Just N.C372)  -- Ireland
+    , (Just A2.IL, Just A3.ISR, Just N.C376)  -- Israel
+    , (Just A2.IM, Just A3.IMN, Just N.C833)  -- Isle of Man
+    , (Just A2.IN, Just A3.IND, Just N.C356)  -- India
+    , (Just A2.IO, Just A3.IOT, Just N.C086)  -- British Indian Ocean Territory (the)
+    , (Just A2.IQ, Just A3.IRQ, Just N.C368)  -- Iraq
+    , (Just A2.IR, Just A3.IRN, Just N.C364)  -- Iran (Islamic Republic of)
+    , (Just A2.IS, Just A3.ISL, Just N.C352)  -- Iceland
+    , (Just A2.IT, Just A3.ITA, Just N.C380)  -- Italy
+
+    , (Just A2.JE, Just A3.JEY, Just N.C832)  -- Jersey
+    , (Just A2.JM, Just A3.JAM, Just N.C388)  -- Jamaica
+    , (Just A2.JO, Just A3.JOR, Just N.C400)  -- Jordan
+    , (Just A2.JP, Just A3.JPN, Just N.C392)  -- Japan
+    , (Just A2.JT, Just A3.JTN, Just N.C396)  -- Johnston Island
+
+    , (Just A2.KE, Just A3.KEN, Just N.C404)  -- Kenya
+    , (Just A2.KG, Just A3.KGZ, Just N.C417)  -- Kyrgyzstan
+    , (Just A2.KH, Just A3.KHM, Just N.C116)  -- Cambodia
+    , (Just A2.KI, Just A3.KIR, Just N.C296)  -- Kiribati
+    , (Just A2.KM, Just A3.COM, Just N.C174)  -- Comoros (the)
+    , (Just A2.KN, Just A3.KNA, Just N.C659)  -- Saint Kitts and Nevis
+    , (Just A2.KP, Just A3.PRK, Just N.C408)  -- Korea (the Democratic People's Republic of)
+    , (Just A2.KR, Just A3.KOR, Just N.C410)  -- Korea (the Republic of)
+    , (Just A2.KW, Just A3.KWT, Just N.C414)  -- Kuwait
+    , (Just A2.KY, Just A3.CYM, Just N.C136)  -- Cayman Islands (the)
+    , (Just A2.KZ, Just A3.KAZ, Just N.C398)  -- Kazakhstan
+
+    , (Just A2.LA, Just A3.LAO, Just N.C418)  -- Lao People's Democratic Republic (the)
+    , (Just A2.LB, Just A3.LBN, Just N.C422)  -- Lebanon
+    , (Just A2.LC, Just A3.LCA, Just N.C662)  -- Saint Lucia
+    , (Just A2.LI, Just A3.LIE, Just N.C438)  -- Liechtenstein
+    , (Just A2.LK, Just A3.LKA, Just N.C144)  -- Sri Lanka
+    , (Just A2.LR, Just A3.LBR, Just N.C430)  -- Liberia
+    , (Just A2.LS, Just A3.LSO, Just N.C426)  -- Lesotho
+    , (Just A2.LT, Just A3.LTU, Just N.C440)  -- Lithuania
+    , (Just A2.LU, Just A3.LUX, Just N.C442)  -- Luxembourg
+    , (Just A2.LV, Just A3.LVA, Just N.C428)  -- Latvia
+    , (Just A2.LY, Just A3.LBY, Just N.C434)  -- Libya
+
+    , (Just A2.MA, Just A3.MAR, Just N.C504)  -- Morocco
+    , (Just A2.MC, Just A3.MCO, Just N.C492)  -- Monaco
+    , (Just A2.MD, Just A3.MDA, Just N.C498)  -- Moldova (the Republic of)
+    , (Just A2.ME, Just A3.MNE, Just N.C499)  -- Montenegro
+    , (Just A2.MF, Just A3.MAF, Just N.C663)  -- Saint Martin (French part)
+    , (Just A2.MG, Just A3.MDG, Just N.C450)  -- Madagascar
+    , (Just A2.MH, Just A3.MHL, Just N.C584)  -- Marshall Islands (the)
+    , (Just A2.MI, Just A3.MID, Just N.C488)  -- Midway Islands (the)
+    , (Just A2.MK, Just A3.MKD, Just N.C807)  -- Macedonia (the former Yugoslav Republic of)
+    , (Just A2.ML, Just A3.MLI, Just N.C466)  -- Mali
+    , (Just A2.MM, Just A3.MMR, Just N.C104)  -- Myanmar
+    , (Just A2.MN, Just A3.MNG, Just N.C496)  -- Mongolia
+    , (Just A2.MO, Just A3.MAC, Just N.C446)  -- Macao
+    , (Just A2.MP, Just A3.MNP, Just N.C580)  -- Northern Mariana Islands (the)
+    , (Just A2.MQ, Just A3.MTQ, Just N.C474)  -- Martinique
+    , (Just A2.MR, Just A3.MRT, Just N.C478)  -- Mauritania
+    , (Just A2.MS, Just A3.MSR, Just N.C500)  -- Montserrat
+    , (Just A2.MT, Just A3.MLT, Just N.C470)  -- Malta
+    , (Just A2.MU, Just A3.MUS, Just N.C480)  -- Mauritius
+    , (Just A2.MV, Just A3.MDV, Just N.C462)  -- Maldives
+    , (Just A2.MW, Just A3.MWI, Just N.C454)  -- Malawi
+    , (Just A2.MX, Just A3.MEX, Just N.C484)  -- Mexico
+    , (Just A2.MY, Just A3.MYS, Just N.C458)  -- Malaysia
+    , (Just A2.MZ, Just A3.MOZ, Just N.C508)  -- Mozambique
+
+    , (Just A2.NA, Just A3.NAM, Just N.C516)  -- Namibia
+    , (Just A2.NC, Just A3.NCL, Just N.C540)  -- New Caledonia
+    , (Just A2.NE, Just A3.NER, Just N.C562)  -- Niger (the)
+    , (Just A2.NF, Just A3.NFK, Just N.C574)  -- Norfolk Island
+    , (Just A2.NG, Just A3.NGA, Just N.C566)  -- Nigeria
+    , (Just A2.NH, Just A3.NHB, Nothing    )  -- New Hebrides
+    , (Just A2.NI, Just A3.NIC, Just N.C558)  -- Nicaragua
+    , (Just A2.NL, Just A3.NLD, Just N.C528)  -- Netherlands (the)
+    , (Just A2.NO, Just A3.NOR, Just N.C578)  -- Norway
+    , (Just A2.NP, Just A3.NPL, Just N.C524)  -- Nepal
+    , (Just A2.NQ, Just A3.ATN, Just N.C216)  -- Dronning Maud Land
+    , (Just A2.NR, Just A3.NRU, Just N.C520)  -- Nauru
+    , (Just A2.NT, Just A3.NTZ, Just N.C536)  -- Saudi Arabian-Iraqi neutral zone (the)
+    , (Just A2.NU, Just A3.NIU, Just N.C570)  -- Niue
+    , (Just A2.NZ, Just A3.NZL, Just N.C554)  -- New Zealand
+
+    , (Just A2.OM, Just A3.OMN, Just N.C512)  -- Oman
+
+    , (Just A2.PA, Just A3.PAN, Just N.C591)  -- Panama
+    , (Just A2.PC, Just A3.PCI, Just N.C582)  -- Pacific Islands (Trust Territory of the)
+    , (Just A2.PE, Just A3.PER, Just N.C604)  -- Peru
+    , (Just A2.PF, Just A3.PYF, Just N.C258)  -- French Polynesia
+    , (Just A2.PG, Just A3.PNG, Just N.C598)  -- Papua New Guinea
+    , (Just A2.PH, Just A3.PHL, Just N.C608)  -- Philippines (the)
+    , (Just A2.PK, Just A3.PAK, Just N.C586)  -- Pakistan
+    , (Just A2.PL, Just A3.POL, Just N.C616)  -- Poland
+    , (Just A2.PM, Just A3.SPM, Just N.C666)  -- Saint Pierre and Miquelon
+    , (Just A2.PN, Just A3.PCN, Just N.C612)  -- Pitcairn
+    , (Just A2.PR, Just A3.PRI, Just N.C630)  -- Puerto Rico
+    , (Just A2.PS, Just A3.PSE, Just N.C275)  -- Palestine, State of
+    , (Just A2.PT, Just A3.PRT, Just N.C620)  -- Portugal
+    , (Just A2.PU, Just A3.PUS, Just N.C849)  -- United States Miscellaneous Pacific Islands (the)
+    , (Just A2.PW, Just A3.PLW, Just N.C585)  -- Palau
+    , (Just A2.PY, Just A3.PRY, Just N.C600)  -- Paraguay
+    , (Just A2.PZ, Just A3.PCZ, Just N.C594)  -- Panama Canal Zone (the)
+
+    , (Just A2.QA, Just A3.QAT, Just N.C634)  -- Qatar
+
+    , (Just A2.RE, Just A3.REU, Just N.C638)  -- Réunion
+    , (Just A2.RO, Just A3.ROU, Just N.C642)  -- Romania
+    , (Just A2.RS, Just A3.SRB, Just N.C688)  -- Serbia
+    , (Just A2.RU, Just A3.RUS, Just N.C643)  -- Russian Federation (the)
+    , (Just A2.RW, Just A3.RWA, Just N.C646)  -- Rwanda
+
+    , (Just A2.SA, Just A3.SAU, Just N.C682)  -- Saudi Arabia
+    , (Just A2.SB, Just A3.SLB, Just N.C090)  -- Solomon Islands
+    , (Just A2.SC, Just A3.SYC, Just N.C690)  -- Seychelles
+    , (Just A2.SD, Just A3.SDN, Just N.C729)  -- Sudan (the)
+    , (Just A2.SE, Just A3.SWE, Just N.C752)  -- Sweden
+    , (Just A2.SG, Just A3.SGP, Just N.C702)  -- Singapore
+    , (Just A2.SH, Just A3.SHN, Just N.C654)  -- Saint Helena, Ascension and Tristan da Cunha
+    , (Just A2.SI, Just A3.SVN, Just N.C705)  -- Slovenia
+    , (Just A2.SJ, Just A3.SJM, Just N.C744)  -- Svalbard and Jan Mayen
+    , (Nothing   , Just A3.SKM, Just N.C698)  -- Sikkim
+    , (Just A2.SK, Just A3.SVK, Just N.C703)  -- Slovakia
+    , (Just A2.SL, Just A3.SLE, Just N.C694)  -- Sierra Leone
+    , (Just A2.SM, Just A3.SMR, Just N.C674)  -- San Marino
+    , (Just A2.SN, Just A3.SEN, Just N.C686)  -- Senegal
+    , (Just A2.SO, Just A3.SOM, Just N.C706)  -- Somalia
+    , (Just A2.SR, Just A3.SUR, Just N.C740)  -- Suriname
+    , (Just A2.SS, Just A3.SSD, Just N.C728)  -- South Sudan
+    , (Just A2.ST, Just A3.STP, Just N.C678)  -- Sao Tome and Principe
+    , (Just A2.SV, Just A3.SLV, Just N.C222)  -- El Salvador
+    , (Just A2.SU, Just A3.SUN, Just N.C810)  -- USSR (the)
+    , (Just A2.SX, Just A3.SXM, Just N.C534)  -- Sint Maarten (Dutch part)
+    , (Just A2.SY, Just A3.SYR, Just N.C760)  -- Syrian Arab Republic
+    , (Just A2.SZ, Just A3.SWZ, Just N.C748)  -- Swaziland
+
+    , (Just A2.TA, Just A3.TAA, Nothing    )  -- Tristan da Cunha
+    , (Just A2.TC, Just A3.TCA, Just N.C796)  -- Turks and Caicos Islands (the)
+    , (Just A2.TD, Just A3.TCD, Just N.C148)  -- Chad
+    , (Just A2.TF, Just A3.ATF, Just N.C260)  -- French Southern Territories (the)
+    , (Just A2.TG, Just A3.TGO, Just N.C768)  -- Togo
+    , (Just A2.TH, Just A3.THA, Just N.C764)  -- Thailand
+    , (Just A2.TJ, Just A3.TJK, Just N.C762)  -- Tajikistan
+    , (Just A2.TK, Just A3.TKL, Just N.C772)  -- Tokelau
+    , (Just A2.TL, Just A3.TLS, Just N.C626)  -- Timor-Leste
+    , (Just A2.TM, Just A3.TKM, Just N.C795)  -- Turkmenistan
+    , (Just A2.TN, Just A3.TUN, Just N.C788)  -- Tunisia
+    , (Just A2.TO, Just A3.TON, Just N.C776)  -- Tonga
+    , (Just A2.TR, Just A3.TUR, Just N.C792)  -- Turkey
+    , (Just A2.TP, Just A3.TMP, Nothing    )  -- East Timor
+    , (Just A2.TT, Just A3.TTO, Just N.C780)  -- Trinidad and Tobago
+    , (Just A2.TV, Just A3.TUV, Just N.C798)  -- Tuvalu
+    , (Just A2.TW, Just A3.TWN, Just N.C158)  -- Taiwan (Province of China)
+    , (Just A2.TZ, Just A3.TZA, Just N.C834)  -- Tanzania, United Republic of
+
+    , (Just A2.UA, Just A3.UKR, Just N.C804)  -- Ukraine
+    , (Just A2.UG, Just A3.UGA, Just N.C800)  -- Uganda
+    , (Just A2.UK, Nothing    , Nothing    )  -- United Kingdom
+    , (Just A2.UM, Just A3.UMI, Just N.C581)  -- United States Minor Outlying Islands (the)
+    , (Just A2.UN, Nothing    , Nothing    )  -- United Nations
+    , (Just A2.US, Just A3.USA, Just N.C840)  -- United States of America (the)
+    , (Just A2.UY, Just A3.URY, Just N.C858)  -- Uruguay
+    , (Just A2.UZ, Just A3.UZB, Just N.C860)  -- Uzbekistan
+
+    , (Just A2.VA, Just A3.VAT, Just N.C336)  -- Holy See (the)
+    , (Just A2.VC, Just A3.VCT, Just N.C670)  -- Saint Vincent and the Grenadines
+    , (Just A2.VD, Just A3.VDR, Just N.C714)  -- Viet Nam (Democratic Republic of)
+    , (Just A2.VE, Just A3.VEN, Just N.C862)  -- Venezuela (Bolivarian Republic of)
+    , (Just A2.VG, Just A3.VGB, Just N.C092)  -- Virgin Islands (British)
+    , (Just A2.VI, Just A3.VIR, Just N.C850)  -- Virgin Islands (U.S.)
+    , (Just A2.VN, Just A3.VNM, Just N.C704)  -- Viet Nam
+    , (Just A2.VU, Just A3.VUT, Just N.C548)  -- Vanuatu
+
+    , (Just A2.WF, Just A3.WLF, Just N.C876)  -- Wallis and Futuna
+    , (Just A2.WK, Just A3.WAK, Just N.C872)  -- Wake Island
+    , (Just A2.WS, Just A3.WSM, Just N.C882)  -- Samoa
+
+    , (Just A2.YD, Just A3.YMD, Just N.C720)  -- Yemen (Democratic)
+    , (Just A2.YE, Just A3.YEM, Just N.C887)  -- Yemen
+    , (Just A2.YT, Just A3.MYT, Just N.C175)  -- Mayotte
+    , (Just A2.YU, Just A3.YUG, Just N.C890)  -- Yugoslavia
+
+    , (Just A2.ZA, Just A3.ZAF, Just N.C710)  -- South Africa
+    , (Just A2.ZM, Just A3.ZMB, Just N.C894)  -- Zambia
+    , (Just A2.ZW, Just A3.ZWE, Just N.C716)  -- Zimbabwe
+    , (Just A2.ZR, Just A3.ZAR, Nothing    )  -- Zaire
+    ]
+
+-- | Cache 'Alpha2' -> 'Alpha3' conversions, and provide faster lookup.
+a2a3 :: M.HashMap A2.Alpha2 A3.Alpha3
+a2a3 = M.fromList . flip Y.mapMaybe tuples
+     $ \(ma2, ma3, _) -> do
+         a2 <- ma2
+         a3 <- ma3
+         return (a2, a3)
+
+-- | Cache 'Alpha2' -> 'Numeric' conversions, and provide faster lookup.
+a2n :: M.HashMap A2.Alpha2 N.Numeric
+a2n = M.fromList . flip Y.mapMaybe tuples
+    $ \(ma2, _, mn) -> do
+        a2 <- ma2
+        n <- mn
+        return (a2, n)
+
+-- | Cache 'Alpha3' -> 'Alpha2' conversions, and provide faster lookup.
+a3a2 :: M.HashMap A3.Alpha3 A2.Alpha2
+a3a2 = M.fromList . flip Y.mapMaybe tuples
+     $ \(ma2, ma3, _) -> do
+         a2 <- ma2
+         a3 <- ma3
+         return (a3, a2)
+
+-- | Cache 'Alpha3' -> 'Numeric' conversions, and provide faster lookup.
+a3n :: M.HashMap A3.Alpha3 N.Numeric
+a3n = M.fromList . flip Y.mapMaybe tuples
+    $ \(_, ma3, mn) -> do
+        a3 <- ma3
+        n <- mn
+        return (a3, n)
+
+-- | Cache 'Numeric' -> 'Alpha2' conversions, and provide faster lookup.
+na2 :: M.HashMap N.Numeric A2.Alpha2
+na2 = M.fromList . flip Y.mapMaybe tuples
+    $ \(ma2, _, mn) -> do
+        a2 <- ma2
+        n <- mn
+        return (n, a2)
+
+-- | Cache 'Numeric' -> 'Alpha3' conversions, and provide faster lookup.
+na3 :: M.HashMap N.Numeric A3.Alpha3
+na3 = M.fromList . flip Y.mapMaybe tuples
+    $ \(_, ma3, mn) -> do
+        a3 <- ma3
+        n <- mn
+        return (n, a3)
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,373 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+  This Source Code Form is "Incompatible With Secondary Licenses", as
+  defined by the Mozilla Public License, v. 2.0.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,37 @@
+A number of the ISO standards are particularly attractive to being implemented
+as static data libraries: they describe short strings that are prone to error
+if left as 'Text', but are large enough to strongly discourage rewriting them
+for each project.  It is no surprise, therefore, that this package is the
+fourth on Hackage to implement ISO 3166-1:
+
+* "Data.ISO3166\_CountryCodes" from
+  [iso3166-country-codes](https://hackage.haskell.org/package/iso3166-country-codes)
+* "Data.CountryCodes" from
+  [country-codes](https://hackage.haskell.org/package/country-codes)
+* "Country" from [country](https://hackage.haskell.org/package/country)
+
+However, none of those options truly seemed to provide an ideal, /complete/
+experience.  Only one (`country`) provides all three code encodings, but it
+doesn't expose constructors for pattern matching.  None of them implement the
+other two parts of ISO 3166 (region codes, and historic countries), and the
+only package that makes an effort to do so ("Data.StateCodes" from
+[state-codes](https://hackage.haskell.org/package/state-codes)) doesn't cover
+anything beyond the US.  Someone who only needs the alpha-2 codes ("CA") may
+indeed find one of the existing packages sufficient, but for anyone who does
+need the full power of ISO 3166-2, none of them would serve.
+
+The lack of people who would actually find this useful is another matter.
+(Eight packages using the simple alpha-2 codes from one or another of the
+above, as of writing.)
+
+This package is an attempt to package that standard -- and, eventually, others
+like it -- in a consistent API based in standard Haskell; `fromEnum` rather
+than `encodeNumeric`, for example.
+
+The following standards are implemented:
+
+* ISO 3166-1 (`Data.Standards.ISO.Country.Primary`)
+
+    * alpha-2 (`Data.Standards.ISO.Country.Primary.Alpha2`)
+    * alpha-3 (`Data.Standards.ISO.Country.Primary.Alpha3`)
+    * numeric (`Data.Standards.ISO.Country.Primary.Numeric`)
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/data-standards.cabal b/data-standards.cabal
new file mode 100644
--- /dev/null
+++ b/data-standards.cabal
@@ -0,0 +1,46 @@
+name:               data-standards
+author:             Samuel May
+category:           Data
+synopsis:           A collection of standards representable by simple data types.
+
+copyright:          (c) 2018 Samuel May
+license:            MPL-2.0
+license-file:       LICENSE
+
+version:            0.1.0.0
+stability:          provisional
+maintainer:         ag.eitilt@gmail.com
+
+homepage:           https://github.com/ag-eitilt/data-standards
+bug-reports:        https://github.com/ag-eitilt/data-standards/issues
+
+description:        Type-safe representations of the country codes described by
+                    the ISO 3166-1 specification.
+
+cabal-version:      >=1.10
+extra-source-files: ChangeLog.md
+                  , README.md
+build-type:         Simple
+tested-with:        GHC ==8.0.2
+
+source-repository head
+  type:             git
+  location:         git://github.com/ag-eitilt/data-standards.git
+
+source-repository this
+  type:             git
+  location:         git://github.com/ag-eitilt/data-standards.git
+  tag:              v0.1.0.0
+
+library
+  exposed-modules:  Data.Standards.ISO.Country.Primary
+                  , Data.Standards.ISO.Country.Primary.Alpha2
+                  , Data.Standards.ISO.Country.Primary.Alpha3
+                  , Data.Standards.ISO.Country.Primary.Numeric
+                  , Data.Standards.ISO.Country.Primary.Translation
+  other-modules:    Data.Standards.ISO.Country.Primary.Common
+  build-depends:    base >=4.9 && <4.10
+                  , hashable >=1.2 && <1.3
+                  , unordered-containers <0.3
+  default-language: Haskell98
+  ghc-options:      -Wall -Wcompat
