diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,22 @@
+# Changelog
+
+## v1.0.0 (2017-08-29)
+  
+- Provide 2 types `Currency` and `Alpha`
+- Provide constructors for each currency and Alpha code listed in the standard
+- Provide a list of all `Currency`
+- Provide instances for:
+  - Show
+  - Eq
+  - Read
+  - Generic
+  - Data
+  - Typeable
+  - FromJSON (aeson)
+  - ToJSON   (aeson)
+  - ToSchema (swagger2)
+  - Val      (bson)
+  - Random   (random)
+  - Ord (Alpha only)
+  - Enum (Alpha only
+  - Bounded (Alpha only)
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Chordify
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,47 @@
+# Currency Codes (ISO-4217) [![](https://img.shields.io/hackage/v/currency-codes.svg)](https://hackage.haskell.org/package/currency-codes)
+
+## Overview 
+
+This package mainly provides 2 data types to represent and manipulate currencies according to
+the [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) standard. 
+
+It also provides a handful of instances for common typeclasses (`Show`, `Read`, `Random`, `ToJSON`,
+`FromJSON`, `Val`, `ToSchema`). 
+
+## Example
+
+```haskell
+import           Data.Aeson     (ToJSON(..))
+import qualified Data.Aeson     as Aeson
+import           Data.Currency  (Currency, Alpha)
+import qualified Data.Currency  as Currency
+import           GHC.Generics   (Generic)
+import qualified Safe
+
+
+myCurrencies :: [Currency]
+myCurrencies =
+  [Currency.eur, Currency.usdDollar]
+
+fromAlpha :: Alpha -> [Currency] -> Maybe Currency
+fromAlpha α =
+  Safe.headMay . filter (== α)
+
+
+data Transaction = Transaction
+  { amount   :: Integer
+  , currency :: Currency
+  } deriving (Eq, Show, Generic)
+
+instance ToJSON Transaction where
+  toJSON = 
+    Aeson.genericToJSON Aeson.defaultOptions
+```
+
+## Changelog
+
+[CHANGELOG.md](CHANGELOG.md)
+
+## License
+
+[MIT © 2017 Chordify](LICENSE)
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/currency-codes.cabal b/currency-codes.cabal
new file mode 100644
--- /dev/null
+++ b/currency-codes.cabal
@@ -0,0 +1,46 @@
+name:                currency-codes
+version:             1.0.0.0
+synopsis:            ISO-4217 Currency Codes
+description:         ISO-4217 Currency Codes
+license:             MIT
+license-file:        LICENSE
+author:              Chordify
+maintainer:          Matthias Benkort <matthias@chordify.net>
+copyright:           (c) 2017 Chordify
+category:            Data
+build-type:          Simple
+homepage:            https://gitlab.com
+bug-reports:         https://github.com/bos/aeson/issues
+extra-source-files:  README.md
+                     CHANGELOG.md
+                     stack.yaml
+                     Setup.hs
+cabal-version:       >=1.10
+
+library
+  hs-source-dirs:      src
+  default-language:    Haskell2010
+  ghc-options:         -Wall
+  default-extensions:  DataKinds
+                     , DeriveDataTypeable
+                     , DeriveFunctor
+                     , DeriveGeneric
+                     , ExistentialQuantification
+                     , FlexibleContexts
+                     , GADTs
+                     , GeneralizedNewtypeDeriving
+                     , MultiParamTypeClasses
+                     , OverloadedStrings
+                     , RecordWildCards
+                     , ScopedTypeVariables
+                     , TupleSections
+                     , TypeOperators
+  build-depends:       base >= 4.7 && < 5
+                     , aeson
+                     , bson
+                     , lens
+                     , random
+                     , safe
+                     , swagger2
+                     , text
+  exposed-modules:     Data.Currency
diff --git a/src/Data/Currency.hs b/src/Data/Currency.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Currency.hs
@@ -0,0 +1,1169 @@
+-- | A Currency representation as specified in the ISO-4217 standard
+
+module Data.Currency where
+
+import           Prelude       hiding (Ordering (..))
+
+import           Control.Lens  ((&), (?~))
+import           Control.Monad ((>=>))
+import           Data.Aeson    as Aeson
+import           Data.Aeson    (FromJSON (..), ToJSON (..))
+import           Data.Bson     (Val (..), (=:))
+import qualified Data.Bson     as Bson
+import           Data.Data     (Data)
+import           Data.Proxy    (Proxy (..))
+import           Data.Swagger  (NamedSchema (..), ToSchema (..))
+import qualified Data.Swagger  as Swagger
+import           Data.Text     (Text)
+import           Data.Typeable (Typeable)
+import           GHC.Generics  (Generic)
+import qualified Safe
+import           System.Random (Random (..))
+
+
+-- | Actual representation of a currency
+data Currency = Currency
+  { alpha   :: Alpha -- ^ Alpha Code
+  , numeric :: Int   -- ^ Numeric code
+  , minor   :: Int   -- ^ Number of decimal units
+  , name    :: Text  -- ^ English name
+  } deriving (Show, Eq, Read, Generic, Data, Typeable)
+
+instance FromJSON Currency where parseJSON          = Aeson.genericParseJSON Aeson.defaultOptions
+
+instance ToJSON   Currency where toJSON             = Aeson.genericToJSON Aeson.defaultOptions
+
+instance ToSchema Currency where declareNamedSchema = Swagger.genericDeclareNamedSchema Swagger.defaultSchemaOptions
+
+instance Val Currency where
+  val Currency{..} = Bson.Doc
+    [ "alpha"  =: alpha
+    , "numeric"  =: numeric
+    , "minor" =: minor
+    , "name"    =: name
+    ]
+
+  cast' v = case v of
+    Bson.Doc doc -> Currency
+      <$> Bson.lookup "alpha"   doc
+      <*> Bson.lookup "numeric" doc
+      <*> Bson.lookup "minor"   doc
+      <*> Bson.lookup "name"    doc
+
+    _ -> Nothing
+
+instance Random Currency where
+  random g =
+    let (i, g') = randomR (0, length currencies - 1) g
+    in  (currencies !! i, g')
+
+  randomR (a, b) g =
+    let currencies' = dropWhile (/= a) $ takeWhile (/= b) currencies
+        (i, g')    = randomR (0, length currencies' - 1) g
+    in  (currencies' !! i, g')
+
+-- | A type which represents ISO 4217 alphabetic codes as an enum
+data Alpha
+  = AED  -- ^ UAE Dirham
+  | AFN  -- ^ Afghani
+  | ALL  -- ^ Lek
+  | AMD  -- ^ Armenian Dram
+  | ANG  -- ^ Netherlands Antillean Guilder
+  | AOA  -- ^ Kwanza
+  | ARS  -- ^ Argentine Peso
+  | AUD  -- ^ Australian Dollar
+  | AWG  -- ^ Aruban Florin
+  | AZN  -- ^ Azerbaijan Manat
+  | BAM  -- ^ Convertible Mark
+  | BBD  -- ^ Barbados Dollar
+  | BDT  -- ^ Taka
+  | BGN  -- ^ Bulgarian Lev
+  | BHD  -- ^ Bahraini Dinar
+  | BIF  -- ^ Burundi Franc
+  | BMD  -- ^ Bermudian Dollar
+  | BND  -- ^ Brunei Dollar
+  | BOB  -- ^ Boliviano
+  | BOV  -- ^ Mvdol
+  | BRL  -- ^ Brazilian Real
+  | BSD  -- ^ Bahamian Dollar
+  | BTN  -- ^ Ngultrum
+  | BWP  -- ^ Pula
+  | BYN  -- ^ Belarusian Ruble
+  | BZD  -- ^ Belize Dollar
+  | CAD  -- ^ Canadian Dollar
+  | CDF  -- ^ Congolese Franc
+  | CHE  -- ^ WIR Euro
+  | CHF  -- ^ Swiss Franc
+  | CHW  -- ^ WIR Franc
+  | CLF  -- ^ Unidad de Fomento
+  | CLP  -- ^ Chilean Peso
+  | CNY  -- ^ Yuan Renminbi
+  | COP  -- ^ Colombian Peso
+  | COU  -- ^ Unidad de Valor Real
+  | CRC  -- ^ Costa Rican Colon
+  | CUC  -- ^ Peso Convertible
+  | CUP  -- ^ Cuban Peso
+  | CVE  -- ^ Cabo Verde Escudo
+  | CZK  -- ^ Czech Koruna
+  | DJF  -- ^ Djibouti Franc
+  | DKK  -- ^ Danish Krone
+  | DOP  -- ^ Dominican Peso
+  | DZD  -- ^ Algerian Dinar
+  | EGP  -- ^ Egyptian Pound
+  | ERN  -- ^ Nakfa
+  | ETB  -- ^ Ethiopian Birr
+  | EUR  -- ^ Euro
+  | FJD  -- ^ Fiji Dollar
+  | FKP  -- ^ Falkland Islands Pound
+  | GBP  -- ^ Pound Sterling
+  | GEL  -- ^ Lari
+  | GHS  -- ^ Ghana Cedi
+  | GIP  -- ^ Gibraltar Pound
+  | GMD  -- ^ Dalasi
+  | GNF  -- ^ Guinean Franc
+  | GTQ  -- ^ Quetzal
+  | GYD  -- ^ Guyana Dollar
+  | HKD  -- ^ Hong Kong Dollar
+  | HNL  -- ^ Lempira
+  | HRK  -- ^ Kuna
+  | HTG  -- ^ Gourde
+  | HUF  -- ^ Forint
+  | IDR  -- ^ Rupiah
+  | ILS  -- ^ New Israeli Sheqel
+  | INR  -- ^ Indian Rupee
+  | IQD  -- ^ Iraqi Dinar
+  | IRR  -- ^ Iranian Rial
+  | ISK  -- ^ Iceland Krona
+  | JMD  -- ^ Jamaican Dollar
+  | JOD  -- ^ Jordanian Dinar
+  | JPY  -- ^ Yen
+  | KES  -- ^ Kenyan Shilling
+  | KGS  -- ^ Som
+  | KHR  -- ^ Riel
+  | KMF  -- ^ Comorian Franc
+  | KPW  -- ^ North Korean Won
+  | KRW  -- ^ Won
+  | KWD  -- ^ Kuwaiti Dinar
+  | KYD  -- ^ Cayman Islands Dollar
+  | KZT  -- ^ Tenge
+  | LAK  -- ^ Lao Kip
+  | LBP  -- ^ Lebanese Pound
+  | LKR  -- ^ Sri Lanka Rupee
+  | LRD  -- ^ Liberian Dollar
+  | LSL  -- ^ Loti
+  | LYD  -- ^ Libyan Dinar
+  | MAD  -- ^ Moroccan Dirham
+  | MDL  -- ^ Moldovan Leu
+  | MGA  -- ^ Malagasy Ariary
+  | MKD  -- ^ Denar
+  | MMK  -- ^ Kyat
+  | MNT  -- ^ Tugrik
+  | MOP  -- ^ Pataca
+  | MRO  -- ^ Ouguiya
+  | MUR  -- ^ Mauritius Rupee
+  | MVR  -- ^ Rufiyaa
+  | MWK  -- ^ Malawi Kwacha
+  | MXN  -- ^ Mexican Peso
+  | MXV  -- ^ Mexican Unidad de Inversion (UDI)
+  | MYR  -- ^ Malaysian Ringgit
+  | MZN  -- ^ Mozambique Metical
+  | NAD  -- ^ Namibia Dollar
+  | NGN  -- ^ Naira
+  | NIO  -- ^ Cordoba Oro
+  | NOK  -- ^ Norwegian Krone
+  | NPR  -- ^ Nepalese Rupee
+  | NZD  -- ^ New Zealand Dollar
+  | OMR  -- ^ Rial Omani
+  | PAB  -- ^ Balboa
+  | PEN  -- ^ Sol
+  | PGK  -- ^ Kina
+  | PHP  -- ^ Philippine Peso
+  | PKR  -- ^ Pakistan Rupee
+  | PLN  -- ^ Zloty
+  | PYG  -- ^ Guarani
+  | QAR  -- ^ Qatari Rial
+  | RON  -- ^ Romanian Leu
+  | RSD  -- ^ Serbian Dinar
+  | RUB  -- ^ Russian Ruble
+  | RWF  -- ^ Rwanda Franc
+  | SAR  -- ^ Saudi Riyal
+  | SBD  -- ^ Solomon Islands Dollar
+  | SCR  -- ^ Seychelles Rupee
+  | SDG  -- ^ Sudanese Pound
+  | SEK  -- ^ Swedish Krona
+  | SGD  -- ^ Singapore Dollar
+  | SHP  -- ^ Saint Helena Pound
+  | SLL  -- ^ Leone
+  | SOS  -- ^ Somali Shilling
+  | SRD  -- ^ Surinam Dollar
+  | SSP  -- ^ South Sudanese Pound
+  | STD  -- ^ Dobra
+  | SVC  -- ^ El Salvador Colon
+  | SYP  -- ^ Syrian Pound
+  | SZL  -- ^ Lilangeni
+  | THB  -- ^ Baht
+  | TJS  -- ^ Somoni
+  | TMT  -- ^ Turkmenistan New Manat
+  | TND  -- ^ Tunisian Dinar
+  | TOP  -- ^ Pa’anga
+  | TRY  -- ^ Turkish Lira
+  | TTD  -- ^ Trinidad and Tobago Dollar
+  | TWD  -- ^ New Taiwan Dollar
+  | TZS  -- ^ Tanzanian Shilling
+  | UAH  -- ^ Hryvnia
+  | UGX  -- ^ Uganda Shilling
+  | USD  -- ^ US Dollar
+  | USN  -- ^ US Dollar (Next day)
+  | UYI  -- ^ Uruguay Peso en Unidades Indexadas (URUIURUI)
+  | UYU  -- ^ Peso Uruguayo
+  | UZS  -- ^ Uzbekistan Sum
+  | VEF  -- ^ Bolívar
+  | VND  -- ^ Dong
+  | VUV  -- ^ Vatu
+  | WST  -- ^ Tala
+  | XAF  -- ^ CFA Franc BEAC
+  | XAG  -- ^ Silver
+  | XAU  -- ^ Gold
+  | XBA  -- ^ Bond Markets Unit European Composite Unit (EURCO)
+  | XBB  -- ^ Bond Markets Unit European Monetary Unit (E.M.U.-6)
+  | XBC  -- ^ Bond Markets Unit European Unit of Account 9 (E.U.A.-9)
+  | XBD  -- ^ Bond Markets Unit European Unit of Account 17 (E.U.A.-17)
+  | XCD  -- ^ East Caribbean Dollar
+  | XDR  -- ^ SDR (Special Drawing Right)
+  | XOF  -- ^ CFA Franc BCEAO
+  | XPD  -- ^ Palladium
+  | XPF  -- ^ CFP Franc
+  | XPT  -- ^ Platinum
+  | XSU  -- ^ Sucre
+  | XTS  -- ^ Codes specifically reserved for testing purposes
+  | XUA  -- ^ ADB Unit of Account
+  | XXX  -- ^ The codes assigned for transactions where no currency is involved
+  | YER  -- ^ Yemeni Rial
+  | ZAR  -- ^ Rand
+  | ZMW  -- ^ Zambian Kwacha
+  | ZWL  -- ^ Zimbabwe Dollar
+  deriving (Show, Eq, Ord, Enum, Bounded, Read, Generic, Data, Typeable)
+
+instance FromJSON Alpha where parseJSON = Aeson.genericParseJSON Aeson.defaultOptions
+
+instance ToJSON   Alpha where toJSON    = Aeson.genericToJSON Aeson.defaultOptions
+
+instance Val      Alpha where val       = val . show
+                              cast'     = cast' >=> Safe.readMay
+
+instance ToSchema Alpha where
+  declareNamedSchema _ = do
+    NamedSchema name schema <- declareNamedSchema (Proxy :: Proxy String)
+    return $ NamedSchema name $ schema
+      & Swagger.format  ?~ "iso4217-alpha"
+      & Swagger.example ?~ Aeson.toJSON EUR
+
+instance Random Alpha where
+  random g =
+    let (r, g') = randomR (fromEnum (minBound :: Alpha), fromEnum(maxBound :: Alpha)) g
+    in  (toEnum r, g')
+
+  randomR (l, h) g =
+    let (r, g') = randomR (fromEnum l, fromEnum h) g
+    in  (toEnum r, g')
+
+fromAlpha :: Alpha -> [Currency] -> Maybe Currency
+fromAlpha α =
+  Safe.headMay . filter (== α)
+
+-- Constructor for all currencies
+
+unitOfAccount :: Currency
+unitOfAccount =
+  Currency XUA 965 0 "ADB Unit of Account"
+
+afghani :: Currency
+afghani =
+  Currency AFN 971 2 "Afghani"
+
+algerianDinar :: Currency
+algerianDinar =
+  Currency DZD 012 2 "Algerian Dinar"
+
+argentinePeso :: Currency
+argentinePeso =
+  Currency ARS 032 2 "Argentine Peso"
+
+armenianDram :: Currency
+armenianDram =
+  Currency AMD 051 2 "Armenian Dram"
+
+arubanFlorin :: Currency
+arubanFlorin =
+  Currency AWG 533 2 "Aruban Florin"
+
+australianDollar :: Currency
+australianDollar =
+  Currency AUD 036 2 "Australian Dollar"
+
+azerbaijanManat :: Currency
+azerbaijanManat =
+  Currency AZN 944 2 "Azerbaijan Manat"
+
+bahamianDollar :: Currency
+bahamianDollar =
+  Currency BSD 044 2 "Bahamian Dollar"
+
+bahrainiDinar :: Currency
+bahrainiDinar =
+  Currency BHD 048 3 "Bahraini Dinar"
+
+baht :: Currency
+baht =
+  Currency THB 764 2 "Baht"
+
+balboa :: Currency
+balboa =
+  Currency PAB 590 2 "Balboa"
+
+barbadosDollar :: Currency
+barbadosDollar =
+  Currency BBD 052 2 "Barbados Dollar"
+
+belarusianRuble :: Currency
+belarusianRuble =
+  Currency BYN 933 2 "Belarusian Ruble"
+
+belizeDollar :: Currency
+belizeDollar =
+  Currency BZD 084 2 "Belize Dollar"
+
+bermudianDollar :: Currency
+bermudianDollar =
+  Currency BMD 060 2 "Bermudian Dollar"
+
+boliviano :: Currency
+boliviano =
+  Currency BOB 068 2 "Boliviano"
+
+bolívar :: Currency
+bolívar =
+  Currency VEF 937 2 "Bolívar"
+
+bondMarketsCompositeUnit :: Currency
+bondMarketsCompositeUnit =
+  Currency XBA 955 0 "Bond Markets Unit European Composite Unit (EURCO)"
+
+bondMarketsMonetaryUnit :: Currency
+bondMarketsMonetaryUnit =
+  Currency XBB 956 0 "Bond Markets Unit European Monetary Unit (E.M.U.-6)"
+
+bondMarketsUnitofAccount17 :: Currency
+bondMarketsUnitofAccount17 =
+  Currency XBD 958 0 "Bond Markets Unit European Unit of Account 17 (E.U.A.-17)"
+
+bondMarketsUnitofAccount9 :: Currency
+bondMarketsUnitofAccount9 =
+  Currency XBC 957 0 "Bond Markets Unit European Unit of Account 9 (E.U.A.-9)"
+
+brazilianReal :: Currency
+brazilianReal =
+  Currency BRL 986 2 "Brazilian Real"
+
+bruneiDollar :: Currency
+bruneiDollar =
+  Currency BND 096 2 "Brunei Dollar"
+
+bulgarianLev :: Currency
+bulgarianLev =
+  Currency BGN 975 2 "Bulgarian Lev"
+
+burundiFranc :: Currency
+burundiFranc =
+  Currency BIF 108 0 "Burundi Franc"
+
+cfaFrancBCEAO :: Currency
+cfaFrancBCEAO =
+  Currency XOF 952 0 "CFA Franc BCEAO"
+
+cfaFrancBEAC :: Currency
+cfaFrancBEAC =
+  Currency XAF 950 0 "CFA Franc BEAC"
+
+cfpFranc :: Currency
+cfpFranc =
+  Currency XPF 953 0 "CFP Franc"
+
+caboVerdeEscudo :: Currency
+caboVerdeEscudo =
+  Currency CVE 132 2 "Cabo Verde Escudo"
+
+canadianDollar :: Currency
+canadianDollar =
+  Currency CAD 124 2 "Canadian Dollar"
+
+caymanIslandsDollar :: Currency
+caymanIslandsDollar =
+  Currency KYD 136 2 "Cayman Islands Dollar"
+
+chileanPeso :: Currency
+chileanPeso =
+  Currency CLP 152 0 "Chilean Peso"
+
+testing :: Currency
+testing =
+  Currency XTS 963 0 "Codes specifically reserved for testing purposes"
+
+colombianPeso :: Currency
+colombianPeso =
+  Currency COP 170 2 "Colombian Peso"
+
+comorianFranc :: Currency
+comorianFranc =
+  Currency KMF 174 0 "Comorian Franc"
+
+congoleseFranc :: Currency
+congoleseFranc =
+  Currency CDF 976 2 "Congolese Franc"
+
+convertibleMark :: Currency
+convertibleMark =
+  Currency BAM 977 2 "Convertible Mark"
+
+cordobaOro :: Currency
+cordobaOro =
+  Currency NIO 558 2 "Cordoba Oro"
+
+costaRicanColon :: Currency
+costaRicanColon =
+  Currency CRC 188 2 "Costa Rican Colon"
+
+cubanPeso :: Currency
+cubanPeso =
+  Currency CUP 192 2 "Cuban Peso"
+
+czechKoruna :: Currency
+czechKoruna =
+  Currency CZK 203 2 "Czech Koruna"
+
+dalasi :: Currency
+dalasi =
+  Currency GMD 270 2 "Dalasi"
+
+danishKrone :: Currency
+danishKrone =
+  Currency DKK 208 2 "Danish Krone"
+
+denar :: Currency
+denar =
+  Currency MKD 807 2 "Denar"
+
+djiboutiFranc :: Currency
+djiboutiFranc =
+  Currency DJF 262 0 "Djibouti Franc"
+
+dobra :: Currency
+dobra =
+  Currency STD 678 2 "Dobra"
+
+dominicanPeso :: Currency
+dominicanPeso =
+  Currency DOP 214 2 "Dominican Peso"
+
+dong :: Currency
+dong =
+  Currency VND 704 0 "Dong"
+
+eastCaribbeanDollar :: Currency
+eastCaribbeanDollar =
+  Currency XCD 951 2 "East Caribbean Dollar"
+
+egyptianPound :: Currency
+egyptianPound =
+  Currency EGP 818 2 "Egyptian Pound"
+
+elSalvadorColon :: Currency
+elSalvadorColon =
+  Currency SVC 222 2 "El Salvador Colon"
+
+ethiopianBirr :: Currency
+ethiopianBirr =
+  Currency ETB 230 2 "Ethiopian Birr"
+
+euro :: Currency
+euro =
+  Currency EUR 978 2 "Euro"
+
+falklandIslandsPound :: Currency
+falklandIslandsPound =
+  Currency FKP 238 2 "Falkland Islands Pound"
+
+fijiDollar :: Currency
+fijiDollar =
+  Currency FJD 242 2 "Fiji Dollar"
+
+forint :: Currency
+forint =
+  Currency HUF 348 2 "Forint"
+
+ghanaCedi :: Currency
+ghanaCedi =
+  Currency GHS 936 2 "Ghana Cedi"
+
+gibraltarPound :: Currency
+gibraltarPound =
+  Currency GIP 292 2 "Gibraltar Pound"
+
+gold :: Currency
+gold =
+  Currency XAU 959 0 "Gold"
+
+gourde :: Currency
+gourde =
+  Currency HTG 332 2 "Gourde"
+
+guarani :: Currency
+guarani =
+  Currency PYG 600 0 "Guarani"
+
+guineanFranc :: Currency
+guineanFranc =
+  Currency GNF 324 0 "Guinean Franc"
+
+guyanaDollar :: Currency
+guyanaDollar =
+  Currency GYD 328 2 "Guyana Dollar"
+
+hongKongDollar :: Currency
+hongKongDollar =
+  Currency HKD 344 2 "Hong Kong Dollar"
+
+hryvnia :: Currency
+hryvnia =
+  Currency UAH 980 2 "Hryvnia"
+
+icelandKrona :: Currency
+icelandKrona =
+  Currency ISK 352 0 "Iceland Krona"
+
+indianRupee :: Currency
+indianRupee =
+  Currency INR 356 2 "Indian Rupee"
+
+iranianRial :: Currency
+iranianRial =
+  Currency IRR 364 2 "Iranian Rial"
+
+iraqiDinar :: Currency
+iraqiDinar =
+  Currency IQD 368 3 "Iraqi Dinar"
+
+jamaicanDollar :: Currency
+jamaicanDollar =
+  Currency JMD 388 2 "Jamaican Dollar"
+
+jordanianDinar :: Currency
+jordanianDinar =
+  Currency JOD 400 3 "Jordanian Dinar"
+
+kenyanShilling :: Currency
+kenyanShilling =
+  Currency KES 404 2 "Kenyan Shilling"
+
+kina :: Currency
+kina =
+  Currency PGK 598 2 "Kina"
+
+kuna :: Currency
+kuna =
+  Currency HRK 191 2 "Kuna"
+
+kuwaitiDinar :: Currency
+kuwaitiDinar =
+  Currency KWD 414 3 "Kuwaiti Dinar"
+
+kwanza :: Currency
+kwanza =
+  Currency AOA 973 2 "Kwanza"
+
+kyat :: Currency
+kyat =
+  Currency MMK 104 2 "Kyat"
+
+laoKip :: Currency
+laoKip =
+  Currency LAK 418 2 "Lao Kip"
+
+lari :: Currency
+lari =
+  Currency GEL 981 2 "Lari"
+
+lebanesePound :: Currency
+lebanesePound =
+  Currency LBP 422 2 "Lebanese Pound"
+
+lek :: Currency
+lek =
+  Currency ALL 008 2 "Lek"
+
+lempira :: Currency
+lempira =
+  Currency HNL 340 2 "Lempira"
+
+leone :: Currency
+leone =
+  Currency SLL 694 2 "Leone"
+
+liberianDollar :: Currency
+liberianDollar =
+  Currency LRD 430 2 "Liberian Dollar"
+
+libyanDinar :: Currency
+libyanDinar =
+  Currency LYD 434 3 "Libyan Dinar"
+
+lilangeni :: Currency
+lilangeni =
+  Currency SZL 748 2 "Lilangeni"
+
+loti :: Currency
+loti =
+  Currency LSL 426 2 "Loti"
+
+malagasyAriary :: Currency
+malagasyAriary =
+  Currency MGA 969 2 "Malagasy Ariary"
+
+malawiKwacha :: Currency
+malawiKwacha =
+  Currency MWK 454 2 "Malawi Kwacha"
+
+malaysianRinggit :: Currency
+malaysianRinggit =
+  Currency MYR 458 2 "Malaysian Ringgit"
+
+mauritiusRupee :: Currency
+mauritiusRupee =
+  Currency MUR 480 2 "Mauritius Rupee"
+
+mexicanPeso :: Currency
+mexicanPeso =
+  Currency MXN 484 2 "Mexican Peso"
+
+mexicanUnidadDeInversion :: Currency
+mexicanUnidadDeInversion =
+  Currency MXV 979 2 "Mexican Unidad de Inversion (UDI)"
+
+moldovanLeu :: Currency
+moldovanLeu =
+  Currency MDL 498 2 "Moldovan Leu"
+
+moroccanDirham :: Currency
+moroccanDirham =
+  Currency MAD 504 2 "Moroccan Dirham"
+
+mozambiqueMetical :: Currency
+mozambiqueMetical =
+  Currency MZN 943 2 "Mozambique Metical"
+
+mvdol :: Currency
+mvdol =
+  Currency BOV 984 2 "Mvdol"
+
+naira :: Currency
+naira =
+  Currency NGN 566 2 "Naira"
+
+nakfa :: Currency
+nakfa =
+  Currency ERN 232 2 "Nakfa"
+
+namibiaDollar :: Currency
+namibiaDollar =
+  Currency NAD 516 2 "Namibia Dollar"
+
+nepaleseRupee :: Currency
+nepaleseRupee =
+  Currency NPR 524 2 "Nepalese Rupee"
+
+netherlandsAntilleanGuilder :: Currency
+netherlandsAntilleanGuilder =
+  Currency ANG 532 2 "Netherlands Antillean Guilder"
+
+newIsraeliSheqel :: Currency
+newIsraeliSheqel =
+  Currency ILS 376 2 "New Israeli Sheqel"
+
+newTaiwanDollar :: Currency
+newTaiwanDollar =
+  Currency TWD 901 2 "New Taiwan Dollar"
+
+newZealandDollar :: Currency
+newZealandDollar =
+  Currency NZD 554 2 "New Zealand Dollar"
+
+ngultrum :: Currency
+ngultrum =
+  Currency BTN 064 2 "Ngultrum"
+
+northKoreanWon :: Currency
+northKoreanWon =
+  Currency KPW 408 2 "North Korean Won"
+
+norwegianKrone :: Currency
+norwegianKrone =
+  Currency NOK 578 2 "Norwegian Krone"
+
+ouguiya :: Currency
+ouguiya =
+  Currency MRO 478 2 "Ouguiya"
+
+pakistanRupee :: Currency
+pakistanRupee =
+  Currency PKR 586 2 "Pakistan Rupee"
+
+palladium :: Currency
+palladium =
+  Currency XPD 964 0 "Palladium"
+
+pataca :: Currency
+pataca =
+  Currency MOP 446 2 "Pataca"
+
+paanga :: Currency
+paanga =
+  Currency TOP 776 2 "Pa’anga"
+
+pesoConvertible :: Currency
+pesoConvertible =
+  Currency CUC 931 2 "Peso Convertible"
+
+pesoUruguayo :: Currency
+pesoUruguayo =
+  Currency UYU 858 2 "Peso Uruguayo"
+
+philippinePeso :: Currency
+philippinePeso =
+  Currency PHP 608 2 "Philippine Peso"
+
+platinum :: Currency
+platinum =
+  Currency XPT 962 0 "Platinum"
+
+poundSterling :: Currency
+poundSterling =
+  Currency GBP 826 2 "Pound Sterling"
+
+pula :: Currency
+pula =
+  Currency BWP 072 2 "Pula"
+
+qatariRial :: Currency
+qatariRial =
+  Currency QAR 634 2 "Qatari Rial"
+
+quetzal :: Currency
+quetzal =
+  Currency GTQ 320 2 "Quetzal"
+
+rand :: Currency
+rand =
+  Currency ZAR 710 2 "Rand"
+
+rialOmani :: Currency
+rialOmani =
+  Currency OMR 512 3 "Rial Omani"
+
+riel :: Currency
+riel =
+  Currency KHR 116 2 "Riel"
+
+romanianLeu :: Currency
+romanianLeu =
+  Currency RON 946 2 "Romanian Leu"
+
+rufiyaa :: Currency
+rufiyaa =
+  Currency MVR 462 2 "Rufiyaa"
+
+rupiah :: Currency
+rupiah =
+  Currency IDR 360 2 "Rupiah"
+
+russianRuble :: Currency
+russianRuble =
+  Currency RUB 643 2 "Russian Ruble"
+
+rwandaFranc :: Currency
+rwandaFranc =
+  Currency RWF 646 0 "Rwanda Franc"
+
+sdr :: Currency
+sdr =
+  Currency XDR 960 0 "SDR (Special Drawing Right)"
+
+saintHelenaPound :: Currency
+saintHelenaPound =
+  Currency SHP 654 2 "Saint-Helena Pound"
+
+saudiRiyal :: Currency
+saudiRiyal =
+  Currency SAR 682 2 "Saudi Riyal"
+
+serbianDinar :: Currency
+serbianDinar =
+  Currency RSD 941 2 "Serbian Dinar"
+
+seychellesRupee :: Currency
+seychellesRupee =
+  Currency SCR 690 2 "Seychelles Rupee"
+
+silver :: Currency
+silver =
+  Currency XAG 961 0 "Silver"
+
+singaporeDollar :: Currency
+singaporeDollar =
+  Currency SGD 702 2 "Singapore Dollar"
+
+sol :: Currency
+sol =
+  Currency PEN 604 2 "Sol"
+
+solomonIslandsDollar :: Currency
+solomonIslandsDollar =
+  Currency SBD 090 2 "Solomon Islands Dollar"
+
+som :: Currency
+som =
+  Currency KGS 417 2 "Som"
+
+somaliShilling :: Currency
+somaliShilling =
+  Currency SOS 706 2 "Somali Shilling"
+
+somoni :: Currency
+somoni =
+  Currency TJS 972 2 "Somoni"
+
+southSudanesePound :: Currency
+southSudanesePound =
+  Currency SSP 728 2 "South Sudanese Pound"
+
+sriLankaRupee :: Currency
+sriLankaRupee =
+  Currency LKR 144 2 "Sri Lanka Rupee"
+
+sucre :: Currency
+sucre =
+  Currency XSU 994 0 "Sucre"
+
+sudanesePound :: Currency
+sudanesePound =
+  Currency SDG 938 2 "Sudanese Pound"
+
+surinamDollar :: Currency
+surinamDollar =
+  Currency SRD 968 2 "Surinam Dollar"
+
+swedishKrona :: Currency
+swedishKrona =
+  Currency SEK 752 2 "Swedish Krona"
+
+swissFranc :: Currency
+swissFranc =
+  Currency CHF 756 2 "Swiss Franc"
+
+syrianPound :: Currency
+syrianPound =
+  Currency SYP 760 2 "Syrian Pound"
+
+taka :: Currency
+taka =
+  Currency BDT 050 2 "Taka"
+
+tala :: Currency
+tala =
+  Currency WST 882 2 "Tala"
+
+tanzanianShilling :: Currency
+tanzanianShilling =
+  Currency TZS 834 2 "Tanzanian Shilling"
+
+tenge :: Currency
+tenge =
+  Currency KZT 398 2 "Tenge"
+
+noCurrency :: Currency
+noCurrency =
+  Currency XXX 999 0 "The codes assigned for transactions where no currency is involved"
+
+trinidadAndTobagoDollar :: Currency
+trinidadAndTobagoDollar =
+  Currency TTD 780 2 "Trinidad and Tobago Dollar"
+
+tugrik :: Currency
+tugrik =
+  Currency MNT 496 2 "Tugrik"
+
+tunisianDinar :: Currency
+tunisianDinar =
+  Currency TND 788 3 "Tunisian Dinar"
+
+turkishLira :: Currency
+turkishLira =
+  Currency TRY 949 2 "Turkish Lira"
+
+turkmenistanNewManat :: Currency
+turkmenistanNewManat =
+  Currency TMT 934 2 "Turkmenistan New Manat"
+
+uAEDirham :: Currency
+uAEDirham =
+  Currency AED 784 2 "UAE Dirham"
+
+usDollar :: Currency
+usDollar =
+  Currency USD 840 2 "US Dollar"
+
+usDollarNextday :: Currency
+usDollarNextday =
+  Currency USN 997 2 "US Dollar (Next day)"
+
+ugandaShilling :: Currency
+ugandaShilling =
+  Currency UGX 800 0 "Uganda"
+
+unidaddeFomento :: Currency
+unidaddeFomento =
+  Currency CLF 990 4 "Unidad de Fomento"
+
+unidaddeValorReal :: Currency
+unidaddeValorReal =
+  Currency COU 970 2 "Unidad de Valor Real"
+
+uruguayPesoEnUnidadesIndexadas :: Currency
+uruguayPesoEnUnidadesIndexadas =
+  Currency UYI 940 0 "Uruguay Peso en Unidades Indexadas (URUIURUI)"
+
+uzbekistanSum :: Currency
+uzbekistanSum =
+  Currency UZS 860 2 "Uzbekistan"
+
+vatu :: Currency
+vatu =
+  Currency VUV 548 0 "Vatu"
+
+wirEuro :: Currency
+wirEuro =
+  Currency CHE 947 2 "WIR Euro"
+
+wirFranc :: Currency
+wirFranc =
+  Currency CHW 948 2 "WIR Franc"
+
+won :: Currency
+won =
+  Currency KRW 410 0 "Won"
+
+yemeniRial :: Currency
+yemeniRial =
+  Currency YER 886 2 "Yemeni Rial"
+
+yen :: Currency
+yen =
+  Currency JPY 392 0 "Yen"
+
+yuanRenminbi :: Currency
+yuanRenminbi =
+  Currency CNY 156 2 "Yuan Renminbi"
+
+zambianKwacha :: Currency
+zambianKwacha =
+  Currency ZMW 967 2 "Zambian Kwacha"
+
+zimbabweDollar :: Currency
+zimbabweDollar =
+  Currency ZWL 932 2 "Zimbabwe Dollar"
+
+zloty :: Currency
+zloty =
+  Currency PLN 985 2 "Zloty"
+
+-- | List of all currencies in the standard
+currencies :: [Currency]
+currencies =
+  [ unitOfAccount
+  , afghani
+  , algerianDinar
+  , argentinePeso
+  , armenianDram
+  , arubanFlorin
+  , australianDollar
+  , azerbaijanManat
+  , bahamianDollar
+  , bahrainiDinar
+  , baht
+  , balboa
+  , barbadosDollar
+  , belarusianRuble
+  , belizeDollar
+  , bermudianDollar
+  , boliviano
+  , bolívar
+  , bondMarketsCompositeUnit
+  , bondMarketsMonetaryUnit
+  , bondMarketsUnitofAccount17
+  , bondMarketsUnitofAccount9
+  , brazilianReal
+  , bruneiDollar
+  , bulgarianLev
+  , burundiFranc
+  , cfaFrancBCEAO
+  , cfaFrancBEAC
+  , cfpFranc
+  , caboVerdeEscudo
+  , canadianDollar
+  , caymanIslandsDollar
+  , chileanPeso
+  , testing
+  , colombianPeso
+  , comorianFranc
+  , congoleseFranc
+  , convertibleMark
+  , cordobaOro
+  , costaRicanColon
+  , cubanPeso
+  , czechKoruna
+  , dalasi
+  , danishKrone
+  , denar
+  , djiboutiFranc
+  , dobra
+  , dominicanPeso
+  , dong
+  , eastCaribbeanDollar
+  , egyptianPound
+  , elSalvadorColon
+  , ethiopianBirr
+  , euro
+  , falklandIslandsPound
+  , fijiDollar
+  , forint
+  , ghanaCedi
+  , gibraltarPound
+  , gold
+  , gourde
+  , guarani
+  , guineanFranc
+  , guyanaDollar
+  , hongKongDollar
+  , hryvnia
+  , icelandKrona
+  , indianRupee
+  , iranianRial
+  , iraqiDinar
+  , jamaicanDollar
+  , jordanianDinar
+  , kenyanShilling
+  , kina
+  , kuna
+  , kuwaitiDinar
+  , kwanza
+  , kyat
+  , laoKip
+  , lari
+  , lebanesePound
+  , lek
+  , lempira
+  , leone
+  , liberianDollar
+  , libyanDinar
+  , lilangeni
+  , loti
+  , malagasyAriary
+  , malawiKwacha
+  , malaysianRinggit
+  , mauritiusRupee
+  , mexicanPeso
+  , mexicanUnidadDeInversion
+  , moldovanLeu
+  , moroccanDirham
+  , mozambiqueMetical
+  , mvdol
+  , naira
+  , nakfa
+  , namibiaDollar
+  , nepaleseRupee
+  , netherlandsAntilleanGuilder
+  , newIsraeliSheqel
+  , newTaiwanDollar
+  , newZealandDollar
+  , ngultrum
+  , northKoreanWon
+  , norwegianKrone
+  , ouguiya
+  , pakistanRupee
+  , palladium
+  , pataca
+  , paanga
+  , pesoConvertible
+  , pesoUruguayo
+  , philippinePeso
+  , platinum
+  , poundSterling
+  , pula
+  , qatariRial
+  , quetzal
+  , rand
+  , rialOmani
+  , riel
+  , romanianLeu
+  , rufiyaa
+  , rupiah
+  , russianRuble
+  , rwandaFranc
+  , sdr
+  , saintHelenaPound
+  , saudiRiyal
+  , serbianDinar
+  , seychellesRupee
+  , silver
+  , singaporeDollar
+  , sol
+  , solomonIslandsDollar
+  , som
+  , somaliShilling
+  , somoni
+  , southSudanesePound
+  , sriLankaRupee
+  , sucre
+  , sudanesePound
+  , surinamDollar
+  , swedishKrona
+  , swissFranc
+  , syrianPound
+  , taka
+  , tala
+  , tanzanianShilling
+  , tenge
+  , noCurrency
+  , trinidadAndTobagoDollar
+  , tugrik
+  , tunisianDinar
+  , turkishLira
+  , turkmenistanNewManat
+  , uAEDirham
+  , usDollar
+  , usDollarNextday
+  , ugandaShilling
+  , unidaddeFomento
+  , unidaddeValorReal
+  , uruguayPesoEnUnidadesIndexadas
+  , uzbekistanSum
+  , vatu
+  , wirEuro
+  , wirFranc
+  , won
+  , yemeniRial
+  , yen
+  , yuanRenminbi
+  , zambianKwacha
+  , zloty
+  , zimbabweDollar
+  ]
diff --git a/stack.yaml b/stack.yaml
new file mode 100644
--- /dev/null
+++ b/stack.yaml
@@ -0,0 +1,6 @@
+resolver: lts-9.1
+packages:
+- '.'
+extra-deps: []
+flags: {}
+extra-package-dbs: []
