module Currency (Currency(..), ISO4217Currency(..), minorUnits) where
import Data.String (IsString(fromString))
import Data.Hashable (Hashable(hashWithSalt))
import qualified Data.ISO3166_CountryCodes as Country
data ISO4217Currency =
NationalCurrency Country.CountryCode Char |
NonNationalCurrency Char Char
deriving (Eq, Ord)
data Currency = ISO4217Currency ISO4217Currency | NonStandardCurrency String
deriving (Eq, Ord)
instance Show ISO4217Currency where
show (NationalCurrency country code) = show country ++ [code]
show (NonNationalCurrency a b) = ['X',a,b]
instance Read ISO4217Currency where
readsPrec _ = readParen False (go . lex)
where
go [(['X',b,c], rest)] = [(NonNationalCurrency b c, rest)]
go [([a,b,c], rest)] = case reads [a,b] of
[(country, "")] -> [(NationalCurrency country c, rest)]
_ -> []
go _ = []
instance Show Currency where
show (ISO4217Currency currency) = show currency
show (NonStandardCurrency str) = show str
instance Read Currency where
readsPrec _ = readParen False (go . lex)
where
go [(lexeme, rest)] = case reads lexeme of
[(isoCurrency, "")] -> [(ISO4217Currency isoCurrency, rest)]
_ -> case reads lexeme of
[(string, "")] -> [(NonStandardCurrency string, rest)]
_ -> []
go _ = []
instance IsString Currency where
fromString s = case reads s of
[(isoCurrency, "")] -> ISO4217Currency isoCurrency
_ -> NonStandardCurrency s
instance Hashable ISO4217Currency where
hashWithSalt salt currency = hashWithSalt salt (show currency)
instance Hashable Currency where
hashWithSalt salt currency = hashWithSalt salt (show currency)
instance Enum Currency where
fromEnum (ISO4217Currency isoCurrency) = fromEnum isoCurrency
fromEnum _ = error "NonStandardCurrency does not have ISO4217 currency code"
toEnum = ISO4217Currency . toEnum
instance Enum ISO4217Currency where
fromEnum (NationalCurrency Country.AF 'A') = 4
fromEnum (NationalCurrency Country.AL 'L') = 8
fromEnum (NationalCurrency Country.DZ 'D') = 12
fromEnum (NationalCurrency Country.AD 'P') = 20
fromEnum (NationalCurrency Country.AO 'N') = 24
fromEnum (NationalCurrency Country.AZ 'M') = 31
fromEnum (NationalCurrency Country.AR 'S') = 32
fromEnum (NationalCurrency Country.AU 'D') = 36
fromEnum (NationalCurrency Country.AT 'S') = 40
fromEnum (NationalCurrency Country.BS 'D') = 44
fromEnum (NationalCurrency Country.BH 'D') = 48
fromEnum (NationalCurrency Country.BD 'T') = 50
fromEnum (NationalCurrency Country.AM 'D') = 51
fromEnum (NationalCurrency Country.BB 'D') = 52
fromEnum (NationalCurrency Country.BE 'F') = 56
fromEnum (NationalCurrency Country.BM 'D') = 60
fromEnum (NationalCurrency Country.BT 'N') = 64
fromEnum (NationalCurrency Country.BO 'B') = 68
fromEnum (NationalCurrency Country.BW 'P') = 72
fromEnum (NationalCurrency Country.BZ 'D') = 84
fromEnum (NationalCurrency Country.SB 'D') = 90
fromEnum (NationalCurrency Country.BN 'D') = 96
fromEnum (NationalCurrency Country.BG 'L') = 100
fromEnum (NationalCurrency Country.MM 'K') = 104
fromEnum (NationalCurrency Country.BI 'F') = 108
fromEnum (NationalCurrency Country.KH 'R') = 116
fromEnum (NationalCurrency Country.CA 'D') = 124
fromEnum (NationalCurrency Country.CV 'E') = 132
fromEnum (NationalCurrency Country.KY 'D') = 136
fromEnum (NationalCurrency Country.LK 'R') = 144
fromEnum (NationalCurrency Country.CL 'P') = 152
fromEnum (NationalCurrency Country.CN 'Y') = 156
fromEnum (NationalCurrency Country.CO 'P') = 170
fromEnum (NationalCurrency Country.KM 'F') = 174
fromEnum (NationalCurrency Country.CR 'C') = 188
fromEnum (NationalCurrency Country.HR 'K') = 191
fromEnum (NationalCurrency Country.CU 'P') = 192
fromEnum (NationalCurrency Country.CY 'P') = 196
fromEnum (NationalCurrency Country.CZ 'K') = 203
fromEnum (NationalCurrency Country.DK 'K') = 208
fromEnum (NationalCurrency Country.DO 'P') = 214
fromEnum (NationalCurrency Country.EC 'S') = 218
fromEnum (NationalCurrency Country.SV 'C') = 222
fromEnum (NationalCurrency Country.ET 'B') = 230
fromEnum (NationalCurrency Country.ER 'N') = 232
fromEnum (NationalCurrency Country.EE 'K') = 233
fromEnum (NationalCurrency Country.FK 'P') = 238
fromEnum (NationalCurrency Country.FJ 'D') = 242
fromEnum (NationalCurrency Country.FI 'M') = 246
fromEnum (NationalCurrency Country.FR 'F') = 250
fromEnum (NationalCurrency Country.DJ 'F') = 262
fromEnum (NationalCurrency Country.GM 'D') = 270
fromEnum (NationalCurrency Country.DE 'M') = 276
fromEnum (NationalCurrency Country.GH 'C') = 288
fromEnum (NationalCurrency Country.GI 'P') = 292
fromEnum (NationalCurrency Country.GR 'D') = 300
fromEnum (NationalCurrency Country.GT 'Q') = 320
fromEnum (NationalCurrency Country.GN 'F') = 324
fromEnum (NationalCurrency Country.GY 'D') = 328
fromEnum (NationalCurrency Country.HT 'G') = 332
fromEnum (NationalCurrency Country.HN 'L') = 340
fromEnum (NationalCurrency Country.HK 'D') = 344
fromEnum (NationalCurrency Country.HU 'F') = 348
fromEnum (NationalCurrency Country.IS 'K') = 352
fromEnum (NationalCurrency Country.IN 'R') = 356
fromEnum (NationalCurrency Country.ID 'R') = 360
fromEnum (NationalCurrency Country.IR 'R') = 364
fromEnum (NationalCurrency Country.IQ 'D') = 368
fromEnum (NationalCurrency Country.IE 'P') = 372
fromEnum (NationalCurrency Country.IL 'S') = 376
fromEnum (NationalCurrency Country.IT 'L') = 380
fromEnum (NationalCurrency Country.JM 'D') = 388
fromEnum (NationalCurrency Country.JP 'Y') = 392
fromEnum (NationalCurrency Country.KZ 'T') = 398
fromEnum (NationalCurrency Country.JO 'D') = 400
fromEnum (NationalCurrency Country.KE 'S') = 404
fromEnum (NationalCurrency Country.KP 'W') = 408
fromEnum (NationalCurrency Country.KR 'W') = 410
fromEnum (NationalCurrency Country.KW 'D') = 414
fromEnum (NationalCurrency Country.KG 'S') = 417
fromEnum (NationalCurrency Country.LA 'K') = 418
fromEnum (NationalCurrency Country.LB 'P') = 422
fromEnum (NationalCurrency Country.LS 'L') = 426
fromEnum (NationalCurrency Country.LV 'L') = 428
fromEnum (NationalCurrency Country.LR 'D') = 430
fromEnum (NationalCurrency Country.LY 'D') = 434
fromEnum (NationalCurrency Country.LT 'L') = 440
fromEnum (NationalCurrency Country.LU 'F') = 442
fromEnum (NationalCurrency Country.MO 'P') = 446
fromEnum (NationalCurrency Country.MG 'F') = 450
fromEnum (NationalCurrency Country.MW 'K') = 454
fromEnum (NationalCurrency Country.MY 'R') = 458
fromEnum (NationalCurrency Country.MV 'R') = 462
fromEnum (NationalCurrency Country.MT 'L') = 470
fromEnum (NationalCurrency Country.MR 'O') = 478
fromEnum (NationalCurrency Country.MU 'R') = 480
fromEnum (NationalCurrency Country.MX 'N') = 484
fromEnum (NationalCurrency Country.MN 'T') = 496
fromEnum (NationalCurrency Country.MD 'L') = 498
fromEnum (NationalCurrency Country.MA 'D') = 504
fromEnum (NationalCurrency Country.MZ 'M') = 508
fromEnum (NationalCurrency Country.OM 'R') = 512
fromEnum (NationalCurrency Country.NA 'D') = 516
fromEnum (NationalCurrency Country.NP 'R') = 524
fromEnum (NationalCurrency Country.NL 'G') = 528
fromEnum (NationalCurrency Country.AW 'G') = 533
fromEnum (NationalCurrency Country.VU 'V') = 548
fromEnum (NationalCurrency Country.NZ 'D') = 554
fromEnum (NationalCurrency Country.NI 'O') = 558
fromEnum (NationalCurrency Country.NG 'N') = 566
fromEnum (NationalCurrency Country.NO 'K') = 578
fromEnum (NationalCurrency Country.PK 'R') = 586
fromEnum (NationalCurrency Country.PA 'B') = 590
fromEnum (NationalCurrency Country.PG 'K') = 598
fromEnum (NationalCurrency Country.PY 'G') = 600
fromEnum (NationalCurrency Country.PE 'N') = 604
fromEnum (NationalCurrency Country.PH 'P') = 608
fromEnum (NationalCurrency Country.PL 'Z') = 616
fromEnum (NationalCurrency Country.PT 'E') = 620
fromEnum (NationalCurrency Country.GW 'P') = 624
fromEnum (NationalCurrency Country.QA 'R') = 634
fromEnum (NationalCurrency Country.RO 'L') = 642
fromEnum (NationalCurrency Country.RU 'B') = 643
fromEnum (NationalCurrency Country.RW 'F') = 646
fromEnum (NationalCurrency Country.SH 'P') = 654
fromEnum (NationalCurrency Country.ST 'D') = 678
fromEnum (NationalCurrency Country.SA 'R') = 682
fromEnum (NationalCurrency Country.SC 'R') = 690
fromEnum (NationalCurrency Country.SL 'L') = 694
fromEnum (NationalCurrency Country.SG 'D') = 702
fromEnum (NationalCurrency Country.SK 'K') = 703
fromEnum (NationalCurrency Country.VN 'D') = 704
fromEnum (NationalCurrency Country.SI 'T') = 705
fromEnum (NationalCurrency Country.SO 'S') = 706
fromEnum (NationalCurrency Country.ZA 'R') = 710
fromEnum (NationalCurrency Country.ZW 'D') = 716
fromEnum (NationalCurrency Country.ES 'P') = 724
fromEnum (NationalCurrency Country.SS 'P') = 728
fromEnum (NationalCurrency Country.SD 'D') = 736
fromEnum (NationalCurrency Country.SR 'G') = 740
fromEnum (NationalCurrency Country.SZ 'L') = 748
fromEnum (NationalCurrency Country.SE 'K') = 752
fromEnum (NationalCurrency Country.CH 'F') = 756
fromEnum (NationalCurrency Country.SY 'P') = 760
fromEnum (NationalCurrency Country.TJ 'R') = 762
fromEnum (NationalCurrency Country.TH 'B') = 764
fromEnum (NationalCurrency Country.TO 'P') = 776
fromEnum (NationalCurrency Country.TT 'D') = 780
fromEnum (NationalCurrency Country.AE 'D') = 784
fromEnum (NationalCurrency Country.TN 'D') = 788
fromEnum (NationalCurrency Country.TR 'L') = 792
fromEnum (NationalCurrency Country.TM 'M') = 795
fromEnum (NationalCurrency Country.UG 'X') = 800
fromEnum (NationalCurrency Country.UA 'K') = 804
fromEnum (NationalCurrency Country.MK 'D') = 807
fromEnum (NationalCurrency Country.RU 'R') = 810
fromEnum (NationalCurrency Country.EG 'P') = 818
fromEnum (NationalCurrency Country.GB 'P') = 826
fromEnum (NationalCurrency Country.TZ 'S') = 834
fromEnum (NationalCurrency Country.US 'D') = 840
fromEnum (NationalCurrency Country.UY 'U') = 858
fromEnum (NationalCurrency Country.UZ 'S') = 860
fromEnum (NationalCurrency Country.VE 'B') = 862
fromEnum (NationalCurrency Country.WS 'T') = 882
fromEnum (NationalCurrency Country.YE 'R') = 886
fromEnum (NationalCurrency Country.ZM 'K') = 894
fromEnum (NationalCurrency Country.TW 'D') = 901
fromEnum (NationalCurrency Country.CU 'C') = 931
fromEnum (NationalCurrency Country.ZW 'L') = 933
fromEnum (NationalCurrency Country.TM 'T') = 934
fromEnum (NationalCurrency Country.ZW 'R') = 935
fromEnum (NationalCurrency Country.GH 'S') = 936
fromEnum (NationalCurrency Country.VE 'F') = 937
fromEnum (NationalCurrency Country.SD 'G') = 938
fromEnum (NationalCurrency Country.UY 'I') = 940
fromEnum (NationalCurrency Country.RS 'D') = 941
fromEnum (NationalCurrency Country.ZW 'N') = 942
fromEnum (NationalCurrency Country.MZ 'N') = 943
fromEnum (NationalCurrency Country.AZ 'N') = 944
fromEnum (NationalCurrency Country.RO 'N') = 946
fromEnum (NationalCurrency Country.CH 'E') = 947
fromEnum (NationalCurrency Country.CH 'W') = 948
fromEnum (NationalCurrency Country.TR 'Y') = 949
fromEnum (NonNationalCurrency 'A' 'F') = 950
fromEnum (NonNationalCurrency 'C' 'D') = 951
fromEnum (NonNationalCurrency 'O' 'F') = 952
fromEnum (NonNationalCurrency 'P' 'F') = 953
fromEnum (NonNationalCurrency 'E' 'U') = 954
fromEnum (NonNationalCurrency 'B' 'A') = 955
fromEnum (NonNationalCurrency 'B' 'B') = 956
fromEnum (NonNationalCurrency 'B' 'C') = 957
fromEnum (NonNationalCurrency 'B' 'D') = 958
fromEnum (NonNationalCurrency 'A' 'U') = 959
fromEnum (NonNationalCurrency 'D' 'R') = 960
fromEnum (NonNationalCurrency 'A' 'G') = 961
fromEnum (NonNationalCurrency 'P' 'T') = 962
fromEnum (NonNationalCurrency 'T' 'S') = 963
fromEnum (NonNationalCurrency 'P' 'D') = 964
fromEnum (NationalCurrency Country.ZM 'W') = 967
fromEnum (NationalCurrency Country.SR 'D') = 968
fromEnum (NationalCurrency Country.MG 'A') = 969
fromEnum (NationalCurrency Country.CO 'U') = 970
fromEnum (NationalCurrency Country.AF 'N') = 971
fromEnum (NationalCurrency Country.TJ 'S') = 972
fromEnum (NationalCurrency Country.AO 'A') = 973
fromEnum (NationalCurrency Country.BY 'R') = 974
fromEnum (NationalCurrency Country.BG 'N') = 975
fromEnum (NationalCurrency Country.CD 'F') = 976
fromEnum (NationalCurrency Country.BA 'M') = 977
fromEnum (NationalCurrency Country.MX 'V') = 979
fromEnum (NationalCurrency Country.UA 'H') = 980
fromEnum (NationalCurrency Country.GE 'L') = 981
fromEnum (NationalCurrency Country.AO 'R') = 982
fromEnum (NationalCurrency Country.EC 'V') = 983
fromEnum (NationalCurrency Country.BO 'V') = 984
fromEnum (NationalCurrency Country.PL 'N') = 985
fromEnum (NationalCurrency Country.BR 'L') = 986
fromEnum (NationalCurrency Country.CL 'F') = 990
fromEnum (NationalCurrency Country.ZA 'L') = 991
fromEnum (NationalCurrency Country.ES 'B') = 995
fromEnum (NationalCurrency Country.ES 'A') = 996
fromEnum (NationalCurrency Country.US 'N') = 997
fromEnum (NationalCurrency Country.US 'S') = 998
fromEnum (NonNationalCurrency 'X' 'X') = 999
fromEnum _ = error "ISO4217Currency: no currency number found."
toEnum 4 = NationalCurrency Country.AF 'A'
toEnum 8 = NationalCurrency Country.AL 'L'
toEnum 12 = NationalCurrency Country.DZ 'D'
toEnum 20 = NationalCurrency Country.AD 'P'
toEnum 24 = NationalCurrency Country.AO 'N'
toEnum 31 = NationalCurrency Country.AZ 'M'
toEnum 32 = NationalCurrency Country.AR 'S'
toEnum 36 = NationalCurrency Country.AU 'D'
toEnum 40 = NationalCurrency Country.AT 'S'
toEnum 44 = NationalCurrency Country.BS 'D'
toEnum 48 = NationalCurrency Country.BH 'D'
toEnum 50 = NationalCurrency Country.BD 'T'
toEnum 51 = NationalCurrency Country.AM 'D'
toEnum 52 = NationalCurrency Country.BB 'D'
toEnum 56 = NationalCurrency Country.BE 'F'
toEnum 60 = NationalCurrency Country.BM 'D'
toEnum 64 = NationalCurrency Country.BT 'N'
toEnum 68 = NationalCurrency Country.BO 'B'
toEnum 72 = NationalCurrency Country.BW 'P'
toEnum 84 = NationalCurrency Country.BZ 'D'
toEnum 90 = NationalCurrency Country.SB 'D'
toEnum 96 = NationalCurrency Country.BN 'D'
toEnum 100 = NationalCurrency Country.BG 'L'
toEnum 104 = NationalCurrency Country.MM 'K'
toEnum 108 = NationalCurrency Country.BI 'F'
toEnum 116 = NationalCurrency Country.KH 'R'
toEnum 124 = NationalCurrency Country.CA 'D'
toEnum 132 = NationalCurrency Country.CV 'E'
toEnum 136 = NationalCurrency Country.KY 'D'
toEnum 144 = NationalCurrency Country.LK 'R'
toEnum 152 = NationalCurrency Country.CL 'P'
toEnum 156 = NationalCurrency Country.CN 'Y'
toEnum 170 = NationalCurrency Country.CO 'P'
toEnum 174 = NationalCurrency Country.KM 'F'
toEnum 188 = NationalCurrency Country.CR 'C'
toEnum 191 = NationalCurrency Country.HR 'K'
toEnum 192 = NationalCurrency Country.CU 'P'
toEnum 196 = NationalCurrency Country.CY 'P'
toEnum 203 = NationalCurrency Country.CZ 'K'
toEnum 208 = NationalCurrency Country.DK 'K'
toEnum 214 = NationalCurrency Country.DO 'P'
toEnum 218 = NationalCurrency Country.EC 'S'
toEnum 222 = NationalCurrency Country.SV 'C'
toEnum 230 = NationalCurrency Country.ET 'B'
toEnum 232 = NationalCurrency Country.ER 'N'
toEnum 233 = NationalCurrency Country.EE 'K'
toEnum 238 = NationalCurrency Country.FK 'P'
toEnum 242 = NationalCurrency Country.FJ 'D'
toEnum 246 = NationalCurrency Country.FI 'M'
toEnum 250 = NationalCurrency Country.FR 'F'
toEnum 262 = NationalCurrency Country.DJ 'F'
toEnum 270 = NationalCurrency Country.GM 'D'
toEnum 276 = NationalCurrency Country.DE 'M'
toEnum 288 = NationalCurrency Country.GH 'C'
toEnum 292 = NationalCurrency Country.GI 'P'
toEnum 300 = NationalCurrency Country.GR 'D'
toEnum 320 = NationalCurrency Country.GT 'Q'
toEnum 324 = NationalCurrency Country.GN 'F'
toEnum 328 = NationalCurrency Country.GY 'D'
toEnum 332 = NationalCurrency Country.HT 'G'
toEnum 340 = NationalCurrency Country.HN 'L'
toEnum 344 = NationalCurrency Country.HK 'D'
toEnum 348 = NationalCurrency Country.HU 'F'
toEnum 352 = NationalCurrency Country.IS 'K'
toEnum 356 = NationalCurrency Country.IN 'R'
toEnum 360 = NationalCurrency Country.ID 'R'
toEnum 364 = NationalCurrency Country.IR 'R'
toEnum 368 = NationalCurrency Country.IQ 'D'
toEnum 372 = NationalCurrency Country.IE 'P'
toEnum 376 = NationalCurrency Country.IL 'S'
toEnum 380 = NationalCurrency Country.IT 'L'
toEnum 388 = NationalCurrency Country.JM 'D'
toEnum 392 = NationalCurrency Country.JP 'Y'
toEnum 398 = NationalCurrency Country.KZ 'T'
toEnum 400 = NationalCurrency Country.JO 'D'
toEnum 404 = NationalCurrency Country.KE 'S'
toEnum 408 = NationalCurrency Country.KP 'W'
toEnum 410 = NationalCurrency Country.KR 'W'
toEnum 414 = NationalCurrency Country.KW 'D'
toEnum 417 = NationalCurrency Country.KG 'S'
toEnum 418 = NationalCurrency Country.LA 'K'
toEnum 422 = NationalCurrency Country.LB 'P'
toEnum 426 = NationalCurrency Country.LS 'L'
toEnum 428 = NationalCurrency Country.LV 'L'
toEnum 430 = NationalCurrency Country.LR 'D'
toEnum 434 = NationalCurrency Country.LY 'D'
toEnum 440 = NationalCurrency Country.LT 'L'
toEnum 442 = NationalCurrency Country.LU 'F'
toEnum 446 = NationalCurrency Country.MO 'P'
toEnum 450 = NationalCurrency Country.MG 'F'
toEnum 454 = NationalCurrency Country.MW 'K'
toEnum 458 = NationalCurrency Country.MY 'R'
toEnum 462 = NationalCurrency Country.MV 'R'
toEnum 470 = NationalCurrency Country.MT 'L'
toEnum 478 = NationalCurrency Country.MR 'O'
toEnum 480 = NationalCurrency Country.MU 'R'
toEnum 484 = NationalCurrency Country.MX 'N'
toEnum 496 = NationalCurrency Country.MN 'T'
toEnum 498 = NationalCurrency Country.MD 'L'
toEnum 504 = NationalCurrency Country.MA 'D'
toEnum 508 = NationalCurrency Country.MZ 'M'
toEnum 512 = NationalCurrency Country.OM 'R'
toEnum 516 = NationalCurrency Country.NA 'D'
toEnum 524 = NationalCurrency Country.NP 'R'
toEnum 528 = NationalCurrency Country.NL 'G'
toEnum 533 = NationalCurrency Country.AW 'G'
toEnum 548 = NationalCurrency Country.VU 'V'
toEnum 554 = NationalCurrency Country.NZ 'D'
toEnum 558 = NationalCurrency Country.NI 'O'
toEnum 566 = NationalCurrency Country.NG 'N'
toEnum 578 = NationalCurrency Country.NO 'K'
toEnum 586 = NationalCurrency Country.PK 'R'
toEnum 590 = NationalCurrency Country.PA 'B'
toEnum 598 = NationalCurrency Country.PG 'K'
toEnum 600 = NationalCurrency Country.PY 'G'
toEnum 604 = NationalCurrency Country.PE 'N'
toEnum 608 = NationalCurrency Country.PH 'P'
toEnum 616 = NationalCurrency Country.PL 'Z'
toEnum 620 = NationalCurrency Country.PT 'E'
toEnum 624 = NationalCurrency Country.GW 'P'
toEnum 634 = NationalCurrency Country.QA 'R'
toEnum 642 = NationalCurrency Country.RO 'L'
toEnum 643 = NationalCurrency Country.RU 'B'
toEnum 646 = NationalCurrency Country.RW 'F'
toEnum 654 = NationalCurrency Country.SH 'P'
toEnum 678 = NationalCurrency Country.ST 'D'
toEnum 682 = NationalCurrency Country.SA 'R'
toEnum 690 = NationalCurrency Country.SC 'R'
toEnum 694 = NationalCurrency Country.SL 'L'
toEnum 702 = NationalCurrency Country.SG 'D'
toEnum 703 = NationalCurrency Country.SK 'K'
toEnum 704 = NationalCurrency Country.VN 'D'
toEnum 705 = NationalCurrency Country.SI 'T'
toEnum 706 = NationalCurrency Country.SO 'S'
toEnum 710 = NationalCurrency Country.ZA 'R'
toEnum 716 = NationalCurrency Country.ZW 'D'
toEnum 724 = NationalCurrency Country.ES 'P'
toEnum 728 = NationalCurrency Country.SS 'P'
toEnum 736 = NationalCurrency Country.SD 'D'
toEnum 740 = NationalCurrency Country.SR 'G'
toEnum 748 = NationalCurrency Country.SZ 'L'
toEnum 752 = NationalCurrency Country.SE 'K'
toEnum 756 = NationalCurrency Country.CH 'F'
toEnum 760 = NationalCurrency Country.SY 'P'
toEnum 762 = NationalCurrency Country.TJ 'R'
toEnum 764 = NationalCurrency Country.TH 'B'
toEnum 776 = NationalCurrency Country.TO 'P'
toEnum 780 = NationalCurrency Country.TT 'D'
toEnum 784 = NationalCurrency Country.AE 'D'
toEnum 788 = NationalCurrency Country.TN 'D'
toEnum 792 = NationalCurrency Country.TR 'L'
toEnum 795 = NationalCurrency Country.TM 'M'
toEnum 800 = NationalCurrency Country.UG 'X'
toEnum 804 = NationalCurrency Country.UA 'K'
toEnum 807 = NationalCurrency Country.MK 'D'
toEnum 810 = NationalCurrency Country.RU 'R'
toEnum 818 = NationalCurrency Country.EG 'P'
toEnum 826 = NationalCurrency Country.GB 'P'
toEnum 834 = NationalCurrency Country.TZ 'S'
toEnum 840 = NationalCurrency Country.US 'D'
toEnum 858 = NationalCurrency Country.UY 'U'
toEnum 860 = NationalCurrency Country.UZ 'S'
toEnum 862 = NationalCurrency Country.VE 'B'
toEnum 882 = NationalCurrency Country.WS 'T'
toEnum 886 = NationalCurrency Country.YE 'R'
toEnum 894 = NationalCurrency Country.ZM 'K'
toEnum 901 = NationalCurrency Country.TW 'D'
toEnum 931 = NationalCurrency Country.CU 'C'
toEnum 933 = NationalCurrency Country.ZW 'L'
toEnum 934 = NationalCurrency Country.TM 'T'
toEnum 935 = NationalCurrency Country.ZW 'R'
toEnum 936 = NationalCurrency Country.GH 'S'
toEnum 937 = NationalCurrency Country.VE 'F'
toEnum 938 = NationalCurrency Country.SD 'G'
toEnum 940 = NationalCurrency Country.UY 'I'
toEnum 941 = NationalCurrency Country.RS 'D'
toEnum 942 = NationalCurrency Country.ZW 'N'
toEnum 943 = NationalCurrency Country.MZ 'N'
toEnum 944 = NationalCurrency Country.AZ 'N'
toEnum 946 = NationalCurrency Country.RO 'N'
toEnum 947 = NationalCurrency Country.CH 'E'
toEnum 948 = NationalCurrency Country.CH 'W'
toEnum 949 = NationalCurrency Country.TR 'Y'
toEnum 950 = NonNationalCurrency 'A' 'F'
toEnum 951 = NonNationalCurrency 'C' 'D'
toEnum 952 = NonNationalCurrency 'O' 'F'
toEnum 953 = NonNationalCurrency 'P' 'F'
toEnum 954 = NonNationalCurrency 'E' 'U'
toEnum 955 = NonNationalCurrency 'B' 'A'
toEnum 956 = NonNationalCurrency 'B' 'B'
toEnum 957 = NonNationalCurrency 'B' 'C'
toEnum 958 = NonNationalCurrency 'B' 'D'
toEnum 959 = NonNationalCurrency 'A' 'U'
toEnum 960 = NonNationalCurrency 'D' 'R'
toEnum 961 = NonNationalCurrency 'A' 'G'
toEnum 962 = NonNationalCurrency 'P' 'T'
toEnum 963 = NonNationalCurrency 'T' 'S'
toEnum 964 = NonNationalCurrency 'P' 'D'
toEnum 967 = NationalCurrency Country.ZM 'W'
toEnum 968 = NationalCurrency Country.SR 'D'
toEnum 969 = NationalCurrency Country.MG 'A'
toEnum 970 = NationalCurrency Country.CO 'U'
toEnum 971 = NationalCurrency Country.AF 'N'
toEnum 972 = NationalCurrency Country.TJ 'S'
toEnum 973 = NationalCurrency Country.AO 'A'
toEnum 974 = NationalCurrency Country.BY 'R'
toEnum 975 = NationalCurrency Country.BG 'N'
toEnum 976 = NationalCurrency Country.CD 'F'
toEnum 977 = NationalCurrency Country.BA 'M'
toEnum 979 = NationalCurrency Country.MX 'V'
toEnum 980 = NationalCurrency Country.UA 'H'
toEnum 981 = NationalCurrency Country.GE 'L'
toEnum 982 = NationalCurrency Country.AO 'R'
toEnum 983 = NationalCurrency Country.EC 'V'
toEnum 984 = NationalCurrency Country.BO 'V'
toEnum 985 = NationalCurrency Country.PL 'N'
toEnum 986 = NationalCurrency Country.BR 'L'
toEnum 990 = NationalCurrency Country.CL 'F'
toEnum 991 = NationalCurrency Country.ZA 'L'
toEnum 995 = NationalCurrency Country.ES 'B'
toEnum 996 = NationalCurrency Country.ES 'A'
toEnum 997 = NationalCurrency Country.US 'N'
toEnum 998 = NationalCurrency Country.US 'S'
toEnum 999 = NonNationalCurrency 'X' 'X'
toEnum _ = error "ISO4217Currency: no currency found for that number."
class MinorUnits a where
minorUnits :: a -> Maybe Int
instance MinorUnits Currency where
minorUnits (ISO4217Currency isoCurrency) = minorUnits isoCurrency
minorUnits _ = Nothing
instance MinorUnits ISO4217Currency where
minorUnits (NationalCurrency Country.AE 'D') = Just 2
minorUnits (NationalCurrency Country.AF 'N') = Just 2
minorUnits (NationalCurrency Country.AL 'L') = Just 2
minorUnits (NationalCurrency Country.AM 'D') = Just 2
minorUnits (NationalCurrency Country.AO 'A') = Just 2
minorUnits (NationalCurrency Country.AR 'S') = Just 2
minorUnits (NationalCurrency Country.AU 'D') = Just 2
minorUnits (NationalCurrency Country.AW 'G') = Just 2
minorUnits (NationalCurrency Country.AZ 'N') = Just 2
minorUnits (NationalCurrency Country.BA 'M') = Just 2
minorUnits (NationalCurrency Country.BB 'D') = Just 2
minorUnits (NationalCurrency Country.BD 'T') = Just 2
minorUnits (NationalCurrency Country.BG 'N') = Just 2
minorUnits (NationalCurrency Country.BH 'D') = Just 3
minorUnits (NationalCurrency Country.BI 'F') = Just 0
minorUnits (NationalCurrency Country.BM 'D') = Just 2
minorUnits (NationalCurrency Country.BN 'D') = Just 2
minorUnits (NationalCurrency Country.BO 'B') = Just 2
minorUnits (NationalCurrency Country.BO 'V') = Just 2
minorUnits (NationalCurrency Country.BR 'L') = Just 2
minorUnits (NationalCurrency Country.BS 'D') = Just 2
minorUnits (NationalCurrency Country.BT 'N') = Just 2
minorUnits (NationalCurrency Country.BW 'P') = Just 2
minorUnits (NationalCurrency Country.BY 'R') = Just 0
minorUnits (NationalCurrency Country.BZ 'D') = Just 2
minorUnits (NationalCurrency Country.CA 'D') = Just 2
minorUnits (NationalCurrency Country.CD 'F') = Just 2
minorUnits (NationalCurrency Country.CH 'E') = Just 2
minorUnits (NationalCurrency Country.CH 'F') = Just 2
minorUnits (NationalCurrency Country.CH 'W') = Just 2
minorUnits (NationalCurrency Country.CL 'F') = Just 0
minorUnits (NationalCurrency Country.CL 'P') = Just 0
minorUnits (NationalCurrency Country.CN 'Y') = Just 2
minorUnits (NationalCurrency Country.CO 'P') = Just 2
minorUnits (NationalCurrency Country.CO 'U') = Just 2
minorUnits (NationalCurrency Country.CR 'C') = Just 2
minorUnits (NationalCurrency Country.CU 'C') = Just 2
minorUnits (NationalCurrency Country.CU 'P') = Just 2
minorUnits (NationalCurrency Country.CV 'E') = Just 0
minorUnits (NationalCurrency Country.CZ 'K') = Just 2
minorUnits (NationalCurrency Country.DJ 'F') = Just 0
minorUnits (NationalCurrency Country.DK 'K') = Just 2
minorUnits (NationalCurrency Country.DO 'P') = Just 2
minorUnits (NationalCurrency Country.DZ 'D') = Just 2
minorUnits (NationalCurrency Country.EG 'P') = Just 2
minorUnits (NationalCurrency Country.ER 'N') = Just 2
minorUnits (NationalCurrency Country.ET 'B') = Just 2
minorUnits (NationalCurrency Country.FJ 'D') = Just 2
minorUnits (NationalCurrency Country.FK 'P') = Just 2
minorUnits (NationalCurrency Country.GB 'P') = Just 2
minorUnits (NationalCurrency Country.GE 'L') = Just 2
minorUnits (NationalCurrency Country.GH 'S') = Just 2
minorUnits (NationalCurrency Country.GI 'P') = Just 2
minorUnits (NationalCurrency Country.GM 'D') = Just 2
minorUnits (NationalCurrency Country.GN 'F') = Just 0
minorUnits (NationalCurrency Country.GT 'Q') = Just 2
minorUnits (NationalCurrency Country.GY 'D') = Just 2
minorUnits (NationalCurrency Country.HK 'D') = Just 2
minorUnits (NationalCurrency Country.HN 'L') = Just 2
minorUnits (NationalCurrency Country.HR 'K') = Just 2
minorUnits (NationalCurrency Country.HT 'G') = Just 2
minorUnits (NationalCurrency Country.HU 'F') = Just 2
minorUnits (NationalCurrency Country.ID 'R') = Just 0
minorUnits (NationalCurrency Country.IL 'S') = Just 2
minorUnits (NationalCurrency Country.IN 'R') = Just 2
minorUnits (NationalCurrency Country.IQ 'D') = Just 3
minorUnits (NationalCurrency Country.IR 'R') = Just 0
minorUnits (NationalCurrency Country.IS 'K') = Just 0
minorUnits (NationalCurrency Country.JM 'D') = Just 2
minorUnits (NationalCurrency Country.JO 'D') = Just 3
minorUnits (NationalCurrency Country.JP 'Y') = Just 0
minorUnits (NationalCurrency Country.KE 'S') = Just 2
minorUnits (NationalCurrency Country.KG 'S') = Just 2
minorUnits (NationalCurrency Country.KH 'R') = Just 2
minorUnits (NationalCurrency Country.KM 'F') = Just 0
minorUnits (NationalCurrency Country.KP 'W') = Just 0
minorUnits (NationalCurrency Country.KR 'W') = Just 0
minorUnits (NationalCurrency Country.KW 'D') = Just 3
minorUnits (NationalCurrency Country.KY 'D') = Just 2
minorUnits (NationalCurrency Country.KZ 'T') = Just 2
minorUnits (NationalCurrency Country.LA 'K') = Just 0
minorUnits (NationalCurrency Country.LB 'P') = Just 0
minorUnits (NationalCurrency Country.LK 'R') = Just 2
minorUnits (NationalCurrency Country.LR 'D') = Just 2
minorUnits (NationalCurrency Country.LS 'L') = Just 2
minorUnits (NationalCurrency Country.LT 'L') = Just 2
minorUnits (NationalCurrency Country.LV 'L') = Just 2
minorUnits (NationalCurrency Country.LY 'D') = Just 3
minorUnits (NationalCurrency Country.MA 'D') = Just 2
minorUnits (NationalCurrency Country.MD 'L') = Just 2
minorUnits (NationalCurrency Country.MG 'A') = Just 0
minorUnits (NationalCurrency Country.MK 'D') = Just 0
minorUnits (NationalCurrency Country.MM 'K') = Just 0
minorUnits (NationalCurrency Country.MN 'T') = Just 2
minorUnits (NationalCurrency Country.MO 'P') = Just 2
minorUnits (NationalCurrency Country.MR 'O') = Just 0
minorUnits (NationalCurrency Country.MU 'R') = Just 2
minorUnits (NationalCurrency Country.MV 'R') = Just 2
minorUnits (NationalCurrency Country.MW 'K') = Just 2
minorUnits (NationalCurrency Country.MX 'N') = Just 2
minorUnits (NationalCurrency Country.MX 'V') = Just 2
minorUnits (NationalCurrency Country.MY 'R') = Just 2
minorUnits (NationalCurrency Country.MZ 'N') = Just 2
minorUnits (NationalCurrency Country.NA 'D') = Just 2
minorUnits (NationalCurrency Country.NG 'N') = Just 2
minorUnits (NationalCurrency Country.NI 'O') = Just 2
minorUnits (NationalCurrency Country.NO 'K') = Just 2
minorUnits (NationalCurrency Country.NP 'R') = Just 2
minorUnits (NationalCurrency Country.NZ 'D') = Just 2
minorUnits (NationalCurrency Country.OM 'R') = Just 3
minorUnits (NationalCurrency Country.PA 'B') = Just 2
minorUnits (NationalCurrency Country.PE 'N') = Just 2
minorUnits (NationalCurrency Country.PG 'K') = Just 2
minorUnits (NationalCurrency Country.PH 'P') = Just 2
minorUnits (NationalCurrency Country.PK 'R') = Just 2
minorUnits (NationalCurrency Country.PL 'N') = Just 2
minorUnits (NationalCurrency Country.PY 'G') = Just 0
minorUnits (NationalCurrency Country.QA 'R') = Just 2
minorUnits (NationalCurrency Country.RO 'N') = Just 2
minorUnits (NationalCurrency Country.RS 'D') = Just 2
minorUnits (NationalCurrency Country.RU 'B') = Just 2
minorUnits (NationalCurrency Country.RW 'F') = Just 0
minorUnits (NationalCurrency Country.SA 'R') = Just 2
minorUnits (NationalCurrency Country.SB 'D') = Just 2
minorUnits (NationalCurrency Country.SC 'R') = Just 2
minorUnits (NationalCurrency Country.SD 'G') = Just 2
minorUnits (NationalCurrency Country.SE 'K') = Just 2
minorUnits (NationalCurrency Country.SG 'D') = Just 2
minorUnits (NationalCurrency Country.SH 'P') = Just 2
minorUnits (NationalCurrency Country.SL 'L') = Just 0
minorUnits (NationalCurrency Country.SO 'S') = Just 2
minorUnits (NationalCurrency Country.SR 'D') = Just 2
minorUnits (NationalCurrency Country.SS 'P') = Just 2
minorUnits (NationalCurrency Country.ST 'D') = Just 0
minorUnits (NationalCurrency Country.SY 'P') = Just 2
minorUnits (NationalCurrency Country.SZ 'L') = Just 2
minorUnits (NationalCurrency Country.TH 'B') = Just 2
minorUnits (NationalCurrency Country.TJ 'S') = Just 2
minorUnits (NationalCurrency Country.TM 'T') = Just 2
minorUnits (NationalCurrency Country.TN 'D') = Just 3
minorUnits (NationalCurrency Country.TO 'P') = Just 2
minorUnits (NationalCurrency Country.TR 'Y') = Just 2
minorUnits (NationalCurrency Country.TT 'D') = Just 2
minorUnits (NationalCurrency Country.TW 'D') = Just 2
minorUnits (NationalCurrency Country.TZ 'S') = Just 2
minorUnits (NationalCurrency Country.UA 'H') = Just 2
minorUnits (NationalCurrency Country.UG 'X') = Just 2
minorUnits (NationalCurrency Country.US 'D') = Just 2
minorUnits (NationalCurrency Country.US 'N') = Just 2
minorUnits (NationalCurrency Country.US 'S') = Just 2
minorUnits (NationalCurrency Country.UY 'I') = Just 0
minorUnits (NationalCurrency Country.UY 'U') = Just 2
minorUnits (NationalCurrency Country.UZ 'S') = Just 2
minorUnits (NationalCurrency Country.VE 'F') = Just 2
minorUnits (NationalCurrency Country.VN 'D') = Just 0
minorUnits (NationalCurrency Country.VU 'V') = Just 0
minorUnits (NationalCurrency Country.WS 'T') = Just 2
minorUnits (NonNationalCurrency 'A' 'F') = Just 0
minorUnits (NonNationalCurrency 'C' 'D') = Just 2
minorUnits (NonNationalCurrency 'O' 'F') = Just 0
minorUnits (NonNationalCurrency 'P' 'F') = Just 0
minorUnits (NationalCurrency Country.YE 'R') = Just 2
minorUnits (NationalCurrency Country.ZA 'R') = Just 2
minorUnits (NationalCurrency Country.ZM 'W') = Just 2
minorUnits (NationalCurrency Country.AD 'F') = Just 2
minorUnits (NationalCurrency Country.AD 'P') = Just 0
minorUnits (NationalCurrency Country.AT 'S') = Just 2
minorUnits (NationalCurrency Country.BE 'F') = Just 1
minorUnits (NationalCurrency Country.CY 'P') = Just 2
minorUnits (NationalCurrency Country.DE 'M') = Just 2
minorUnits (NationalCurrency Country.EE 'K') = Just 2
minorUnits (NationalCurrency Country.ES 'P') = Just 0
minorUnits (NationalCurrency Country.FI 'M') = Just 2
minorUnits (NationalCurrency Country.FR 'F') = Just 2
minorUnits (NationalCurrency Country.GR 'D') = Just 0
minorUnits (NationalCurrency Country.IE 'P') = Just 2
minorUnits (NationalCurrency Country.IT 'L') = Just 0
minorUnits (NationalCurrency Country.LU 'F') = Just 1
minorUnits (NationalCurrency Country.MC 'F') = Just 1
minorUnits (NationalCurrency Country.MA 'F') = Just 0
minorUnits (NationalCurrency Country.MT 'L') = Just 2
minorUnits (NationalCurrency Country.NL 'G') = Just 2
minorUnits (NationalCurrency Country.PT 'E') = Just 0
minorUnits (NationalCurrency Country.SI 'T') = Just 1
minorUnits (NationalCurrency Country.SK 'K') = Just 1
minorUnits (NationalCurrency Country.SM 'L') = Just 0
minorUnits (NationalCurrency Country.VA 'L') = Just 0
minorUnits (NationalCurrency Country.AO 'N') = Just 0
minorUnits (NationalCurrency Country.AO 'R') = Just 0
minorUnits (NationalCurrency Country.AR 'L') = Just 2
minorUnits (NationalCurrency Country.AR 'P') = Just 2
minorUnits (NationalCurrency Country.AR 'A') = Just 2
minorUnits (NationalCurrency Country.AZ 'M') = Just 0
minorUnits (NationalCurrency Country.BG 'L') = Just 2
minorUnits (NationalCurrency Country.BO 'P') = Just 2
minorUnits (NationalCurrency Country.BR 'Z') = Just 2
minorUnits (NationalCurrency Country.BR 'B') = Just 2
minorUnits (NationalCurrency Country.BR 'C') = Just 2
minorUnits (NationalCurrency Country.BR 'N') = Just 2
minorUnits (NationalCurrency Country.BR 'E') = Just 2
minorUnits (NationalCurrency Country.BR 'R') = Just 2
minorUnits (NationalCurrency Country.EC 'S') = Just 0
minorUnits (NationalCurrency Country.GH 'C') = Just 0
minorUnits (NationalCurrency Country.IL 'P') = Just 3
minorUnits (NationalCurrency Country.IL 'R') = Just 2
minorUnits (NationalCurrency Country.IS 'J') = Just 2
minorUnits (NationalCurrency Country.MZ 'M') = Just 0
minorUnits (NationalCurrency Country.NF 'D') = Just 2
minorUnits (NationalCurrency Country.SV 'C') = Just 2
minorUnits (NationalCurrency Country.TM 'M') = Just 0
minorUnits (NationalCurrency Country.TR 'L') = Just 0
minorUnits (NationalCurrency Country.VE 'B') = Just 2
minorUnits (NationalCurrency Country.ZM 'K') = Just 2
minorUnits (NationalCurrency Country.ZW 'C') = Just 2
minorUnits (NationalCurrency Country.ZW 'D') = Just 2
minorUnits (NationalCurrency Country.ZW 'N') = Just 2
minorUnits (NationalCurrency Country.ZW 'R') = Just 2
minorUnits (NationalCurrency Country.ZW 'L') = Just 2
minorUnits _ = Nothing