diff --git a/Data/ISO3166_CountryCodes.hs b/Data/ISO3166_CountryCodes.hs
new file mode 100644
--- /dev/null
+++ b/Data/ISO3166_CountryCodes.hs
@@ -0,0 +1,811 @@
+{- This is a machine generated module.
+   Do not edit.
+   See cabal file for repository url.
+-}
+{- | Two letter Country Codes
+
+     Defines the type CountryCode with constructors for each
+     of the two-letter codes defined in
+     <http://www.iso.org/iso/iso3166_en_code_lists.txt> and
+     instances for 'Eq', 'Read', 'Show', 'Enum', 'Bounded'
+     and 'Ord'.
+
+     Also defines @'countryNameFromCode'@, which gives the
+     official short country name all in uppercase and
+     @'readableCountryName'@, which produces somewhat more user-friendly output
+
+     Intended to be imported qualified as some country codes
+     are the same as some standard Haskell constructors.
+
+-}
+module Data.ISO3166_CountryCodes
+    (CountryCode(..),
+     countryNameFromCode,
+     readableCountryName
+    ) where
+import qualified Prelude as P
+import Prelude ((.),not,(==),otherwise,(&&),(==),(/=))
+import Control.Monad
+import Data.Char
+import Data.List
+
+{- | A human readable version of the official name of a country
+     from its country code
+
+     Uses some ad-hockery to rearrange the order of the words.
+
+-}
+readableCountryName :: CountryCode -> String
+
+readableCountryName
+    = concat . intersperse " " . rearrange . fmap up1 . words .
+      countryNameFromCode
+      where up1 [] = []
+            up1 (c:rest) | not (isAlpha c) = c:up1 rest
+            up1 "OF" = "of"
+            up1 "THE" = "the"
+            up1 "AND" = "and"
+            up1 "U.S." = "US" -- gawd
+            up1 ('M':'C':l) = "Mc"++up1 l -- Don't do MacEdonia!
+                                          -- but there are no Mac_ countries yet
+            up1 ('D':'\'':l) = "d'"++up1 l
+            up1 (c:cs) = toUpper c: downup cs
+            downup [] = [] -- needed for hyphenated names
+            downup (c:cs) | c=='-' = c:up1 cs
+                          | otherwise = toLower c:downup cs
+            rearrange [] = []
+            rearrange [c] = [c]
+            rearrange ll@(n:l)
+                | last l `elem` ["of", "the"] && last n == ','
+                    = onhead up1 l++[[c|c<-n,c/=',']]
+                | otherwise = ll
+            onhead f [] = []
+            onhead f (h:r) = f h:r
+{- Copyright © 2010 Jón Fairbairn
+-}
+data CountryCode = 
+   AF -- ^ AFGHANISTAN
+   |
+   AX -- ^ ÅLAND ISLANDS
+   |
+   AL -- ^ ALBANIA
+   |
+   DZ -- ^ ALGERIA
+   |
+   AS -- ^ AMERICAN SAMOA
+   |
+   AD -- ^ ANDORRA
+   |
+   AO -- ^ ANGOLA
+   |
+   AI -- ^ ANGUILLA
+   |
+   AQ -- ^ ANTARCTICA
+   |
+   AG -- ^ ANTIGUA AND BARBUDA
+   |
+   AR -- ^ ARGENTINA
+   |
+   AM -- ^ ARMENIA
+   |
+   AW -- ^ ARUBA
+   |
+   AU -- ^ AUSTRALIA
+   |
+   AT -- ^ AUSTRIA
+   |
+   AZ -- ^ AZERBAIJAN
+   |
+   BS -- ^ BAHAMAS
+   |
+   BH -- ^ BAHRAIN
+   |
+   BD -- ^ BANGLADESH
+   |
+   BB -- ^ BARBADOS
+   |
+   BY -- ^ BELARUS
+   |
+   BE -- ^ BELGIUM
+   |
+   BZ -- ^ BELIZE
+   |
+   BJ -- ^ BENIN
+   |
+   BM -- ^ BERMUDA
+   |
+   BT -- ^ BHUTAN
+   |
+   BO -- ^ BOLIVIA, PLURINATIONAL STATE OF
+   |
+   BA -- ^ BOSNIA AND HERZEGOVINA
+   |
+   BW -- ^ BOTSWANA
+   |
+   BV -- ^ BOUVET ISLAND
+   |
+   BR -- ^ BRAZIL
+   |
+   IO -- ^ BRITISH INDIAN OCEAN TERRITORY
+   |
+   BN -- ^ BRUNEI DARUSSALAM
+   |
+   BG -- ^ BULGARIA
+   |
+   BF -- ^ BURKINA FASO
+   |
+   BI -- ^ BURUNDI
+   |
+   KH -- ^ CAMBODIA
+   |
+   CM -- ^ CAMEROON
+   |
+   CA -- ^ CANADA
+   |
+   CV -- ^ CAPE VERDE
+   |
+   KY -- ^ CAYMAN ISLANDS
+   |
+   CF -- ^ CENTRAL AFRICAN REPUBLIC
+   |
+   TD -- ^ CHAD
+   |
+   CL -- ^ CHILE
+   |
+   CN -- ^ CHINA
+   |
+   CX -- ^ CHRISTMAS ISLAND
+   |
+   CC -- ^ COCOS (KEELING) ISLANDS
+   |
+   CO -- ^ COLOMBIA
+   |
+   KM -- ^ COMOROS
+   |
+   CG -- ^ CONGO
+   |
+   CD -- ^ CONGO, THE DEMOCRATIC REPUBLIC OF THE
+   |
+   CK -- ^ COOK ISLANDS
+   |
+   CR -- ^ COSTA RICA
+   |
+   CI -- ^ CÔTE D'IVOIRE
+   |
+   HR -- ^ CROATIA
+   |
+   CU -- ^ CUBA
+   |
+   CY -- ^ CYPRUS
+   |
+   CZ -- ^ CZECH REPUBLIC
+   |
+   DK -- ^ DENMARK
+   |
+   DJ -- ^ DJIBOUTI
+   |
+   DM -- ^ DOMINICA
+   |
+   DO -- ^ DOMINICAN REPUBLIC
+   |
+   EC -- ^ ECUADOR
+   |
+   EG -- ^ EGYPT
+   |
+   SV -- ^ EL SALVADOR
+   |
+   GQ -- ^ EQUATORIAL GUINEA
+   |
+   ER -- ^ ERITREA
+   |
+   EE -- ^ ESTONIA
+   |
+   ET -- ^ ETHIOPIA
+   |
+   FK -- ^ FALKLAND ISLANDS (MALVINAS)
+   |
+   FO -- ^ FAROE ISLANDS
+   |
+   FJ -- ^ FIJI
+   |
+   FI -- ^ FINLAND
+   |
+   FR -- ^ FRANCE
+   |
+   GF -- ^ FRENCH GUIANA
+   |
+   PF -- ^ FRENCH POLYNESIA
+   |
+   TF -- ^ FRENCH SOUTHERN TERRITORIES
+   |
+   GA -- ^ GABON
+   |
+   GM -- ^ GAMBIA
+   |
+   GE -- ^ GEORGIA
+   |
+   DE -- ^ GERMANY
+   |
+   GH -- ^ GHANA
+   |
+   GI -- ^ GIBRALTAR
+   |
+   GR -- ^ GREECE
+   |
+   GL -- ^ GREENLAND
+   |
+   GD -- ^ GRENADA
+   |
+   GP -- ^ GUADELOUPE
+   |
+   GU -- ^ GUAM
+   |
+   GT -- ^ GUATEMALA
+   |
+   GG -- ^ GUERNSEY
+   |
+   GN -- ^ GUINEA
+   |
+   GW -- ^ GUINEA-BISSAU
+   |
+   GY -- ^ GUYANA
+   |
+   HT -- ^ HAITI
+   |
+   HM -- ^ HEARD ISLAND AND MCDONALD ISLANDS
+   |
+   VA -- ^ HOLY SEE (VATICAN CITY STATE)
+   |
+   HN -- ^ HONDURAS
+   |
+   HK -- ^ HONG KONG
+   |
+   HU -- ^ HUNGARY
+   |
+   IS -- ^ ICELAND
+   |
+   IN -- ^ INDIA
+   |
+   ID -- ^ INDONESIA
+   |
+   IR -- ^ IRAN, ISLAMIC REPUBLIC OF
+   |
+   IQ -- ^ IRAQ
+   |
+   IE -- ^ IRELAND
+   |
+   IM -- ^ ISLE OF MAN
+   |
+   IL -- ^ ISRAEL
+   |
+   IT -- ^ ITALY
+   |
+   JM -- ^ JAMAICA
+   |
+   JP -- ^ JAPAN
+   |
+   JE -- ^ JERSEY
+   |
+   JO -- ^ JORDAN
+   |
+   KZ -- ^ KAZAKHSTAN
+   |
+   KE -- ^ KENYA
+   |
+   KI -- ^ KIRIBATI
+   |
+   KP -- ^ KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF
+   |
+   KR -- ^ KOREA, REPUBLIC OF
+   |
+   KW -- ^ KUWAIT
+   |
+   KG -- ^ KYRGYZSTAN
+   |
+   LA -- ^ LAO PEOPLE'S DEMOCRATIC REPUBLIC
+   |
+   LV -- ^ LATVIA
+   |
+   LB -- ^ LEBANON
+   |
+   LS -- ^ LESOTHO
+   |
+   LR -- ^ LIBERIA
+   |
+   LY -- ^ LIBYAN ARAB JAMAHIRIYA
+   |
+   LI -- ^ LIECHTENSTEIN
+   |
+   LT -- ^ LITHUANIA
+   |
+   LU -- ^ LUXEMBOURG
+   |
+   MO -- ^ MACAO
+   |
+   MK -- ^ MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF
+   |
+   MG -- ^ MADAGASCAR
+   |
+   MW -- ^ MALAWI
+   |
+   MY -- ^ MALAYSIA
+   |
+   MV -- ^ MALDIVES
+   |
+   ML -- ^ MALI
+   |
+   MT -- ^ MALTA
+   |
+   MH -- ^ MARSHALL ISLANDS
+   |
+   MQ -- ^ MARTINIQUE
+   |
+   MR -- ^ MAURITANIA
+   |
+   MU -- ^ MAURITIUS
+   |
+   YT -- ^ MAYOTTE
+   |
+   MX -- ^ MEXICO
+   |
+   FM -- ^ MICRONESIA, FEDERATED STATES OF
+   |
+   MD -- ^ MOLDOVA, REPUBLIC OF
+   |
+   MC -- ^ MONACO
+   |
+   MN -- ^ MONGOLIA
+   |
+   ME -- ^ MONTENEGRO
+   |
+   MS -- ^ MONTSERRAT
+   |
+   MA -- ^ MOROCCO
+   |
+   MZ -- ^ MOZAMBIQUE
+   |
+   MM -- ^ MYANMAR
+   |
+   NA -- ^ NAMIBIA
+   |
+   NR -- ^ NAURU
+   |
+   NP -- ^ NEPAL
+   |
+   NL -- ^ NETHERLANDS
+   |
+   AN -- ^ NETHERLANDS ANTILLES
+   |
+   NC -- ^ NEW CALEDONIA
+   |
+   NZ -- ^ NEW ZEALAND
+   |
+   NI -- ^ NICARAGUA
+   |
+   NE -- ^ NIGER
+   |
+   NG -- ^ NIGERIA
+   |
+   NU -- ^ NIUE
+   |
+   NF -- ^ NORFOLK ISLAND
+   |
+   MP -- ^ NORTHERN MARIANA ISLANDS
+   |
+   NO -- ^ NORWAY
+   |
+   OM -- ^ OMAN
+   |
+   PK -- ^ PAKISTAN
+   |
+   PW -- ^ PALAU
+   |
+   PS -- ^ PALESTINIAN TERRITORY, OCCUPIED
+   |
+   PA -- ^ PANAMA
+   |
+   PG -- ^ PAPUA NEW GUINEA
+   |
+   PY -- ^ PARAGUAY
+   |
+   PE -- ^ PERU
+   |
+   PH -- ^ PHILIPPINES
+   |
+   PN -- ^ PITCAIRN
+   |
+   PL -- ^ POLAND
+   |
+   PT -- ^ PORTUGAL
+   |
+   PR -- ^ PUERTO RICO
+   |
+   QA -- ^ QATAR
+   |
+   RE -- ^ REUNION
+   |
+   RO -- ^ ROMANIA
+   |
+   RU -- ^ RUSSIAN FEDERATION
+   |
+   RW -- ^ RWANDA
+   |
+   BL -- ^ SAINT BARTHÉLEMY
+   |
+   SH -- ^ SAINT HELENA
+   |
+   KN -- ^ SAINT KITTS AND NEVIS
+   |
+   LC -- ^ SAINT LUCIA
+   |
+   MF -- ^ SAINT MARTIN
+   |
+   PM -- ^ SAINT PIERRE AND MIQUELON
+   |
+   VC -- ^ SAINT VINCENT AND THE GRENADINES
+   |
+   WS -- ^ SAMOA
+   |
+   SM -- ^ SAN MARINO
+   |
+   ST -- ^ SAO TOME AND PRINCIPE
+   |
+   SA -- ^ SAUDI ARABIA
+   |
+   SN -- ^ SENEGAL
+   |
+   RS -- ^ SERBIA
+   |
+   SC -- ^ SEYCHELLES
+   |
+   SL -- ^ SIERRA LEONE
+   |
+   SG -- ^ SINGAPORE
+   |
+   SK -- ^ SLOVAKIA
+   |
+   SI -- ^ SLOVENIA
+   |
+   SB -- ^ SOLOMON ISLANDS
+   |
+   SO -- ^ SOMALIA
+   |
+   ZA -- ^ SOUTH AFRICA
+   |
+   GS -- ^ SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS
+   |
+   ES -- ^ SPAIN
+   |
+   LK -- ^ SRI LANKA
+   |
+   SD -- ^ SUDAN
+   |
+   SR -- ^ SURINAME
+   |
+   SJ -- ^ SVALBARD AND JAN MAYEN
+   |
+   SZ -- ^ SWAZILAND
+   |
+   SE -- ^ SWEDEN
+   |
+   CH -- ^ SWITZERLAND
+   |
+   SY -- ^ SYRIAN ARAB REPUBLIC
+   |
+   TW -- ^ TAIWAN, PROVINCE OF CHINA
+   |
+   TJ -- ^ TAJIKISTAN
+   |
+   TZ -- ^ TANZANIA, UNITED REPUBLIC OF
+   |
+   TH -- ^ THAILAND
+   |
+   TL -- ^ TIMOR-LESTE
+   |
+   TG -- ^ TOGO
+   |
+   TK -- ^ TOKELAU
+   |
+   TO -- ^ TONGA
+   |
+   TT -- ^ TRINIDAD AND TOBAGO
+   |
+   TN -- ^ TUNISIA
+   |
+   TR -- ^ TURKEY
+   |
+   TM -- ^ TURKMENISTAN
+   |
+   TC -- ^ TURKS AND CAICOS ISLANDS
+   |
+   TV -- ^ TUVALU
+   |
+   UG -- ^ UGANDA
+   |
+   UA -- ^ UKRAINE
+   |
+   AE -- ^ UNITED ARAB EMIRATES
+   |
+   GB -- ^ UNITED KINGDOM
+   |
+   US -- ^ UNITED STATES
+   |
+   UM -- ^ UNITED STATES MINOR OUTLYING ISLANDS
+   |
+   UY -- ^ URUGUAY
+   |
+   UZ -- ^ UZBEKISTAN
+   |
+   VU -- ^ VANUATU
+   |
+   VE -- ^ VENEZUELA
+   |
+   VN -- ^ VIET NAM
+   |
+   VG -- ^ VIRGIN ISLANDS, BRITISH
+   |
+   VI -- ^ VIRGIN ISLANDS, U.S.
+   |
+   WF -- ^ WALLIS AND FUTUNA
+   |
+   EH -- ^ WESTERN SAHARA
+   |
+   YE -- ^ YEMEN
+   |
+   ZM -- ^ ZAMBIA
+   |
+   ZW -- ^ ZIMBABWE
+   deriving (P.Eq,P.Read,P.Show,P.Enum,P.Bounded,P.Ord)
+
+{-|
+  convert a country code to the official (English) name of the country
+
+   see @'readableCountryName'@ for something with a more pleasing word order and capitalisation
+-}
+countryNameFromCode:: CountryCode -> String
+countryNameFromCode AF = "AFGHANISTAN"
+countryNameFromCode AX = "ÅLAND ISLANDS"
+countryNameFromCode AL = "ALBANIA"
+countryNameFromCode DZ = "ALGERIA"
+countryNameFromCode AS = "AMERICAN SAMOA"
+countryNameFromCode AD = "ANDORRA"
+countryNameFromCode AO = "ANGOLA"
+countryNameFromCode AI = "ANGUILLA"
+countryNameFromCode AQ = "ANTARCTICA"
+countryNameFromCode AG = "ANTIGUA AND BARBUDA"
+countryNameFromCode AR = "ARGENTINA"
+countryNameFromCode AM = "ARMENIA"
+countryNameFromCode AW = "ARUBA"
+countryNameFromCode AU = "AUSTRALIA"
+countryNameFromCode AT = "AUSTRIA"
+countryNameFromCode AZ = "AZERBAIJAN"
+countryNameFromCode BS = "BAHAMAS"
+countryNameFromCode BH = "BAHRAIN"
+countryNameFromCode BD = "BANGLADESH"
+countryNameFromCode BB = "BARBADOS"
+countryNameFromCode BY = "BELARUS"
+countryNameFromCode BE = "BELGIUM"
+countryNameFromCode BZ = "BELIZE"
+countryNameFromCode BJ = "BENIN"
+countryNameFromCode BM = "BERMUDA"
+countryNameFromCode BT = "BHUTAN"
+countryNameFromCode BO = "BOLIVIA, PLURINATIONAL STATE OF"
+countryNameFromCode BA = "BOSNIA AND HERZEGOVINA"
+countryNameFromCode BW = "BOTSWANA"
+countryNameFromCode BV = "BOUVET ISLAND"
+countryNameFromCode BR = "BRAZIL"
+countryNameFromCode IO = "BRITISH INDIAN OCEAN TERRITORY"
+countryNameFromCode BN = "BRUNEI DARUSSALAM"
+countryNameFromCode BG = "BULGARIA"
+countryNameFromCode BF = "BURKINA FASO"
+countryNameFromCode BI = "BURUNDI"
+countryNameFromCode KH = "CAMBODIA"
+countryNameFromCode CM = "CAMEROON"
+countryNameFromCode CA = "CANADA"
+countryNameFromCode CV = "CAPE VERDE"
+countryNameFromCode KY = "CAYMAN ISLANDS"
+countryNameFromCode CF = "CENTRAL AFRICAN REPUBLIC"
+countryNameFromCode TD = "CHAD"
+countryNameFromCode CL = "CHILE"
+countryNameFromCode CN = "CHINA"
+countryNameFromCode CX = "CHRISTMAS ISLAND"
+countryNameFromCode CC = "COCOS (KEELING) ISLANDS"
+countryNameFromCode CO = "COLOMBIA"
+countryNameFromCode KM = "COMOROS"
+countryNameFromCode CG = "CONGO"
+countryNameFromCode CD = "CONGO, THE DEMOCRATIC REPUBLIC OF THE"
+countryNameFromCode CK = "COOK ISLANDS"
+countryNameFromCode CR = "COSTA RICA"
+countryNameFromCode CI = "CÔTE D'IVOIRE"
+countryNameFromCode HR = "CROATIA"
+countryNameFromCode CU = "CUBA"
+countryNameFromCode CY = "CYPRUS"
+countryNameFromCode CZ = "CZECH REPUBLIC"
+countryNameFromCode DK = "DENMARK"
+countryNameFromCode DJ = "DJIBOUTI"
+countryNameFromCode DM = "DOMINICA"
+countryNameFromCode DO = "DOMINICAN REPUBLIC"
+countryNameFromCode EC = "ECUADOR"
+countryNameFromCode EG = "EGYPT"
+countryNameFromCode SV = "EL SALVADOR"
+countryNameFromCode GQ = "EQUATORIAL GUINEA"
+countryNameFromCode ER = "ERITREA"
+countryNameFromCode EE = "ESTONIA"
+countryNameFromCode ET = "ETHIOPIA"
+countryNameFromCode FK = "FALKLAND ISLANDS (MALVINAS)"
+countryNameFromCode FO = "FAROE ISLANDS"
+countryNameFromCode FJ = "FIJI"
+countryNameFromCode FI = "FINLAND"
+countryNameFromCode FR = "FRANCE"
+countryNameFromCode GF = "FRENCH GUIANA"
+countryNameFromCode PF = "FRENCH POLYNESIA"
+countryNameFromCode TF = "FRENCH SOUTHERN TERRITORIES"
+countryNameFromCode GA = "GABON"
+countryNameFromCode GM = "GAMBIA"
+countryNameFromCode GE = "GEORGIA"
+countryNameFromCode DE = "GERMANY"
+countryNameFromCode GH = "GHANA"
+countryNameFromCode GI = "GIBRALTAR"
+countryNameFromCode GR = "GREECE"
+countryNameFromCode GL = "GREENLAND"
+countryNameFromCode GD = "GRENADA"
+countryNameFromCode GP = "GUADELOUPE"
+countryNameFromCode GU = "GUAM"
+countryNameFromCode GT = "GUATEMALA"
+countryNameFromCode GG = "GUERNSEY"
+countryNameFromCode GN = "GUINEA"
+countryNameFromCode GW = "GUINEA-BISSAU"
+countryNameFromCode GY = "GUYANA"
+countryNameFromCode HT = "HAITI"
+countryNameFromCode HM = "HEARD ISLAND AND MCDONALD ISLANDS"
+countryNameFromCode VA = "HOLY SEE (VATICAN CITY STATE)"
+countryNameFromCode HN = "HONDURAS"
+countryNameFromCode HK = "HONG KONG"
+countryNameFromCode HU = "HUNGARY"
+countryNameFromCode IS = "ICELAND"
+countryNameFromCode IN = "INDIA"
+countryNameFromCode ID = "INDONESIA"
+countryNameFromCode IR = "IRAN, ISLAMIC REPUBLIC OF"
+countryNameFromCode IQ = "IRAQ"
+countryNameFromCode IE = "IRELAND"
+countryNameFromCode IM = "ISLE OF MAN"
+countryNameFromCode IL = "ISRAEL"
+countryNameFromCode IT = "ITALY"
+countryNameFromCode JM = "JAMAICA"
+countryNameFromCode JP = "JAPAN"
+countryNameFromCode JE = "JERSEY"
+countryNameFromCode JO = "JORDAN"
+countryNameFromCode KZ = "KAZAKHSTAN"
+countryNameFromCode KE = "KENYA"
+countryNameFromCode KI = "KIRIBATI"
+countryNameFromCode KP = "KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF"
+countryNameFromCode KR = "KOREA, REPUBLIC OF"
+countryNameFromCode KW = "KUWAIT"
+countryNameFromCode KG = "KYRGYZSTAN"
+countryNameFromCode LA = "LAO PEOPLE'S DEMOCRATIC REPUBLIC"
+countryNameFromCode LV = "LATVIA"
+countryNameFromCode LB = "LEBANON"
+countryNameFromCode LS = "LESOTHO"
+countryNameFromCode LR = "LIBERIA"
+countryNameFromCode LY = "LIBYAN ARAB JAMAHIRIYA"
+countryNameFromCode LI = "LIECHTENSTEIN"
+countryNameFromCode LT = "LITHUANIA"
+countryNameFromCode LU = "LUXEMBOURG"
+countryNameFromCode MO = "MACAO"
+countryNameFromCode MK = "MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF"
+countryNameFromCode MG = "MADAGASCAR"
+countryNameFromCode MW = "MALAWI"
+countryNameFromCode MY = "MALAYSIA"
+countryNameFromCode MV = "MALDIVES"
+countryNameFromCode ML = "MALI"
+countryNameFromCode MT = "MALTA"
+countryNameFromCode MH = "MARSHALL ISLANDS"
+countryNameFromCode MQ = "MARTINIQUE"
+countryNameFromCode MR = "MAURITANIA"
+countryNameFromCode MU = "MAURITIUS"
+countryNameFromCode YT = "MAYOTTE"
+countryNameFromCode MX = "MEXICO"
+countryNameFromCode FM = "MICRONESIA, FEDERATED STATES OF"
+countryNameFromCode MD = "MOLDOVA, REPUBLIC OF"
+countryNameFromCode MC = "MONACO"
+countryNameFromCode MN = "MONGOLIA"
+countryNameFromCode ME = "MONTENEGRO"
+countryNameFromCode MS = "MONTSERRAT"
+countryNameFromCode MA = "MOROCCO"
+countryNameFromCode MZ = "MOZAMBIQUE"
+countryNameFromCode MM = "MYANMAR"
+countryNameFromCode NA = "NAMIBIA"
+countryNameFromCode NR = "NAURU"
+countryNameFromCode NP = "NEPAL"
+countryNameFromCode NL = "NETHERLANDS"
+countryNameFromCode AN = "NETHERLANDS ANTILLES"
+countryNameFromCode NC = "NEW CALEDONIA"
+countryNameFromCode NZ = "NEW ZEALAND"
+countryNameFromCode NI = "NICARAGUA"
+countryNameFromCode NE = "NIGER"
+countryNameFromCode NG = "NIGERIA"
+countryNameFromCode NU = "NIUE"
+countryNameFromCode NF = "NORFOLK ISLAND"
+countryNameFromCode MP = "NORTHERN MARIANA ISLANDS"
+countryNameFromCode NO = "NORWAY"
+countryNameFromCode OM = "OMAN"
+countryNameFromCode PK = "PAKISTAN"
+countryNameFromCode PW = "PALAU"
+countryNameFromCode PS = "PALESTINIAN TERRITORY, OCCUPIED"
+countryNameFromCode PA = "PANAMA"
+countryNameFromCode PG = "PAPUA NEW GUINEA"
+countryNameFromCode PY = "PARAGUAY"
+countryNameFromCode PE = "PERU"
+countryNameFromCode PH = "PHILIPPINES"
+countryNameFromCode PN = "PITCAIRN"
+countryNameFromCode PL = "POLAND"
+countryNameFromCode PT = "PORTUGAL"
+countryNameFromCode PR = "PUERTO RICO"
+countryNameFromCode QA = "QATAR"
+countryNameFromCode RE = "REUNION"
+countryNameFromCode RO = "ROMANIA"
+countryNameFromCode RU = "RUSSIAN FEDERATION"
+countryNameFromCode RW = "RWANDA"
+countryNameFromCode BL = "SAINT BARTHÉLEMY"
+countryNameFromCode SH = "SAINT HELENA"
+countryNameFromCode KN = "SAINT KITTS AND NEVIS"
+countryNameFromCode LC = "SAINT LUCIA"
+countryNameFromCode MF = "SAINT MARTIN"
+countryNameFromCode PM = "SAINT PIERRE AND MIQUELON"
+countryNameFromCode VC = "SAINT VINCENT AND THE GRENADINES"
+countryNameFromCode WS = "SAMOA"
+countryNameFromCode SM = "SAN MARINO"
+countryNameFromCode ST = "SAO TOME AND PRINCIPE"
+countryNameFromCode SA = "SAUDI ARABIA"
+countryNameFromCode SN = "SENEGAL"
+countryNameFromCode RS = "SERBIA"
+countryNameFromCode SC = "SEYCHELLES"
+countryNameFromCode SL = "SIERRA LEONE"
+countryNameFromCode SG = "SINGAPORE"
+countryNameFromCode SK = "SLOVAKIA"
+countryNameFromCode SI = "SLOVENIA"
+countryNameFromCode SB = "SOLOMON ISLANDS"
+countryNameFromCode SO = "SOMALIA"
+countryNameFromCode ZA = "SOUTH AFRICA"
+countryNameFromCode GS = "SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS"
+countryNameFromCode ES = "SPAIN"
+countryNameFromCode LK = "SRI LANKA"
+countryNameFromCode SD = "SUDAN"
+countryNameFromCode SR = "SURINAME"
+countryNameFromCode SJ = "SVALBARD AND JAN MAYEN"
+countryNameFromCode SZ = "SWAZILAND"
+countryNameFromCode SE = "SWEDEN"
+countryNameFromCode CH = "SWITZERLAND"
+countryNameFromCode SY = "SYRIAN ARAB REPUBLIC"
+countryNameFromCode TW = "TAIWAN, PROVINCE OF CHINA"
+countryNameFromCode TJ = "TAJIKISTAN"
+countryNameFromCode TZ = "TANZANIA, UNITED REPUBLIC OF"
+countryNameFromCode TH = "THAILAND"
+countryNameFromCode TL = "TIMOR-LESTE"
+countryNameFromCode TG = "TOGO"
+countryNameFromCode TK = "TOKELAU"
+countryNameFromCode TO = "TONGA"
+countryNameFromCode TT = "TRINIDAD AND TOBAGO"
+countryNameFromCode TN = "TUNISIA"
+countryNameFromCode TR = "TURKEY"
+countryNameFromCode TM = "TURKMENISTAN"
+countryNameFromCode TC = "TURKS AND CAICOS ISLANDS"
+countryNameFromCode TV = "TUVALU"
+countryNameFromCode UG = "UGANDA"
+countryNameFromCode UA = "UKRAINE"
+countryNameFromCode AE = "UNITED ARAB EMIRATES"
+countryNameFromCode GB = "UNITED KINGDOM"
+countryNameFromCode US = "UNITED STATES"
+countryNameFromCode UM = "UNITED STATES MINOR OUTLYING ISLANDS"
+countryNameFromCode UY = "URUGUAY"
+countryNameFromCode UZ = "UZBEKISTAN"
+countryNameFromCode VU = "VANUATU"
+countryNameFromCode VE = "VENEZUELA"
+countryNameFromCode VN = "VIET NAM"
+countryNameFromCode VG = "VIRGIN ISLANDS, BRITISH"
+countryNameFromCode VI = "VIRGIN ISLANDS, U.S."
+countryNameFromCode WF = "WALLIS AND FUTUNA"
+countryNameFromCode EH = "WESTERN SAHARA"
+countryNameFromCode YE = "YEMEN"
+countryNameFromCode ZM = "ZAMBIA"
+countryNameFromCode ZW = "ZIMBABWE"
diff --git a/Data/ISO3166_CountryCodes.hsc b/Data/ISO3166_CountryCodes.hsc
deleted file mode 100644
--- a/Data/ISO3166_CountryCodes.hsc
+++ /dev/null
diff --git a/Data/ISO3166_CountryCodes.preamble.hs b/Data/ISO3166_CountryCodes.preamble.hs
deleted file mode 100644
--- a/Data/ISO3166_CountryCodes.preamble.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{- | Two letter Country Codes
-
-     Defines the type CountryCode with constructors for each
-     of the two-letter codes defined in
-     <http://www.iso.org/iso/iso3166_en_code_lists.txt> and
-     instances for 'Eq', 'Read', 'Show', 'Enum', 'Bounded'
-     and 'Ord'.
-
-     Also defines @'countryNameFromCode'@, which gives the
-     official short country name all in uppercase and
-     @'readableCountryName'@, which produces somewhat more user-friendly output
-
-     Intended to be imported qualified as some country codes
-     are the same as some standard Haskell constructors.
-
--}
-module Data.ISO3166_CountryCodes
-    (CountryCode(..),
-     countryNameFromCode,
-     readableCountryName
-    ) where
-import qualified Prelude as P
-import Prelude ((.),not,(==),otherwise,(&&),(==),(/=))
-import Control.Monad
-import Data.Char
-import Data.List
-
-{- | A human readable version of the official name of a country
-     from its country code
-
-     Uses some ad-hockery to rearrange the order of the words.
-
--}
-readableCountryName :: CountryCode -> String
-
-readableCountryName
-    = concat . intersperse " " . rearrange . fmap up1 . words .
-      countryNameFromCode
-      where up1 [] = []
-            up1 (c:rest) | not (isAlpha c) = c:up1 rest
-            up1 "OF" = "of"
-            up1 "THE" = "the"
-            up1 "AND" = "and"
-            up1 "U.S." = "US" -- gawd
-            up1 ('M':'C':l) = "Mc"++up1 l -- Don't do MacEdonia!
-                                          -- but there are no Mac_ countries yet
-            up1 ('D':'\'':l) = "d'"++up1 l
-            up1 (c:cs) = toUpper c: downup cs
-            downup [] = [] -- needed for hyphenated names
-            downup (c:cs) | c=='-' = c:up1 cs
-                          | otherwise = toLower c:downup cs
-            rearrange [] = []
-            rearrange [c] = [c]
-            rearrange ll@(n:l)
-                | last l `elem` ["of", "the"] && last n == ','
-                    = onhead up1 l++[[c|c<-n,c/=',']]
-                | otherwise = ll
-            onhead f [] = []
-            onhead f (h:r) = f h:r
-{- Copyright © 2010 Jón Fairbairn
--}
diff --git a/Data/ISO3166_CountryCodes/GenerateDataDeclaration.hs b/Data/ISO3166_CountryCodes/GenerateDataDeclaration.hs
deleted file mode 100644
--- a/Data/ISO3166_CountryCodes/GenerateDataDeclaration.hs
+++ /dev/null
@@ -1,67 +0,0 @@
-{- | generate language code data type from the official list
-     downloaded from <http://www.iso.org/iso/iso3166_en_code_lists.txt>
-
-     use the text version because it's easy to parse and the
-     xml version doesn't add anything, so I can avoid
-     depending on an xml library for the moment
-
-     The code_lists file contains non-ASCII characters,
-     output (in the country names) and Haskell source is Unicode
-     the output here requires encoding to UTF-8, something that
-     Haskell IO ought to do itself.
-
--}
-module Main where
-import Getter
-import Data.Char
-import Codec.Binary.UTF8.String
-import Data.List
-
-main
-  = do output_preamble
-       generate_country_codes
-
-output_preamble
-  = readFile preamble >>= putStr
-
-generate_country_codes
-    = do text <- fmap lines $
-                 get_country_code_list
-         let codes = [(cc,name) |
-                      l <- text,
-                      let cc = filter (isAlpha) $
-                               dropWhile (==';') $
-                               dropWhile (/=';') $
-                               l
-                          name = takeWhile (/=';') l,
-                      length cc == 2
-                     ]
-         gen_data_decl codes
-         gen_alist_decl codes
-
-gen_data_decl codes
-    = do putStrLn "data CountryCode = "
-         sequence_ $ fmap putStrLn $ intersperse "   |" $ fmap country_alternative codes
-         putStrLn "   deriving (P.Eq,P.Read,P.Show,P.Enum,P.Bounded,P.Ord)"
-
-country_alternative (code, name)
-  = "   "++code++" -- ^ " ++ encodeString name
-
-gen_alist_decl codes
-    = do mapM_ putStrLn $
-           ["",
-             "{-|",
-             "  convert a country code to the official (English) name of the country",
-             "",
-             "   see @'readableCountryName'@ for something with a more pleasing word order and capitalisation",
-             "-}",
-             "countryNameFromCode:: CountryCode -> String"
-           ]
-         sequence_ $ fmap make_clause codes
-
-make_clause (constr, countryName)
-    = putStrLn $ "countryNameFromCode " ++ constr ++ " = \"" ++ encodeString countryName ++ "\""
-
-preamble = "Data/ISO3166_CountryCodes.preamble.hs"
-{- Copyright © 2010 Jón Fairbairn
--}
diff --git a/Data/ISO3166_CountryCodes/Getter.hs b/Data/ISO3166_CountryCodes/Getter.hs
deleted file mode 100644
--- a/Data/ISO3166_CountryCodes/Getter.hs
+++ /dev/null
@@ -1,62 +0,0 @@
-module Getter(get_country_code_list) where
-
-{- This operates essentially as a single file http cache
--}
-
-import Network.HTTP
-import System.Directory
-import System.Time
-import IO
-
-country_code_URL = "http://www.iso.org/iso/iso3166_en_code_lists.txt"
-local_copy = "Data/ISO3166_CountryCodes/iso3166_en_code_lists.txt"
-
-last_modified_file = local_copy ++ ".last-modified"
-
-{-
-most errors are handled by failing...
-
--}
-
-get_country_code_list
-  = do local_copy_date <- getSomeModificationTime
-       let r = getRequest country_code_URL
-       Right response <- simpleHTTP r{rqHeaders=Header HdrIfModifiedSince local_copy_date:getHeaders r}
-
-       case rspCode response of
-         (3,0,4) -> do -- not modified since fetched
-                       readFile local_copy
-         (2,0,0) -> do let content = rspBody response -- doesn't seem lazy enough
-                       writeFile local_copy content
-                       case [date| Header HdrLastModified date <- rspHeaders response] of
-                         [d] -> do writeFile last_modified_file d
-                                   return content
-         _ -> error $ "unhandled HTTP response: " ++ show response
-
-{-
-
-Using the file modification time might be better in some
-ways, but we don't know whether the server holding the
-source file implements if-modified-since correctly, so
-storing the modification time returned by the server in its
-own file is about as good as we can manage.
-
-Besides, at time of writing Haskell's time manipulation is
-in a mess.
-
--}
-
-getSomeModificationTime
-  = do already_here <- doesFileExist local_copy
-       last_modified_recorded <- doesFileExist last_modified_file
-       if already_here && last_modified_recorded -- we have a copy, but is it up to date?
-         then readFile last_modified_file
-         else return epoch -- this should be long enough ago to ensure a fetch
-
-{- I originally used
-epoch = "Thu, 1 Jan 1970 00:00:00 GMT"
-but for some reason the server returns "not modified" if you do that
-
--}
-epoch = "Sat, 27 May 2000 08:12:00 GMT"
-
diff --git a/Makefile b/Makefile
deleted file mode 100644
--- a/Makefile
+++ /dev/null
@@ -1,32 +0,0 @@
-all: Data/ISO3166_CountryCodes.o docs
-
-Data/ISO3166_CountryCodes.hs:  Data/ISO3166_CountryCodes/GenerateDataDeclaration Data/ISO3166_CountryCodes.preamble.hs
-	Data/ISO3166_CountryCodes/GenerateDataDeclaration > $@
-
-Data/ISO3166_CountryCodes/GenerateDataDeclaration: Data/ISO3166_CountryCodes/GenerateDataDeclaration.hs
-	ghc --make -iData/ISO3166_CountryCodes $@
-
-%.o: %.hs
-	ghc --make $<
-
-.PHONY: docs
-
-docs: Data/Documentation/haddock/ISO3166_CountryCodes.haddock
-
-Data/Documentation/haddock/ISO3166_CountryCodes.haddock: Data/Documentation/haddock Data/ISO3166_CountryCodes.hs
-	haddock -o Data/Documentation/haddock -h\
-                --read-interface=http://www.haskell.org/ghc/docs/latest/html/libraries/base,/usr/share/doc/ghc/libraries/base/base.haddock \
-                --read-interface=http://www.haskell.org/ghc/docs/latest/html/libraries/haskell98,/usr/share/doc/ghc/libraries/haskell98/haskell98.haddock \
-                --read-interface=http://www.haskell.org/ghc/docs/latest/html/libraries/template-haskell/,/usr/share/doc/ghc/libraries/template-haskell/template-haskell.haddock \
-                --read-interface=http://www.haskell.org/ghc/docs/latest/html/libraries/time/,/usr/share/doc/ghc/libraries/time/time.haddock \
-                --read-interface=http://hackage.haskell.org/packages/archive/bytestring/0.9.1.4/doc/html/,/usr/share/doc/ghc/libraries/bytestring/bytestring.haddock \
-                --read-interface=http://hackage.haskell.org/packages/archive/containers/0.2.0.1/doc/html/,/usr/share/doc/ghc/libraries/containers/containers.haddock \
-	--dump-interface Data/Documentation/haddock/ISO3166_CountryCodes.haddock \
-	Data/ISO3166_CountryCodes.hs
-
-Data/Documentation/haddock:
-	mkdir -p Data/Documentation/haddock
-
-.PHONY: clean
-clean:
-	rm -rf Data/*.hi Data/*.o Data/ISO3166_CountryCodes.hs Data/ISO3166_CountryCodes/*.hi Data/ISO3166_CountryCodes/*.o Data/ISO3166_CountryCodes/GenerateDataDeclaration Data/ISO3166_CountryCodes/iso3166_en_code_lists.txt Data/ISO3166_CountryCodes/iso3166_en_code_lists.txt.last-modified Data/Documentation/haddock
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,2 @@
-import Distribution.Make
+import Distribution.Simple
 main = defaultMain
diff --git a/iso3166-country-codes.cabal b/iso3166-country-codes.cabal
--- a/iso3166-country-codes.cabal
+++ b/iso3166-country-codes.cabal
@@ -1,7 +1,7 @@
+Version: 0.20090527.1
 Name:		iso3166-country-codes
-Version:	0.1
 Cabal-Version:  >= 1.6
-Build-type:	Make
+Build-type:	Simple
 License:	LGPL
 License-File:	COPYING.LESSER
 Author:		Jón Fairbairn
@@ -14,11 +14,12 @@
 	     ISO 3166 country codes, and mappings from that type to the
 	     official name of the country.
 
-Extra-source-files: Data/ISO3166_CountryCodes/GenerateDataDeclaration.hs, Data/ISO3166_CountryCodes/Getter.hs, Data/ISO3166_CountryCodes.preamble.hs, Makefile
-
-extra-tmp-files: Data/ISO3166_CountryCodes.hs, Data/ISO3166_CountryCodes/GenerateDataDeclaration
-
 Library
-  Build-Depends:	base ==4.*, HTTP == 4000.*, utf8-string ==0.*
+  Build-Depends:	base ==4.*
   Exposed-modules: Data.ISO3166_CountryCodes
 
+-- a full build depends on HTTP == 4000.*, utf8-string ==0.*
+
+source-repository head
+  type:     darcs
+  location: http://www.cl.cam.ac.uk/~jf15/ISO3166_CountryCodes/
