Purescript library to handle the formatting of dates and times.
1-- SPDX-License-Identifier: MIT
2-- Copyright (C) 2022 Roland Csaszar
3--
4-- Project: purescript-datetimeformat
5-- File: NumberingSystem.purs
6-- Date: 12.Feb.2022
7--
8-- ==============================================================================
9-- | Module Data.NumberingSystem, the type of the numbering system of a locale.
10-- | See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/numberingSystem
11module Data.NumberingSystem
12 ( NumberingSystem(..)
13 , numberingSystemToString
14 , toString
15 ) where
16
17import Prelude
18import Data.Argonaut (class DecodeJson, class EncodeJson)
19import Data.Argonaut.Decode.Generic (genericDecodeJson)
20import Data.Argonaut.Encode.Generic (genericEncodeJson)
21import Data.Generic.Rep (class Generic)
22import Data.Show.Generic (genericShow)
23import Test.QuickCheck (class Arbitrary, arbitrary)
24
25{-------------------------------------------------------------------------------
26| The numbering systems of locales.
27|
28| See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat
29|
30| One of
31| * Adlm - Adlam digits
32| * Ahom - Ahom digits
33| * Arab - Arabic-Indic digits
34| * Arabext - Extended Arabic-Indic digits
35| * Armn - Armenian upper case numerals — algorithmic
36| * Armnlow - Armenian lower case numerals — algorithmic
37| * Bali - Balinese digits
38| * Beng - Bengali digits
39| * Bhks - Bhaiksuki digits
40| * Brah - Brahmi digits
41| * Cakm - Chakma digits
42| * Cham - Cham digits
43| * Cyrl - Cyrillic numerals — algorithmic
44| * Deva - Devanagari digits
45| * Ethi - Ethiopic numerals — algorithmic
46| * Finance - Financial numerals — may be algorithmic
47| * Fullwide - Full width digits
48| * Geor - Georgian numerals — algorithmic
49| * Gong - Gunjala Gondi digits
50| * Gonm - Masaram Gondi digits
51| * Grek - Greek upper case numerals — algorithmic
52| * Greklow - Greek lower case numerals — algorithmic
53| * Gujr - Gujarati digits
54| * Guru - Gurmukhi digits
55| * Hanidays - Han-character day-of-month numbering for lunar/other traditional calendars
56| * Hanidec - Positional decimal system using Chinese number ideographs as digits
57| * Hans - Simplified Chinese numerals — algorithmic
58| * Hansfin - Simplified Chinese financial numerals — algorithmic
59| * Hant - Traditional Chinese numerals — algorithmic
60| * Hantfin - Traditional Chinese financial numerals — algorithmic
61| * Hebr - Hebrew numerals — algorithmic
62| * Hmng - Pahawh Hmong digits
63| * Hmnp - Nyiakeng Puachue Hmong digits
64| * Java - Javanese digits
65| * Jpan - Japanese numerals — algorithmic
66| * Jpanfin - Japanese financial numerals — algorithmic
67| * Jpanyear - Japanese first-year Gannen numbering for Japanese calendar
68| * Kali - Kayah Li digits
69| * Khmr - Khmer digits
70| * Knda - Kannada digits
71| * Lana - Tai Tham Hora (secular) digits
72| * Lanatham - Tai Tham (ecclesiastical) digits
73| * Laoo - Lao digits
74| * Latn - Latin digits
75| * Lepc - Lepcha digits
76| * Limb - Limbu digits
77| * Mathbold - Mathematical bold digits
78| * Mathdbl - Mathematical double-struck digits
79| * Mathmono - Mathematical monospace digits
80| * Mathsanb - Mathematical sans-serif bold digits
81| * Mathsans - Mathematical sans-serif digits
82| * Mlym - Malayalam digits
83| * Modi - Modi digits
84| * Mong - Mongolian digits
85| * Mroo - Mro digits
86| * Mtei - Meetei Mayek digits
87| * Mymr - Myanmar digits
88| * Mymrshan - Myanmar Shan digits
89| * Mymrtlng - Myanmar Tai Laing digits
90| * Native - Native digits
91| * Newa - Newa digits
92| * Nkoo - N'Ko digits
93| * Olck - Ol Chiki digits
94| * Orya - Oriya digits
95| * Osma - Osmanya digits
96| * Rohg - Hanifi Rohingya digits
97| * Roman - Roman upper case numerals — algorithmic
98| * Romanlow - Roman lowercase numerals — algorithmic
99| * Saur - Saurashtra digits
100| * Shrd - Sharada digits
101| * Sind - Khudawadi digits
102| * Sinh - Sinhala Lith digits
103| * Sora - Sora_Sompeng digits
104| * Sund - Sundanese digits
105| * Takr - Takri digits
106| * Talu - New Tai Lue digits
107| * Taml - Tamil numerals — algorithmic
108| * Tamldec - Modern Tamil decimal digits
109| * Telu - Telugu digits
110| * Thai - Thai digits
111| * Tirh - Tirhuta digits
112| * Tibt - Tibetan digits
113| * Traditio - Traditional numerals — may be algorithmic
114| * Vaii - Vai digits
115| * Wara - Warang Citi digits
116| * Wcho - Wancho digits
117-}
118data NumberingSystem
119 = Adlm
120 | Ahom
121 | Arab
122 | Arabext
123 | Armn
124 | Armnlow
125 | Bali
126 | Beng
127 | Bhks
128 | Brah
129 | Cakm
130 | Cham
131 | Cyrl
132 | Deva
133 | Ethi
134 | Finance
135 | Fullwide
136 | Geor
137 | Gong
138 | Gonm
139 | Grek
140 | Greklow
141 | Gujr
142 | Guru
143 | Hanidays
144 | Hanidec
145 | Hans
146 | Hansfin
147 | Hant
148 | Hantfin
149 | Hebr
150 | Hmng
151 | Hmnp
152 | Java
153 | Jpan
154 | Jpanfin
155 | Jpanyear
156 | Kali
157 | Khmr
158 | Knda
159 | Lana
160 | Lanatham
161 | Laoo
162 | Latn
163 | Lepc
164 | Limb
165 | Mathbold
166 | Mathdbl
167 | Mathmono
168 | Mathsanb
169 | Mathsans
170 | Mlym
171 | Modi
172 | Mong
173 | Mroo
174 | Mtei
175 | Mymr
176 | Mymrshan
177 | Mymrtlng
178 | Native
179 | Newa
180 | Nkoo
181 | Olck
182 | Orya
183 | Osma
184 | Rohg
185 | Roman
186 | Romanlow
187 | Saur
188 | Shrd
189 | Sind
190 | Sinh
191 | Sora
192 | Sund
193 | Takr
194 | Talu
195 | Taml
196 | Tamldec
197 | Telu
198 | Thai
199 | Tirh
200 | Tibt
201 | Traditio
202 | Vaii
203 | Wara
204 | Wcho
205
206derive instance eqNumberingSystem :: Eq NumberingSystem
207
208derive instance ordNumberingSystem :: Ord NumberingSystem
209
210derive instance genericNumberingSystem :: Generic NumberingSystem _
211
212instance decodeJsonNumberingSystem :: DecodeJson NumberingSystem where
213 decodeJson = genericDecodeJson
214
215instance encodeJsonNumberingSystem :: EncodeJson NumberingSystem where
216 encodeJson = genericEncodeJson
217
218instance showNumberingSystem :: Show NumberingSystem where
219 show = genericShow
220
221{-------------------------------------------------------------------------------
222 ATTENTION: 86 is the number of values of `NumberingSystem`.
223-}
224instance arbitraryNumberingSystem :: Arbitrary NumberingSystem where
225 arbitrary = map intToNumberingSystem arbitrary
226 where
227 intToNumberingSystem :: Int -> NumberingSystem
228 intToNumberingSystem n
229 | n >= 0 = case n `mod` 86 of
230 0 -> Adlm
231 1 -> Ahom
232 2 -> Arab
233 3 -> Arabext
234 4 -> Armn
235 5 -> Armnlow
236 6 -> Bali
237 7 -> Beng
238 8 -> Bhks
239 9 -> Brah
240 10 -> Cakm
241 11 -> Cham
242 12 -> Cyrl
243 13 -> Deva
244 14 -> Ethi
245 15 -> Finance
246 16 -> Fullwide
247 17 -> Geor
248 18 -> Gong
249 19 -> Gonm
250 20 -> Grek
251 21 -> Greklow
252 22 -> Gujr
253 23 -> Guru
254 24 -> Hanidays
255 25 -> Hanidec
256 26 -> Hans
257 27 -> Hansfin
258 28 -> Hant
259 29 -> Hantfin
260 30 -> Hebr
261 31 -> Hmng
262 32 -> Hmnp
263 33 -> Java
264 34 -> Jpan
265 35 -> Jpanfin
266 36 -> Jpanyear
267 37 -> Kali
268 38 -> Khmr
269 39 -> Knda
270 40 -> Lana
271 41 -> Lanatham
272 42 -> Laoo
273 43 -> Latn
274 44 -> Lepc
275 45 -> Limb
276 46 -> Mathbold
277 47 -> Mathdbl
278 48 -> Mathmono
279 49 -> Mathsanb
280 50 -> Mathsans
281 51 -> Mlym
282 52 -> Modi
283 53 -> Mong
284 54 -> Mroo
285 55 -> Mtei
286 56 -> Mymr
287 57 -> Mymrshan
288 58 -> Mymrtlng
289 59 -> Native
290 60 -> Newa
291 61 -> Nkoo
292 62 -> Olck
293 63 -> Orya
294 64 -> Osma
295 65 -> Rohg
296 66 -> Roman
297 67 -> Romanlow
298 68 -> Saur
299 69 -> Shrd
300 70 -> Sind
301 71 -> Sinh
302 72 -> Sora
303 73 -> Sund
304 74 -> Takr
305 75 -> Talu
306 76 -> Taml
307 77 -> Tamldec
308 78 -> Telu
309 79 -> Thai
310 80 -> Tirh
311 81 -> Tibt
312 82 -> Traditio
313 83 -> Vaii
314 84 -> Wara
315 _ -> Wcho
316 | otherwise = intToNumberingSystem (-n)
317
318{-------------------------------------------------------------------------------
319| Return the string representation of a `NumberingSystem`.
320|
321| A shorter alias of `numberingSystemToString`.
322-}
323toString ∷ NumberingSystem → String
324toString = numberingSystemToString
325
326{-------------------------------------------------------------------------------
327| Return the string representation of a `NumberingSystem`.
328-}
329numberingSystemToString :: NumberingSystem -> String
330numberingSystemToString Adlm = "adlm"
331
332numberingSystemToString Ahom = "ahom"
333
334numberingSystemToString Arab = "arab"
335
336numberingSystemToString Arabext = "arabext"
337
338numberingSystemToString Armn = "armn"
339
340numberingSystemToString Armnlow = "armnlow"
341
342numberingSystemToString Bali = "bali"
343
344numberingSystemToString Beng = "beng"
345
346numberingSystemToString Bhks = "bhks"
347
348numberingSystemToString Brah = "brah"
349
350numberingSystemToString Cakm = "cakm"
351
352numberingSystemToString Cham = "cham"
353
354numberingSystemToString Cyrl = "cyrl"
355
356numberingSystemToString Deva = "deva"
357
358numberingSystemToString Ethi = "ethi"
359
360numberingSystemToString Finance = "finance"
361
362numberingSystemToString Fullwide = "fullwide"
363
364numberingSystemToString Geor = "geor"
365
366numberingSystemToString Gong = "gong"
367
368numberingSystemToString Gonm = "gonm"
369
370numberingSystemToString Grek = "grek"
371
372numberingSystemToString Greklow = "greklow"
373
374numberingSystemToString Gujr = "gujr"
375
376numberingSystemToString Guru = "guru"
377
378numberingSystemToString Hanidays = "hanidays"
379
380numberingSystemToString Hanidec = "hanidec"
381
382numberingSystemToString Hans = "hans"
383
384numberingSystemToString Hansfin = "hansfin"
385
386numberingSystemToString Hant = "hant"
387
388numberingSystemToString Hantfin = "hantfin"
389
390numberingSystemToString Hebr = "hebr"
391
392numberingSystemToString Hmng = "hmng"
393
394numberingSystemToString Hmnp = "hmnp"
395
396numberingSystemToString Java = "java"
397
398numberingSystemToString Jpan = "jpan"
399
400numberingSystemToString Jpanfin = "jpanfin"
401
402numberingSystemToString Jpanyear = "jpanyear"
403
404numberingSystemToString Kali = "kali"
405
406numberingSystemToString Khmr = "khmr"
407
408numberingSystemToString Knda = "knda"
409
410numberingSystemToString Lana = "lana"
411
412numberingSystemToString Lanatham = "lanatham"
413
414numberingSystemToString Laoo = "laoo"
415
416numberingSystemToString Latn = "latn"
417
418numberingSystemToString Lepc = "lepc"
419
420numberingSystemToString Limb = "limb"
421
422numberingSystemToString Mathbold = "mathbold"
423
424numberingSystemToString Mathdbl = "mathdbl"
425
426numberingSystemToString Mathmono = "mathmono"
427
428numberingSystemToString Mathsanb = "mathsanb"
429
430numberingSystemToString Mathsans = "mathsans"
431
432numberingSystemToString Mlym = "mlym"
433
434numberingSystemToString Modi = "modi"
435
436numberingSystemToString Mong = "mong"
437
438numberingSystemToString Mroo = "mroo"
439
440numberingSystemToString Mtei = "mtei"
441
442numberingSystemToString Mymr = "mymr"
443
444numberingSystemToString Mymrshan = "mymrshan"
445
446numberingSystemToString Mymrtlng = "mymrtlng"
447
448numberingSystemToString Native = "native"
449
450numberingSystemToString Newa = "newa"
451
452numberingSystemToString Nkoo = "nkoo"
453
454numberingSystemToString Olck = "olck"
455
456numberingSystemToString Orya = "orya"
457
458numberingSystemToString Osma = "osma"
459
460numberingSystemToString Rohg = "rohg"
461
462numberingSystemToString Roman = "roman"
463
464numberingSystemToString Romanlow = "romanlow"
465
466numberingSystemToString Saur = "saur"
467
468numberingSystemToString Shrd = "shrd"
469
470numberingSystemToString Sind = "sind"
471
472numberingSystemToString Sinh = "sinh"
473
474numberingSystemToString Sora = "sora"
475
476numberingSystemToString Sund = "sund"
477
478numberingSystemToString Takr = "takr"
479
480numberingSystemToString Talu = "talu"
481
482numberingSystemToString Taml = "taml"
483
484numberingSystemToString Tamldec = "tamldec"
485
486numberingSystemToString Telu = "telu"
487
488numberingSystemToString Thai = "thai"
489
490numberingSystemToString Tirh = "tirh"
491
492numberingSystemToString Tibt = "tibt"
493
494numberingSystemToString Traditio = "traditio"
495
496numberingSystemToString Vaii = "vaii"
497
498numberingSystemToString Wara = "wara"
499
500numberingSystemToString Wcho = "wcho"