Purescript library to handle the formatting of dates and times.
at main 500 lines 12 kB view raw
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"