numerals 0.3.0.1 → 0.4
raw patch · 124 files changed
+23946/−947 lines, 124 filesdep +QuickCheckdep +fingertreedep +integer-gmpdep −numerals-basedep ~basedep ~base-unicode-symbolsdep ~containers
Dependencies added: QuickCheck, fingertree, integer-gmp, numerals, test-framework-quickcheck2, text
Dependencies removed: numerals-base
Dependency ranges changed: base, base-unicode-symbols, containers, test-framework, test-framework-hunit
Files
- LICENSE +1/−1
- README.markdown +75/−26
- numerals.cabal +120/−44
- src-test/Text/Numeral/Language/ACH/TestData.hs +191/−0
- src-test/Text/Numeral/Language/ADY/TestData.hs +181/−0
- src-test/Text/Numeral/Language/AF/TestData.hs +129/−0
- src-test/Text/Numeral/Language/AMP/TestData.hs +145/−0
- src-test/Text/Numeral/Language/ARI/TestData.hs +203/−0
- src-test/Text/Numeral/Language/AST/TestData.hs +204/−0
- src-test/Text/Numeral/Language/AZ/TestData.hs +206/−0
- src-test/Text/Numeral/Language/BA/TestData.hs +180/−0
- src-test/Text/Numeral/Language/BG/TestData.hs +237/−0
- src-test/Text/Numeral/Language/BM/TestData.hs +203/−0
- src-test/Text/Numeral/Language/CA/TestData.hs +217/−0
- src-test/Text/Numeral/Language/CAF/TestData.hs +256/−0
- src-test/Text/Numeral/Language/CBK/TestData.hs +215/−0
- src-test/Text/Numeral/Language/CHN/TestData.hs +140/−0
- src-test/Text/Numeral/Language/CHR/TestData.hs +190/−0
- src-test/Text/Numeral/Language/CLM/TestData.hs +151/−0
- src-test/Text/Numeral/Language/CO/TestData.hs +225/−0
- src-test/Text/Numeral/Language/COD/TestData.hs +180/−0
- src-test/Text/Numeral/Language/COO/TestData.hs +144/−0
- src-test/Text/Numeral/Language/CS/TestData.hs +212/−0
- src-test/Text/Numeral/Language/CY/TestData.hs +178/−0
- src-test/Text/Numeral/Language/DE/TestData.hs +475/−0
- src-test/Text/Numeral/Language/DJK/TestData.hs +203/−0
- src-test/Text/Numeral/Language/EN/TestData.hs +380/−0
- src-test/Text/Numeral/Language/EO/TestData.hs +142/−0
- src-test/Text/Numeral/Language/ES/TestData.hs +280/−0
- src-test/Text/Numeral/Language/ET/TestData.hs +220/−0
- src-test/Text/Numeral/Language/FI/TestData.hs +1827/−0
- src-test/Text/Numeral/Language/FO/TestData.hs +225/−0
- src-test/Text/Numeral/Language/FR/TestData.hs +371/−0
- src-test/Text/Numeral/Language/FUR/TestData.hs +199/−0
- src-test/Text/Numeral/Language/GCF_MTQ/TestData.hs +205/−0
- src-test/Text/Numeral/Language/GIL/TestData.hs +225/−0
- src-test/Text/Numeral/Language/GL/TestData.hs +235/−0
- src-test/Text/Numeral/Language/GSW/TestData.hs +148/−0
- src-test/Text/Numeral/Language/GV/TestData.hs +158/−0
- src-test/Text/Numeral/Language/HAI/TestData.hs +228/−0
- src-test/Text/Numeral/Language/HE/TestData.hs +315/−0
- src-test/Text/Numeral/Language/HOP/TestData.hs +143/−0
- src-test/Text/Numeral/Language/HR/TestData.hs +142/−0
- src-test/Text/Numeral/Language/HU/TestData.hs +142/−0
- src-test/Text/Numeral/Language/HY/TestData.hs +208/−0
- src-test/Text/Numeral/Language/IT/TestData.hs +295/−0
- src-test/Text/Numeral/Language/JA/TestData.hs +217/−0
- src-test/Text/Numeral/Language/KAP/TestData.hs +169/−0
- src-test/Text/Numeral/Language/KEA/TestData.hs +207/−0
- src-test/Text/Numeral/Language/LA/TestData.hs +148/−0
- src-test/Text/Numeral/Language/LLD/TestData.hs +155/−0
- src-test/Text/Numeral/Language/MG/TestData.hs +162/−0
- src-test/Text/Numeral/Language/MOH/TestData.hs +202/−0
- src-test/Text/Numeral/Language/NL/TestData.hs +380/−0
- src-test/Text/Numeral/Language/NO/TestData.hs +170/−0
- src-test/Text/Numeral/Language/NQM/TestData.hs +141/−0
- src-test/Text/Numeral/Language/OJ/TestData.hs +159/−0
- src-test/Text/Numeral/Language/PAA/TestData.hs +140/−0
- src-test/Text/Numeral/Language/PDC/TestData.hs +170/−0
- src-test/Text/Numeral/Language/PL/TestData.hs +204/−0
- src-test/Text/Numeral/Language/PT/TestData.hs +302/−0
- src-test/Text/Numeral/Language/RMN_DZA/TestData.hs +204/−0
- src-test/Text/Numeral/Language/RO/TestData.hs +144/−0
- src-test/Text/Numeral/Language/RU/TestData.hs +192/−0
- src-test/Text/Numeral/Language/SCO/TestData.hs +146/−0
- src-test/Text/Numeral/Language/SV/TestData.hs +308/−0
- src-test/Text/Numeral/Language/TAR/TestData.hs +147/−0
- src-test/Text/Numeral/Language/TR/TestData.hs +262/−0
- src-test/Text/Numeral/Language/WO/TestData.hs +174/−0
- src-test/Text/Numeral/Language/YOR/TestData.hs +151/−0
- src-test/Text/Numeral/Language/ZAQ/TestData.hs +167/−0
- src-test/Text/Numeral/Language/ZH/TestData.hs +349/−0
- src-test/Text/Numeral/Language/ZPC/TestData.hs +167/−0
- src-test/Text/Numeral/Test.hs +11/−0
- src-test/test.hs +675/−0
- src/Text/Numeral.hs +72/−0
- src/Text/Numeral/BigNum.hs +153/−0
- src/Text/Numeral/Entry.hs +56/−0
- src/Text/Numeral/Exp.hs +144/−0
- src/Text/Numeral/Exp/Reified.hs +111/−0
- src/Text/Numeral/Grammar.hs +329/−0
- src/Text/Numeral/Grammar/Reified.hs +277/−0
- src/Text/Numeral/Language/AF.hs +207/−0
- src/Text/Numeral/Language/AMP.hs +33/−19
- src/Text/Numeral/Language/BG.hs +185/−0
- src/Text/Numeral/Language/CHN.hs +37/−16
- src/Text/Numeral/Language/CHR.hs +244/−0
- src/Text/Numeral/Language/CLM.hs +115/−0
- src/Text/Numeral/Language/CS.hs +154/−0
- src/Text/Numeral/Language/DE.hs +161/−62
- src/Text/Numeral/Language/EN.hs +197/−77
- src/Text/Numeral/Language/EO.hs +37/−15
- src/Text/Numeral/Language/ES.hs +78/−38
- src/Text/Numeral/Language/Entries.hs +117/−0
- src/Text/Numeral/Language/FI.hs +960/−0
- src/Text/Numeral/Language/FR.hs +175/−64
- src/Text/Numeral/Language/FUR.hs +145/−0
- src/Text/Numeral/Language/GSW.hs +126/−0
- src/Text/Numeral/Language/GV.hs +36/−21
- src/Text/Numeral/Language/HE.hs +172/−0
- src/Text/Numeral/Language/HOP.hs +128/−0
- src/Text/Numeral/Language/IT.hs +185/−86
- src/Text/Numeral/Language/JA.hs +91/−36
- src/Text/Numeral/Language/LA.hs +36/−20
- src/Text/Numeral/Language/LLD.hs +131/−0
- src/Text/Numeral/Language/MG.hs +36/−21
- src/Text/Numeral/Language/NL.hs +209/−53
- src/Text/Numeral/Language/NO.hs +78/−38
- src/Text/Numeral/Language/NQM.hs +34/−15
- src/Text/Numeral/Language/OJ.hs +38/−21
- src/Text/Numeral/Language/PDC.hs +156/−0
- src/Text/Numeral/Language/PL.hs +165/−0
- src/Text/Numeral/Language/PT.hs +187/−38
- src/Text/Numeral/Language/RU.hs +40/−26
- src/Text/Numeral/Language/SCO.hs +35/−19
- src/Text/Numeral/Language/SV.hs +162/−50
- src/Text/Numeral/Language/TR.hs +46/−39
- src/Text/Numeral/Language/WO.hs +39/−22
- src/Text/Numeral/Language/YOR.hs +37/−15
- src/Text/Numeral/Language/ZH.hs +127/−65
- src/Text/Numeral/Misc.hs +49/−0
- src/Text/Numeral/Render.hs +230/−0
- src/Text/Numeral/Render/Utils.hs +41/−0
- src/Text/Numeral/Rules.hs +373/−0
LICENSE view
@@ -1,4 +1,4 @@-Copyright © 2009—2011 Roel van Dijk, Bas van Dijk+Copyright 2009—2014 Roel van Dijk, Bas van Dijk All rights reserved.
README.markdown view
@@ -1,38 +1,74 @@ Numerals ======== -Convert numbers to number words in a number of languages. Each-language has its own module. The module name is based on one of the-ISO 639 Alpha codes. Each module contains one or more `cardinal`-functions and a `struct` function. The `cardinal` functions directly-convert cardinal numbers to a string-like representation of their-spoken form. The `struct` functions convert numbers to a polymorphic-representation of their grammatical structure. All language modules-are implemented using the @numerals-base@ package.+Convert numbers to numerals (number words) in a number of+languages. Each language has its own module. The module name is based+on one of the ISO 639 Alpha codes. Each module contains one or more+functions to convert numerical values to numerals. Several types of+numerals are supported. But not every type is supported by every+language. Some because they do not occur in that language. Others+because they are not yet defined in this package. -The use of this package is best understood with some examples. Because-the results of conversion are polymorphic we need to choose a specific-type. For these examples we'll use simple strings. But any type that-has instances for `Monoid` and `IsString` will work. First some-English number names, both British and US variants:+- Cardinal numerals + Describe quantity - _one_, _two_, _three_, etc.++- Ordinal numerals++ Describe position in a sequential order - _first_, _second_,+ _third_, etc.++- Partitive numerals++ Describe division into fractions - _two thirds_, _three quarters_.++- Multiplicative numerals++ Describe repetition, how many time - _once_, _twice_, _thrice_.++### Inflection++In some languages number words are modified based on a number of+grammatical categories such as _gender_ or _number_. For instance, in+Spanish, the numeral for the quantity '1' can be one of _uno_, _un_ or+_una_ depending on whether it is of the neuter, masculine or feminine+gender. In order to support this process every conversion function+takes an inflection parameter which defines the grammatical state.++Inflections are not concrete types, but polymorphic parameters+constrained by type classes. Use the reified inflection type provided+by the `numerals-base` package to get a concrete value:++ >>> import Text.Numeral.Grammar.Reified ( defaultInflection )++### Numeral structure++The `struct` functions convert numbers to a polymorphic representation+of their grammatical structure. They are found in every language+module.++### Examples++The use of this package is best understood with some examples. First+some English number names, both British and US variants:+ >>> import qualified Text.Numeral.Language.EN as EN- >>> EN.uk_cardinal 123 :: Maybe String+ >>> EN.uk_cardinal defaultInflection 123 :: Maybe Text Just "one hundred and twenty-three"- >>> EN.us_cardinal (10^50 + 42) :: Maybe String+ >>> EN.us_cardinal defaultInflection (10^50 + 42) :: Maybe Text Just "one hundred quindecillion forty-two" French, which contains some traces of a base 20 system: >>> import qualified Text.Numeral.Language.FR as FR- >>> FR.cardinal (-99) :: Maybe String+ >>> FR.cardinal defaultInflection (-99) :: Maybe Text Just "moins quatre-vingt-dix-neuf" Conversions can fail. Alamblak, a language spoken by a few people in Papua New Guinea, has no representation for negative numbers: >>> import qualified Text.Numeral.Language.AMP as AMP- >>> AMP.cardinal (-3) :: Maybe String+ >>> AMP.cardinal defaultInflection (-3) :: Maybe Text Nothing Some languages have multiple scripts and methods for writing number@@ -42,33 +78,46 @@ Traditional Chinese characters: >>> import qualified Text.Numeral.Language.ZH as ZH- >>> ZH.trad_cardinal 123456 :: Maybe String+ >>> ZH.trad_cardinal defaultInflection 123456 :: Maybe Text Just "十二萬三千四百五十六" Simplified characters for use in financial contexts: - >>> ZH.finance_simpl_cardinal 123456 :: Maybe String+ >>> ZH.finance_simpl_cardinal defaultInflection 123456 :: Maybe Text Just "拾贰万参仟肆伯伍拾陆" Transcribed using Pinyin: - >>> ZH.pinyin_cardinal 123456 :: Maybe String+ >>> ZH.pinyin_cardinal defaultInflection 123456 :: Maybe Text Just "shíèrwàn sānqiān sìbǎi wǔshí liù" +In Spanish the word for the quantity '1' differs based on its+gender. We convey the gender via the inflection parameter:++ >>> import Text.Numeral.Grammar ( masculine, feminine, neuter )+ >>> import Text.Numeral.Grammar.Reified ( defaultInflection )+ >>> import qualified Text.Numeral.Language.ES as ES+ >>> ES.cardinal (masculine defaultInflection) 1 :: Maybe Text+ Just "un"+ >>> ES.cardinal (feminine defaultInflection) 1 :: Maybe Text+ Just "una"+ >>> ES.cardinal (neuter defaultInflection) 1 :: Maybe Text+ Just "uno"+ Using the `struct` functions you can see the grammatical structure of number names. Because the results of these functions are polymorphic you need to specify a specific type. >>> import qualified Text.Numeral.Language.NL as NL- >>> NL.struct 123 :: Maybe Integer- Just 123- >>> import Text.Numeral- >>> NL.struct 123 :: Maybe Exp- Just (Add (Lit 100) (Add (Lit 3) (Mul (Lit 2) (Lit 10))))+ >>> NL.struct 123 :: Integer+ 123+ >>> import Text.Numeral.Exp.Reified ( Exp, showExp )+ >>> showExp (NL.struct 123 :: Exp i)+ Add (Lit 100) (Add (Lit 3) (Mul (Lit 2) (Lit 10))) Compare with: - >>> NL.cardinal 123 :: Maybe String+ >>> NL.cardinal defaultInflection 123 :: Maybe Text Just "honderddrieëntwintig" 100 (honderd) + (3 (drie) + (ën) 2 (twin) * 10 (tig))
numerals.cabal view
@@ -1,51 +1,47 @@ name: numerals-version: 0.3.0.1+version: 0.4 cabal-version: >= 1.8 build-type: Simple stability: experimental author: Roel van Dijk <vandijk.roel@gmail.com>, Bas van Dijk <v.dijk.bas@gmail.com> maintainer: Roel van Dijk <vandijk.roel@gmail.com>-copyright: 2009–2011 Roel van Dijk, Bas van Dijk+copyright: 2009–2014 Roel van Dijk, Bas van Dijk license: BSD3 license-file: LICENSE homepage: https://github.com/roelvandijk/numerals bug-reports: https://github.com/roelvandijk/numerals/issues category: Natural Language Processing, Numerical, Text synopsis: Convert numbers to number words-description: +description: Convert numbers to number words in a number of languages. Each language has its own module. The module name is based on one of the- ISO 639 Alpha codes. Each module contains one or more 'cardinal'- functions and a 'struct' function. The 'cardinal' functions directly- convert cardinal numbers to a string-like representation of their- spoken form. The 'struct' functions convert numbers to a polymorphic- representation of their grammatical structure. All language modules- are implemented using the @numerals-base@ package.+ ISO 639 Alpha codes. Each module contains one or more 'cardinal' and+ 'ordinal' functions and a 'struct' function. The 'cardinal'+ functions directly convert cardinal numbers to a string-like+ representation of their spoken form. The 'ordinal' functions do the+ same but for ordinal numbers. The 'struct' functions convert numbers+ to a polymorphic representation of their grammatical structure. .- The use of this package is best understood with some- examples. Because the results of conversion are polymorphic we need- to choose a specific type. For these examples we'll use simple- strings. But any type that has instances for 'Monoid' and 'IsString'- will work. First some English number names, both British and US- variants:+ The use of this package is best understood with some examples. First+ some English number names, both British and US variants: . >>> import qualified Text.Numeral.Language.EN as EN- >>> EN.uk_cardinal 123 :: Maybe String+ >>> EN.uk_cardinal defaultInflection 123 :: Maybe Text Just "one hundred and twenty-three"- >>> EN.us_cardinal (10^50 + 42) :: Maybe String+ >>> EN.us_cardinal defaultInflection (10^50 + 42) :: Maybe Text Just "one hundred quindecillion forty-two" . French, which contains some traces of a base 20 system: . >>> import qualified Text.Numeral.Language.FR as FR- >>> FR.cardinal (-99) :: Maybe String+ >>> FR.cardinal defaultInflection (-99) :: Maybe Text Just "moins quatre-vingt-dix-neuf" . Conversions can fail. Alamblak, a language spoken by a few people in Papua New Guinea, has no representation for negative numbers: . >>> import qualified Text.Numeral.Language.AMP as AMP- >>> AMP.cardinal (-3) :: Maybe String+ >>> AMP.cardinal defaultInflection (-3) :: Maybe Text Nothing . Some languages have multiple scripts and methods for writing number@@ -55,17 +51,17 @@ Traditional Chinese characters: . >>> import qualified Text.Numeral.Language.ZH as ZH- >>> ZH.trad_cardinal 123456 :: Maybe String+ >>> ZH.trad_cardinal defaultInflection 123456 :: Maybe Text Just "十二萬三千四百五十六" . Simplified characters for use in financial contexts: .- >>> ZH.finance_simpl_cardinal 123456 :: Maybe String+ >>> ZH.finance_simpl_cardinal defaultInflection 123456 :: Maybe Text Just "拾贰万参仟肆伯伍拾陆" . Transcribed using Pinyin: .- >>> ZH.pinyin_cardinal 123456 :: Maybe String+ >>> ZH.pinyin_cardinal defaultInflection 123456 :: Maybe Text Just "shíèrwàn sānqiān sìbǎi wǔshí liù" . Using the 'struct' functions you can see the grammatical structure@@ -73,15 +69,15 @@ polymorphic you need to specify a specific type. . >>> import qualified Text.Numeral.Language.NL as NL- >>> NL.struct 123 :: Maybe Integer- Just 123+ >>> NL.struct 123 :: Integer+ 123 >>> import Text.Numeral- >>> NL.struct 123 :: Maybe Exp- Just (Add (Lit 100) (Add (Lit 3) (Mul (Lit 2) (Lit 10))))+ >>> NL.struct 123 :: Exp+ Add (Lit 100) (Add (Lit 3) (Mul (Lit 2) (Lit 10))) . Compare with: .- >>> NL.cardinal 123 :: Maybe String+ >>> NL.cardinal defaultInflection 123 :: Maybe Text Just "honderddrieëntwintig" . 100 (honderd) + (3 (drie) + (ën) 2 (twin) * 10 (tig))@@ -100,29 +96,57 @@ hs-source-dirs: src ghc-options: -Wall - build-depends: base >= 3.0.3.1 && < 4.5- , base-unicode-symbols >= 0.1.1 && < 0.3- , containers >= 0.4 && < 0.5+ build-depends: base >= 3.0.3.1 && < 4.7+ , base-unicode-symbols >= 0.2.2 && < 0.3+ , containers >= 0.4 && < 0.6 , containers-unicode-symbols >= 0.3 && < 0.4- , numerals-base >= 0.3 && < 0.4+ , fingertree >= 0.0.1 && < 0.2+ , text >= 0.11 && < 1.2 - exposed-modules: Text.Numeral.Language.AMP+ if impl(ghc >= 7.2.1)+ build-depends: integer-gmp >= 0.3 && < 0.6++ exposed-modules: Text.Numeral+ , Text.Numeral.BigNum+ , Text.Numeral.Entry+ , Text.Numeral.Exp+ , Text.Numeral.Exp.Reified+ , Text.Numeral.Grammar+ , Text.Numeral.Grammar.Reified+ , Text.Numeral.Misc+ , Text.Numeral.Render+ , Text.Numeral.Rules++ , Text.Numeral.Language.Entries+ , Text.Numeral.Language.AF+ , Text.Numeral.Language.AMP+ , Text.Numeral.Language.BG , Text.Numeral.Language.CHN+ , Text.Numeral.Language.CHR+ , Text.Numeral.Language.CLM+ , Text.Numeral.Language.CS , Text.Numeral.Language.DE , Text.Numeral.Language.EN , Text.Numeral.Language.EO , Text.Numeral.Language.ES+ , Text.Numeral.Language.FI , Text.Numeral.Language.FR+ , Text.Numeral.Language.FUR+ , Text.Numeral.Language.GSW , Text.Numeral.Language.GV+ , Text.Numeral.Language.HE+ , Text.Numeral.Language.HOP , Text.Numeral.Language.IT , Text.Numeral.Language.JA , Text.Numeral.Language.LA+ , Text.Numeral.Language.LLD , Text.Numeral.Language.MG , Text.Numeral.Language.NL , Text.Numeral.Language.NO , Text.Numeral.Language.NQM , Text.Numeral.Language.OJ- -- , Text.Numeral.Language.PAA+ , Text.Numeral.Language.PDC+ , Text.Numeral.Language.PL , Text.Numeral.Language.PT , Text.Numeral.Language.RU , Text.Numeral.Language.SCO@@ -131,47 +155,99 @@ , Text.Numeral.Language.WO , Text.Numeral.Language.YOR , Text.Numeral.Language.ZH+ other-modules: Text.Numeral.Render.Utils + ------------------------------------------------------------------------------- test-suite test-numerals type: exitcode-stdio-1.0 main-is: test.hs- hs-source-dirs: src, test+ hs-source-dirs: src-test - other-modules: Text.Numeral.Language.CHN.TestData+ other-modules: Text.Numeral.Test++ , Text.Numeral.Language.ACH.TestData+ , Text.Numeral.Language.ADY.TestData+ , Text.Numeral.Language.AF.TestData , Text.Numeral.Language.AMP.TestData+ , Text.Numeral.Language.ARI.TestData+ , Text.Numeral.Language.AST.TestData+ , Text.Numeral.Language.AZ.TestData+ , Text.Numeral.Language.BA.TestData+ , Text.Numeral.Language.BG.TestData+ , Text.Numeral.Language.BM.TestData+ , Text.Numeral.Language.CA.TestData+ , Text.Numeral.Language.CAF.TestData+ , Text.Numeral.Language.CBK.TestData+ , Text.Numeral.Language.CHN.TestData+ , Text.Numeral.Language.CHR.TestData+ , Text.Numeral.Language.CLM.TestData+ , Text.Numeral.Language.CO.TestData+ , Text.Numeral.Language.COD.TestData+ , Text.Numeral.Language.COO.TestData+ , Text.Numeral.Language.CS.TestData+ , Text.Numeral.Language.CY.TestData , Text.Numeral.Language.DE.TestData+ , Text.Numeral.Language.DJK.TestData , Text.Numeral.Language.EN.TestData , Text.Numeral.Language.EO.TestData , Text.Numeral.Language.ES.TestData+ , Text.Numeral.Language.ET.TestData+ , Text.Numeral.Language.FI.TestData+ , Text.Numeral.Language.FO.TestData , Text.Numeral.Language.FR.TestData+ , Text.Numeral.Language.FUR.TestData+ , Text.Numeral.Language.GCF_MTQ.TestData+ , Text.Numeral.Language.GIL.TestData+ , Text.Numeral.Language.GL.TestData+ , Text.Numeral.Language.GSW.TestData , Text.Numeral.Language.GV.TestData+ , Text.Numeral.Language.HAI.TestData+ , Text.Numeral.Language.HE.TestData+ , Text.Numeral.Language.HOP.TestData+ , Text.Numeral.Language.HR.TestData+ , Text.Numeral.Language.HU.TestData+ , Text.Numeral.Language.HY.TestData , Text.Numeral.Language.IT.TestData , Text.Numeral.Language.JA.TestData+ , Text.Numeral.Language.KAP.TestData+ , Text.Numeral.Language.KEA.TestData , Text.Numeral.Language.LA.TestData+ , Text.Numeral.Language.LLD.TestData , Text.Numeral.Language.MG.TestData+ , Text.Numeral.Language.MOH.TestData , Text.Numeral.Language.NL.TestData , Text.Numeral.Language.NO.TestData , Text.Numeral.Language.NQM.TestData , Text.Numeral.Language.OJ.TestData- -- , Text.Numeral.Language.PAA.TestData+ , Text.Numeral.Language.PAA.TestData+ , Text.Numeral.Language.PDC.TestData+ , Text.Numeral.Language.PL.TestData , Text.Numeral.Language.PT.TestData+ , Text.Numeral.Language.RMN_DZA.TestData+ , Text.Numeral.Language.RO.TestData , Text.Numeral.Language.RU.TestData , Text.Numeral.Language.SCO.TestData , Text.Numeral.Language.SV.TestData+ , Text.Numeral.Language.TAR.TestData , Text.Numeral.Language.TR.TestData , Text.Numeral.Language.WO.TestData , Text.Numeral.Language.YOR.TestData+ , Text.Numeral.Language.ZAQ.TestData , Text.Numeral.Language.ZH.TestData- ghc-options: -Wall+ , Text.Numeral.Language.ZPC.TestData+ ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N - build-depends: base >= 3.0.3.1 && < 4.4- , base-unicode-symbols >= 0.1.1 && < 0.3- , containers >= 0.4 && < 0.5- , containers-unicode-symbols >= 0.3 && < 0.4- , numerals-base >= 0.3 && < 0.4+ build-depends: base >= 3.0.3.1 && < 4.7+ , base-unicode-symbols >= 0.2.2 && < 0.3 , HUnit >= 1.2.2 && < 1.3- , test-framework >= 0.3.3 && < 0.5- , test-framework-hunit >= 0.2.6 && < 0.3+ , QuickCheck >= 2.4.2 && < 2.7+ , test-framework >= 0.3.3 && < 0.9+ , test-framework-hunit >= 0.2.6 && < 0.4+ , test-framework-quickcheck2 >= 0.2.12 && < 0.4+ , text >= 0.11 && < 1.2+ , numerals + if impl(ghc >= 7.2.1)+ build-depends: integer-gmp >= 0.3 && < 0.6
+ src-test/Text/Numeral/Language/ACH/TestData.hs view
@@ -0,0 +1,191 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] ach++[@ISO639-3@] ach++[@Native name@] Lwo++[@English name@] Acholi+-}+module Text.Numeral.Language.ACH.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-acholi/en/ach/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "acel")+ , (2, "aryo")+ , (3, "adek")+ , (4, "aŋwen")+ , (5, "abic")+ , (6, "abicel")+ , (7, "abiro")+ , (8, "aboro")+ , (9, "aboŋwen")+ , (10, "apar")+ , (11, "apar wiye acel")+ , (12, "apar wiye aryo")+ , (13, "apar wiye adek")+ , (14, "apar wiye aŋwen")+ , (15, "apar wiye abic")+ , (16, "apar wiye abicel")+ , (17, "apar wiye abiro")+ , (18, "apar wiye aboro")+ , (19, "apar wiye aboŋwen")+ , (20, "pyeraryo")+ , (21, "pyeraryo wiye acel")+ , (22, "pyeraryo wiye aryo")+ , (23, "pyeraryo wiye adek")+ , (24, "pyeraryo wiye aŋwen")+ , (25, "pyeraryo wiye abic")+ , (26, "pyeraryo wiye abicel")+ , (27, "pyeraryo wiye abiro")+ , (28, "pyeraryo wiye aboro")+ , (29, "pyeraryo wiye aboŋwen")+ , (30, "pyeradek")+ , (31, "pyeradek wiye acel")+ , (32, "pyeradek wiye aryo")+ , (33, "pyeradek wiye adek")+ , (34, "pyeradek wiye aŋwen")+ , (35, "pyeradek wiye abic")+ , (36, "pyeradek wiye abicel")+ , (37, "pyeradek wiye abiro")+ , (38, "pyeradek wiye aboro")+ , (39, "pyeradek wiye aboŋwen")+ , (40, "pyeraŋwen")+ , (41, "pyeraŋwen wiye acel")+ , (42, "pyeraŋwen wiye aryo")+ , (43, "pyeraŋwen wiye adek")+ , (44, "pyeraŋwen wiye aŋwen")+ , (45, "pyeraŋwen wiye abic")+ , (46, "pyeraŋwen wiye abicel")+ , (47, "pyeraŋwen wiye abiro")+ , (48, "pyeraŋwen wiye aboro")+ , (49, "pyeraŋwen wiye aboŋwen")+ , (50, "pyerabic")+ , (51, "pyerabic wiye acel")+ , (52, "pyerabic wiye aryo")+ , (53, "pyerabic wiye adek")+ , (54, "pyerabic wiye aŋwen")+ , (55, "pyerabic wiye abic")+ , (56, "pyerabic wiye abicel")+ , (57, "pyerabic wiye abiro")+ , (58, "pyerabic wiye aboro")+ , (59, "pyerabic wiye aboŋwen")+ , (60, "pyerabicel")+ , (61, "pyerabicel wiye acel")+ , (62, "pyerabicel wiye aryo")+ , (63, "pyerabicel wiye adek")+ , (64, "pyerabicel wiye aŋwen")+ , (65, "pyerabicel wiye abic")+ , (66, "pyerabicel wiye abicel")+ , (67, "pyerabicel wiye abiro")+ , (68, "pyerabicel wiye aboro")+ , (69, "pyerabicel wiye aboŋwen")+ , (70, "pyerabiro")+ , (71, "pyerabiro wiye acel")+ , (72, "pyerabiro wiye aryo")+ , (73, "pyerabiro wiye adek")+ , (74, "pyerabiro wiye aŋwen")+ , (75, "pyerabiro wiye abic")+ , (76, "pyerabiro wiye abicel")+ , (77, "pyerabiro wiye abiro")+ , (78, "pyerabiro wiye aboro")+ , (79, "pyerabiro wiye aboŋwen")+ , (80, "pyeraboro")+ , (81, "pyeraboro wiye acel")+ , (82, "pyeraboro wiye aryo")+ , (83, "pyeraboro wiye adek")+ , (84, "pyeraboro wiye aŋwen")+ , (85, "pyeraboro wiye abic")+ , (86, "pyeraboro wiye abicel")+ , (87, "pyeraboro wiye abiro")+ , (88, "pyeraboro wiye aboro")+ , (89, "pyeraboro wiye aboŋwen")+ , (90, "pyeraboŋwen")+ , (91, "pyeraboŋwen wiye acel")+ , (92, "pyeraboŋwen wiye aryo")+ , (93, "pyeraboŋwen wiye adek")+ , (94, "pyeraboŋwen wiye aŋwen")+ , (95, "pyeraboŋwen wiye abic")+ , (96, "pyeraboŋwen wiye abicel")+ , (97, "pyeraboŋwen wiye abiro")+ , (98, "pyeraboŋwen wiye aboro")+ , (99, "pyeraboŋwen wiye aboŋwen")+ , (100, "miya")+ , (101, "miya acel ki acel")+ , (102, "miya acel ki aryo")+ , (103, "miya acel ki adek")+ , (104, "miya acel ki aŋwen")+ , (105, "miya acel ki abic")+ , (106, "miya acel ki abicel")+ , (107, "miya acel ki abiro")+ , (108, "miya acel ki aboro")+ , (109, "miya acel ki aboŋwen")+ , (110, "miya acel ki apar")+ , (123, "miya acel ki pyeraryo wiye adek")+ , (200, "miya aryo")+ , (300, "miya adek")+ , (321, "miya adek ki pyeraryo wiye acel")+ , (400, "miya aŋwen")+ , (500, "miya abic")+ , (600, "miya abicel")+ , (700, "miya abiro")+ , (800, "miya aboro")+ , (900, "miya aboŋwen")+ , (909, "miya aboŋwen ki aboŋwen")+ , (990, "miya aboŋwen ki pyeraboŋwen")+ , (999, "miya aboŋwen ki pyeraboŋwen wiye aboŋwen")+ , (1000, "elfu")+ , (1001, "elfu acel ki acel")+ , (1008, "elfu acel ki aboro")+ , (1234, "elfu acel ki miya aryo ki pyeradek wiye aŋwen")+ , (2000, "elfu aryo")+ , (3000, "elfu adek")+ , (4000, "elfu aŋwen")+ , (4321, "elfu aŋwen ki miya adek ki pyeraryo wiye acel")+ , (5000, "elfu abic")+ , (6000, "elfu abicel")+ , (7000, "elfu abiro")+ , (8000, "elfu aboro")+ , (9000, "elfu aboŋwen")+ , (10000, "elfu apar")+ , (12345, "apar wiye aryo elfu miya adek ki pyeraŋwen wiye abic")+ , (20000, "elfu pyeraryo")+ , (30000, "elfu pyeradek")+ , (40000, "elfu pyeraŋwen")+ , (50000, "elfu pyerabic")+ , (54321, "elfu pyerabic wiye aŋwen ki miya adek ki pyeraryo wiye acel")+ , (60000, "elfu pyerabicel")+ , (70000, "elfu pyerabiro")+ , (80000, "elfu pyeraboro")+ , (90000, "elfu pyeraboŋwen")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/ADY/TestData.hs view
@@ -0,0 +1,181 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] ady++[@ISO639-3@] ady++[@Native name@] Адыгэбзэ++[@English name@] Adyghe+-}+module Text.Numeral.Language.ADY.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-adyghe/en/ady/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "зиI")+ , (1, "зы")+ , (2, "тIу")+ , (3, "щы")+ , (4, "плIы")+ , (5, "тфы")+ , (6, "хы")+ , (7, "блы")+ , (8, "и")+ , (9, "бгъу")+ , (10, "пшIы")+ , (11, "пшIыкIузы")+ , (12, "пшIыкIутIу")+ , (13, "пшIыкIущы")+ , (14, "пшIыкIуплIы")+ , (15, "пшIыкIутфы")+ , (16, "пшIыкIухы")+ , (17, "пшIыкIублы")+ , (18, "пшIыкIуи")+ , (19, "пшIыкIубгъу")+ , (20, "тоIкы")+ , (21, "тIоIкырэ зырэ")+ , (22, "тIоIкырэ тIурэ")+ , (23, "тIоIкырэ щырэ")+ , (24, "тIоIкырэ плIырэ")+ , (25, "тIоIкырэ тфырэ")+ , (26, "тIоIкырэ хырэ")+ , (27, "тIоIкырэ блырэ")+ , (28, "тIоIкырэ ирэ")+ , (29, "тIоIкырэ бгъурэ")+ , (30, "щэкIы")+ , (31, "щэкIырэ зырэ")+ , (32, "щэкIырэ тIурэ")+ , (33, "щэкIырэ щырэ")+ , (34, "щэкIырэ плIырэ")+ , (35, "щэкIырэ тфырэ")+ , (36, "щэкIырэ хырэ")+ , (37, "щэкIырэ блырэ")+ , (38, "щэкIырэ ирэ")+ , (39, "щэкIырэ бгъурэ")+ , (40, "тIокIитIу")+ , (41, "тIокIитIурэ зырэ")+ , (42, "тIокIитIурэ тIурэ")+ , (43, "тIокIитIурэ щырэ")+ , (44, "тIокIитIурэ плIырэ")+ , (45, "тIокIитIурэ тфырэ")+ , (46, "тIокIитIурэ хырэ")+ , (47, "тIокIитIурэ блырэ")+ , (48, "тIокIитIурэ ирэ")+ , (49, "тIокIитIурэ бгъурэ")+ , (50, "шъэнэкъо")+ , (51, "шъэнкъэрэ зырэ")+ , (52, "шъэнкъэрэ тIурэ")+ , (53, "шъэнкъэрэ щырэ")+ , (54, "шъэнкъэрэ плIырэ")+ , (55, "шъэнкъэрэ тфырэ")+ , (56, "шъэнкъэрэ хырэ")+ , (57, "шъэнкъэрэ блырэ")+ , (58, "шъэнкъэрэ ирэ")+ , (59, "шъэнкъэрэ бгъурэ")+ , (60, "токIищ")+ , (61, "тIокIищырэ зырэ")+ , (62, "тIокIищырэ тIурэ")+ , (63, "тIокIищырэ щырэ")+ , (64, "тIокIищырэ плIырэ")+ , (65, "тIокIищырэ тфырэ")+ , (66, "тIокIищырэ хырэ")+ , (67, "тIокIищырэ блырэ")+ , (68, "тIокIищырэ ирэ")+ , (69, "тIокIищырэ бгъурэ")+ , (70, "тIокIищырэ пшIырэ")+ , (71, "тIокIищырэ пшIыкIузырэ")+ , (72, "тIокIищырэ пшIыкIутIурэ")+ , (73, "тIокIищырэ пшIыкIущырэ")+ , (74, "тIокIищырэ пшIыкIуплIырэ")+ , (75, "тIокIищырэ пшIыкIутфырэ")+ , (76, "тIокIищырэ пшIыкIухырэ")+ , (77, "тIокIищырэ пшIыкIублырэ")+ , (78, "тIокIищырэ пшIыкIуирэ")+ , (79, "тIокIищырэ пшIыкIубгъурэ")+ , (80, "токIиплI")+ , (81, "токIиплIырэ зырэ")+ , (82, "токIиплIырэ тIурэ")+ , (83, "токIиплIырэ щырэ")+ , (84, "токIиплIырэ плIырэ")+ , (85, "токIиплIырэ тфырэ")+ , (86, "токIиплIырэ хырэ")+ , (87, "токIиплIырэ блырэ")+ , (88, "токIиплIырэ ирэ")+ , (89, "токIиплIырэ бгъурэ")+ , (90, "токIиплIырэ пшIырэ")+ , (91, "токIиплIырэ пшIыкIузырэ")+ , (92, "токIиплIырэ пшIыкIутIурэ")+ , (93, "токIиплIырэ пшIыкIущырэ")+ , (94, "токIиплIырэ пшIыкIуплIырэ")+ , (95, "токIиплIырэ пшIыкIутфырэ")+ , (96, "токIиплIырэ пшIыкIухырэ")+ , (97, "токIиплIырэ пшIыкIублырэ")+ , (98, "токIиплIырэ пшIыкIуирэ")+ , (99, "токIиплIырэ пшIыкIубгъурэ")+ , (100, "шъэ")+ , (101, "шъэрэ зырэ")+ , (102, "шъэрэ тIурэ")+ , (103, "шъэрэ щырэ")+ , (104, "шъэрэ плIырэ")+ , (105, "шъэрэ тфырэ")+ , (106, "шъэрэ хырэ")+ , (107, "шъэрэ блырэ")+ , (108, "шъэрэ ирэ")+ , (109, "шъэрэ бгъурэ")+ , (110, "шъэрэ пшIы")+ , (123, "шъэрэ тIоIкырэ щырэ")+ , (200, "шъитIу")+ , (300, "шъищ")+ , (321, "шъищ тIоIкырэ зырэ")+ , (400, "шъиплI")+ , (500, "шъитф")+ , (600, "шъихы")+ , (700, "шъиблы")+ , (800, "шъии")+ , (900, "шъибгъу")+ , (909, "шъибгъу бгъу")+ , (990, "шъибгъу токIиплIырэ пшIырэ")+ , (999, "шъибгъу токIиплIырэ пшIыкIубгъурэ")+ , (1000, "мин")+ , (1001, "мин зырэ")+ , (1008, "мин и")+ , (1234, "мин шъитIурэ щэкIырэ плIырэ")+ , (2000, "минитIу")+ , (3000, "минищ")+ , (4000, "миниплIы")+ , (4321, "плIы миншъиищ тIоIкырэ зырэ")+ , (5000, "минитфы")+ , (6000, "минихы")+ , (7000, "миниблы")+ , (8000, "минии")+ , (9000, "минибгъу")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/AF/TestData.hs view
@@ -0,0 +1,129 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] af++[@ISO639-2@] afr++[@ISO639-3@] afr++[@Native name@] Afrikaans++[@English name@] Afrikaans+-}++module Text.Numeral.Language.AF.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Misc ( dec )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-afrikaans/en/afr/+ http://mylanguages.org/afrikaans_numbers.php+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "nul")+ , (1, "een")+ , (2, "twee")+ , (3, "drie")+ , (4, "vier")+ , (5, "vyf")+ , (6, "ses")+ , (7, "sewe")+ , (8, "ag")+ , (9, "nege")+ , (10, "tien")+ , (11, "elf")+ , (12, "twaalf")+ , (13, "dertien")+ , (14, "veertien")+ , (15, "vyftien")+ , (16, "sestien")+ , (17, "sewentien")+ , (18, "agtien")+ , (19, "negentien")+ , (20, "twintig")+ , (21, "een-en-twintig")+ , (22, "twee-en-twintig")+ , (23, "drie-en-twintig")+ , (24, "vier-en-twintig")+ , (25, "vyf-en-twintig")+ , (26, "ses-en-twintig")+ , (27, "sewe-en-twintig")+ , (28, "ag-en-twintig")+ , (29, "nege-en-twintig")+ , (30, "dertig")+ , (31, "een-en-dertig")+ , (32, "twee-en-dertig")+ , (33, "drie-en-dertig")+ , (34, "vier-en-dertig")+ , (35, "vyf-en-dertig")+ , (36, "ses-en-dertig")+ , (37, "sewe-en-dertig")+ , (38, "ag-en-dertig")+ , (39, "nege-en-dertig")+ , (40, "veertig")+ , (50, "vyftig")+ , (60, "sestig")+ , (70, "sewentig")+ , (80, "tagtig")+ , (90, "neëntig")+ , (100, "eenhonderd")+ , (121, "eenhonderd een-en-twintig")+ , (1000, "eenduisend")+ , (1219, "eenduisend tweehonderd negentien")+ , (dec 6, "een miljoen")+ , (dec 9, "een miljard")+ , (dec 12, "een biljoen")+ ]+ )+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "eerste")+ , (2, "tweede")+ , (3, "derde")+ , (4, "vierde")+ , (5, "vyfde")+ , (6, "sesde")+ , (7, "sewende")+ , (8, "agtste")+ , (9, "negende")+ , (10, "tiende")+ , (11, "elfde")+ , (12, "twaalfde")+ , (13, "dertiende")+ , (14, "veertiende")+ , (15, "vyftiende")+ , (16, "sestiende")+ , (17, "sewentiende")+ , (18, "agtiende")+ , (19, "negentiende")+ , (20, "twintigste")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/AMP/TestData.hs view
@@ -0,0 +1,145 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] amp++[@Native name@] -++[@English name@] Alamblak+-}++module Text.Numeral.Language.AMP.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.sf.airnet.ne.jp/~ts/language/number/alamblak.html+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "rpat")+ , (2, "hosf")+ , (3, "hosfirpat")+ , (4, "hosfihosf")+ , (5, "tir yohtt")+ , (6, "tir yohtti rpat")+ , (7, "tir yohtti hosf")+ , (8, "tir yohtti hosfirpat")+ , (9, "tir yohtti hosfihosf")+ , (10, "tir hosf")+ , (11, "tir hosfi rpat")+ , (12, "tir hosfi hosf")+ , (13, "tir hosfi hosfirpat")+ , (14, "tir hosfi hosfihosf")+ , (15, "tir hosfirpat")+ , (16, "tir hosfirpati rpat")+ , (17, "tir hosfirpati hosf")+ , (18, "tir hosfirpati hosfirpat")+ , (19, "tir hosfirpati hosfihosf")+ , (20, "yima yohtt")+ , (21, "yima yohtti rpat")+ , (22, "yima yohtti hosf")+ , (23, "yima yohtti hosfirpat")+ , (24, "yima yohtti hosfihosf")+ , (25, "yima yohtti tir yohtt")+ , (26, "yima yohtti tir yohtti rpat")+ , (27, "yima yohtti tir yohtti hosf")+ , (28, "yima yohtti tir yohtti hosfirpat")+ , (29, "yima yohtti tir yohtti hosfihosf")+ , (30, "yima yohtti tir hosf")+ , (31, "yima yohtti tir hosfi rpat")+ , (32, "yima yohtti tir hosfi hosf")+ , (33, "yima yohtti tir hosfi hosfirpat")+ , (34, "yima yohtti tir hosfi hosfihosf")+ , (35, "yima yohtti tir hosfirpat")+ , (36, "yima yohtti tir hosfirpati rpat")+ , (37, "yima yohtti tir hosfirpati hosf")+ , (38, "yima yohtti tir hosfirpati hosfirpat")+ , (39, "yima yohtti tir hosfirpati hosfihosf")+ , (40, "yima hosf")+ , (41, "yima hosfi rpat")+ , (42, "yima hosfi hosf")+ , (43, "yima hosfi hosfirpat")+ , (44, "yima hosfi hosfihosf")+ , (45, "yima hosfi tir yohtt")+ , (46, "yima hosfi tir yohtti rpat")+ , (47, "yima hosfi tir yohtti hosf")+ , (48, "yima hosfi tir yohtti hosfirpat")+ , (49, "yima hosfi tir yohtti hosfihosf")+ , (50, "yima hosfi tir hosf")+ , (51, "yima hosfi tir hosfi rpat")+ , (52, "yima hosfi tir hosfi hosf")+ , (53, "yima hosfi tir hosfi hosfirpat")+ , (54, "yima hosfi tir hosfi hosfihosf")+ , (55, "yima hosfi tir hosfirpat")+ , (56, "yima hosfi tir hosfirpati rpat")+ , (57, "yima hosfi tir hosfirpati hosf")+ , (58, "yima hosfi tir hosfirpati hosfirpat")+ , (59, "yima hosfi tir hosfirpati hosfihosf")+ , (60, "yima hosfirpat")+ , (61, "yima hosfirpati rpat")+ , (62, "yima hosfirpati hosf")+ , (63, "yima hosfirpati hosfirpat")+ , (64, "yima hosfirpati hosfihosf")+ , (65, "yima hosfirpati tir yohtt")+ , (66, "yima hosfirpati tir yohtti rpat")+ , (67, "yima hosfirpati tir yohtti hosf")+ , (68, "yima hosfirpati tir yohtti hosfirpat")+ , (69, "yima hosfirpati tir yohtti hosfihosf")+ , (70, "yima hosfirpati tir hosf")+ , (71, "yima hosfirpati tir hosfi rpat")+ , (72, "yima hosfirpati tir hosfi hosf")+ , (73, "yima hosfirpati tir hosfi hosfirpat")+ , (74, "yima hosfirpati tir hosfi hosfihosf")+ , (75, "yima hosfirpati tir hosfirpat")+ , (76, "yima hosfirpati tir hosfirpati rpat")+ , (77, "yima hosfirpati tir hosfirpati hosf")+ , (78, "yima hosfirpati tir hosfirpati hosfirpat")+ , (79, "yima hosfirpati tir hosfirpati hosfihosf")+ , (80, "yima hosfihosf")+ , (81, "yima hosfihosfi rpat")+ , (82, "yima hosfihosfi hosf")+ , (83, "yima hosfihosfi hosfirpat")+ , (84, "yima hosfihosfi hosfihosf")+ , (85, "yima hosfihosfi tir yohtt")+ , (86, "yima hosfihosfi tir yohtti rpat")+ , (87, "yima hosfihosfi tir yohtti hosf")+ , (88, "yima hosfihosfi tir yohtti hosfirpat")+ , (89, "yima hosfihosfi tir yohtti hosfihosf")+ , (90, "yima hosfihosfi tir hosf")+ , (91, "yima hosfihosfi tir hosfi rpat")+ , (92, "yima hosfihosfi tir hosfi hosf")+ , (93, "yima hosfihosfi tir hosfi hosfirpat")+ , (94, "yima hosfihosfi tir hosfi hosfihosf")+ , (95, "yima hosfihosfi tir hosfirpat")+ , (96, "yima hosfihosfi tir hosfirpati rpat")+ , (97, "yima hosfihosfi tir hosfirpati hosf")+ , (98, "yima hosfihosfi tir hosfirpati hosfirpat")+ , (99, "yima hosfihosfi tir hosfirpati hosfihosf")+ , (100, "yima tir yohtt")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/ARI/TestData.hs view
@@ -0,0 +1,203 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] ari++[@Native name@] -++[@English name@] Arikara+-}+module Text.Numeral.Language.ARI.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-arikara/en/ari/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "áxkux")+ , (2, "pítkux")+ , (3, "táwit")+ , (4, "čiitíʾiš")+ , (5, "šíhux")+ , (6, "tšaápis")+ , (7, "tawišaapiswaána")+ , (8, "tawišaápis")+ , (9, "nooxiniiwaána")+ , (10, "nooxíniʾ")+ , (11, "nooxini na áxkux")+ , (12, "nooxini na pítkux")+ , (13, "nooxini na táwit")+ , (14, "nooxini na čiitíʾiš")+ , (15, "nooxini na šíhux")+ , (16, "nooxini na tšaápis")+ , (17, "nooxini na tawišaapiswaána")+ , (18, "nooxini na tawišaápis")+ , (19, "nooxini na nooxiniiwaána")+ , (20, "wiitáʾuʾ")+ , (21, "wiitáʾu na áxkux")+ , (22, "wiitáʾu na pítkux")+ , (23, "wiitáʾu na táwit")+ , (24, "wiitáʾu na čiitíʾiš")+ , (25, "wiitáʾu na šíhux")+ , (26, "wiitáʾu na tšaápis")+ , (27, "wiitáʾu na tawišaapiswaána")+ , (28, "wiitáʾu na tawišaápis")+ , (29, "wiitáʾu na nooxiniiwaána")+ , (30, "nasaawíʾuʾ")+ , (31, "nasaawiʾu na áxkux")+ , (32, "nasaawiʾu na pítkux")+ , (33, "nasaawiʾu na táwit")+ , (34, "nasaawiʾu na čiitíʾiš")+ , (35, "nasaawiʾu na šíhux")+ , (36, "nasaawiʾu na tšaápis")+ , (37, "nasaawiʾu na tawišaapiswaána")+ , (38, "nasaawiʾu na tawišaápis")+ , (39, "nasaawiʾu na nooxiniiwaána")+ , (40, "pitkuxunaánuʾ")+ , (41, "pitkuxunaanu na áxkux")+ , (42, "pitkuxunaanu na pítkux")+ , (43, "pitkuxunaanu na táwit")+ , (44, "pitkuxunaanu na čiitíʾiš")+ , (45, "pitkuxunaanu na šíhux")+ , (46, "pitkuxunaanu na tšaápis")+ , (47, "pitkuxunaanu na tawišaapiswaána")+ , (48, "pitkuxunaanu na tawišaápis")+ , (49, "pitkuxunaanu na nooxiniiwaána")+ , (50, "pitkuxunaánuʾ na nooxíniʾ")+ , (51, "pitkuxunaanu na nooxini na áxkux")+ , (52, "pitkuxunaanu na nooxini na pítkux")+ , (53, "pitkuxunaanu na nooxini na táwit")+ , (54, "pitkuxunaanu na nooxini na čiitíʾiš")+ , (55, "pitkuxunaanu na nooxini na šíhux")+ , (56, "pitkuxunaanu na nooxini na tšaápis")+ , (57, "pitkuxunaanu na nooxini na tawišaapiswaána")+ , (58, "pitkuxunaanu na nooxini na tawišaápis")+ , (59, "pitkuxunaanu na nooxini na nooxiniiwaána")+ , (60, "tawihkunaánuʾ")+ , (61, "tawihkunaanu na áxkux")+ , (62, "tawihkunaanu na pítkux")+ , (63, "tawihkunaanu na táwit")+ , (64, "tawihkunaanu na čiitíʾiš")+ , (65, "tawihkunaanu na šíhux")+ , (66, "tawihkunaanu na tšaápis")+ , (67, "tawihkunaanu na tawišaapiswaána")+ , (68, "tawihkunaanu na tawišaápis")+ , (69, "tawihkunaanu na nooxiniiwaána")+ , (70, "tawihkunaánuʾ na nooxíniʾ")+ , (71, "tawihkunaánu nooxíni na áxkux")+ , (72, "tawihkunaánu nooxíni na pítkux")+ , (73, "tawihkunaánu nooxíni na táwit")+ , (74, "tawihkunaánu nooxíni na čiitíʾiš")+ , (75, "tawihkunaánu nooxíni na šíhux")+ , (76, "tawihkunaánu nooxíni na tšaápis")+ , (77, "tawihkunaánu nooxíni na tawišaapiswaána")+ , (78, "tawihkunaánu nooxíni na tawišaápis")+ , (79, "tawihkunaánu nooxíni na nooxiniiwaána")+ , (80, "čiitiʾištaánuʾ")+ , (81, "čiitiʾištaanu na áxkux")+ , (82, "čiitiʾištaanu na pítkux")+ , (83, "čiitiʾištaanu na táwit")+ , (84, "čiitiʾištaanu na čiitíʾiš")+ , (85, "čiitiʾištaanu na šíhux")+ , (86, "čiitiʾištaanu na tšaápis")+ , (87, "čiitiʾištaanu na tawišaapiswaána")+ , (88, "čiitiʾištaanu na tawišaápis")+ , (89, "čiitiʾištaanu na nooxiniiwaána")+ , (90, "čiitiʾištaanu na nooxíniʾ")+ , (91, "čiitiʾištaanu nooxíni na áxkux")+ , (92, "čiitiʾištaanu nooxíni na pítkux")+ , (93, "čiitiʾištaanu nooxíni na táwit")+ , (94, "čiitiʾištaanu nooxíni na čiitíʾiš")+ , (95, "čiitiʾištaanu nooxíni na šíhux")+ , (96, "čiitiʾištaanu nooxíni na tšaápis")+ , (97, "čiitiʾištaanu nooxíni na tawišaapiswaána")+ , (98, "čiitiʾištaanu nooxíni na tawišaápis")+ , (99, "čiitiʾištaanu nooxíni na nooxiniiwaána")+ , (100, "šihuxtaánuʾ")+ , (101, "šihuxtaánuʾ na áxkux")+ , (102, "šihuxtaánuʾ na pítkux")+ , (103, "šihuxtaánuʾ na táwit")+ , (104, "šihuxtaánuʾ na čiitíʾiš")+ , (105, "šihuxtaánuʾ na šíhux")+ , (106, "šihuxtaánuʾ na tšaápis")+ , (107, "šihuxtaánuʾ na tawišaapiswaána")+ , (108, "šihuxtaánuʾ na tawišaápis")+ , (109, "šihuxtaánuʾ na nooxiniiwaána")+ , (110, "šihuxtaánuʾ na nooxíniʾ")+ , (123, "šihuxtaánuʾ na wiitáʾu na táwit")+ , (200, "pitkux šihuxtaánuʾ")+ , (300, "tawit šihuxtaánuʾ")+ , (321, "tawit šihuxtaánuʾ na wiitáʾu na áxkux")+ , (400, "čiitiʾiš šihuxtaánuʾ")+ , (500, "šíhux šihuxtaánuʾ")+ , (600, "tšaápis šihuxtaánuʾ")+ , (700, "tawišaapiswaána šihuxtaánuʾ")+ , (800, "tawišaápis šihuxtaánuʾ")+ , (900, "nooxiniiwaána šihuxtaánuʾ")+ , (909, "nooxiniiwaána šihuxtaánuʾ na nooxiniiwaána")+ , (990, "nooxiniiwaána šihuxtaánuʾ na čiitiʾištaanu na nooxíniʾ")+ , (999, "nooxiniiwaána šihuxtaánuʾ na čiitiʾištaanu nooxíni na nooxiniiwaána")+ , (1000, "nooxininaánuʾ")+ , (1001, "nooxininaánuʾ na áxkux")+ , (1008, "nooxininaánuʾ na tawišaápis")+ , (1234, "nooxininaánuʾ na pitkux šihuxtaánuʾ na nasaawiʾu na čiitíʾiš")+ , (2000, "pitkux nooxininaánuʾ")+ , (3000, "tawit nooxininaánuʾ")+ , (4000, "čiitiʾiš nooxininaánuʾ")+ , (4321, "čiitiʾiš nooxininaánuʾ na tawit šihuxtaánuʾ na wiitáʾu na áxkux")+ , (5000, "šíhux nooxininaánuʾ")+ , (6000, "tšaápis nooxininaánuʾ")+ , (7000, "tawišaapiswaána nooxininaánuʾ")+ , (8000, "tawišaápis nooxininaánuʾ")+ , (9000, "nooxiniiwaána nooxininaánuʾ")+ , (10000, "nooxíniʾ nooxininaánuʾ")+ , (12345, "nooxini na pitkux nooxininaánuʾ na tawit šihuxtaánuʾ na pitkuxunaanu na šíhux")+ , (20000, "wiitáʾuʾ nooxininaánuʾ")+ , (30000, "nasaawíʾuʾ nooxininaánuʾ")+ , (40000, "pitkuxunaánuʾ nooxininaánuʾ")+ , (50000, "pitkuxunaánuʾ na nooxíniʾ nooxininaánuʾ")+ , (54321, "pitkuxunaanu na nooxini na čiitiʾiš nooxininaánuʾ na tawit šihuxtaánuʾ na wiitáʾu na áxkux")+ , (60000, "tawihkunaánuʾ nooxininaánuʾ")+ , (70000, "tawihkunaánuʾ na nooxíniʾ nooxininaánuʾ")+ , (80000, "čiitiʾištaánuʾ nooxininaánuʾ")+ , (90000, "čiitiʾištaanu na nooxíniʾ nooxininaánuʾ")+ , (100000, "šihuxtaánuʾ nooxininaánuʾ")+ , (123456, "šihuxtaánuʾ na wiitáʾu na tawit nooxininaánuʾ na čiitiʾiš šihuxtaánuʾ na pitkuxunaanu na nooxini na tšaápis")+ , (200000, "pitkux šihuxtaánuʾ nooxininaánuʾ")+ , (300000, "tawit šihuxtaánuʾ nooxininaánuʾ")+ , (400000, "čiitiʾiš šihuxtaánuʾ nooxininaánuʾ")+ , (500000, "šíhux šihuxtaánuʾ nooxininaánuʾ")+ , (600000, "tšaápis šihuxtaánuʾ nooxininaánuʾ")+ , (654321, "tšaápis šihuxtaánuʾ na pitkuxunaanu na nooxini na čiitiʾiš nooxininaánuʾ na tawit šihuxtaánuʾ na wiitáʾu na áxkux")+ , (700000, "tawišaapiswaána šihuxtaánuʾ nooxininaánuʾ")+ , (800000, "tawišaápis šihuxtaánuʾ nooxininaánuʾ")+ , (900000, "nooxiniiwaána šihuxtaánuʾ nooxininaánuʾ")+ , (1000000, "axku-hunaánuʾ")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/AST/TestData.hs view
@@ -0,0 +1,204 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] ast++[@ISO639-3@] ast++[@Native name@] asturianu++[@English name@] Asturian+-}+module Text.Numeral.Language.AST.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-asturian/en/ast/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "ceru")+ , (1, "un")+ , (2, "dos")+ , (3, "tres")+ , (4, "cuatro")+ , (5, "cinco")+ , (6, "seis")+ , (7, "siete")+ , (8, "ocho")+ , (9, "nueve")+ , (10, "diez")+ , (11, "once")+ , (12, "doce")+ , (13, "trece")+ , (14, "catorce")+ , (15, "quince")+ , (16, "deciséis")+ , (17, "decisiete")+ , (18, "deciocho")+ , (19, "decinueve")+ , (20, "venti")+ , (21, "ventiún")+ , (22, "ventidós")+ , (23, "ventitrés")+ , (24, "venticuatro")+ , (25, "venticinco")+ , (26, "ventiséis")+ , (27, "ventisiete")+ , (28, "ventiocho")+ , (29, "ventinueve")+ , (30, "trenta")+ , (31, "trenta y un")+ , (32, "trenta y dos")+ , (33, "trenta y tres")+ , (34, "trenta y cuatro")+ , (35, "trenta y cinco")+ , (36, "trenta y seis")+ , (37, "trenta y siete")+ , (38, "trenta y ocho")+ , (39, "trenta y nueve")+ , (40, "cuaranta")+ , (41, "cuaranta y un")+ , (42, "cuaranta y dos")+ , (43, "cuaranta y tres")+ , (44, "cuaranta y cuatro")+ , (45, "cuaranta y cinco")+ , (46, "cuaranta y seis")+ , (47, "cuaranta y siete")+ , (48, "cuaranta y ocho")+ , (49, "cuaranta y nueve")+ , (50, "cincuenta")+ , (51, "cincuenta y un")+ , (52, "cincuenta y dos")+ , (53, "cincuenta y tres")+ , (54, "cincuenta y cuatro")+ , (55, "cincuenta y cinco")+ , (56, "cincuenta y seis")+ , (57, "cincuenta y siete")+ , (58, "cincuenta y ocho")+ , (59, "cincuenta y nueve")+ , (60, "sesenta")+ , (61, "sesenta y un")+ , (62, "sesenta y dos")+ , (63, "sesenta y tres")+ , (64, "sesenta y cuatro")+ , (65, "sesenta y cinco")+ , (66, "sesenta y seis")+ , (67, "sesenta y siete")+ , (68, "sesenta y ocho")+ , (69, "sesenta y nueve")+ , (70, "setanta")+ , (71, "setanta y un")+ , (72, "setanta y dos")+ , (73, "setanta y tres")+ , (74, "setanta y cuatro")+ , (75, "setanta y cinco")+ , (76, "setanta y seis")+ , (77, "setanta y siete")+ , (78, "setanta y ocho")+ , (79, "setanta y nueve")+ , (80, "ochenta")+ , (81, "ochenta y un")+ , (82, "ochenta y dos")+ , (83, "ochenta y tres")+ , (84, "ochenta y cuatro")+ , (85, "ochenta y cinco")+ , (86, "ochenta y seis")+ , (87, "ochenta y siete")+ , (88, "ochenta y ocho")+ , (89, "ochenta y nueve")+ , (90, "noventa")+ , (91, "noventa y un")+ , (92, "noventa y dos")+ , (93, "noventa y tres")+ , (94, "noventa y cuatro")+ , (95, "noventa y cinco")+ , (96, "noventa y seis")+ , (97, "noventa y siete")+ , (98, "noventa y ocho")+ , (99, "noventa y nueve")+ , (100, "cien")+ , (101, "cien un")+ , (102, "cien dos")+ , (103, "cien tres")+ , (104, "cien cuatro")+ , (105, "cien cinco")+ , (106, "cien seis")+ , (107, "cien siete")+ , (108, "cien ocho")+ , (109, "cien nueve")+ , (110, "cien diez")+ , (123, "cien ventitrés")+ , (200, "doscientos")+ , (300, "trescientos")+ , (321, "trescientos ventiún")+ , (400, "cuatrocientos")+ , (500, "quinientos")+ , (600, "seiscientos")+ , (700, "setecientos")+ , (800, "ochocientos")+ , (900, "novecientos")+ , (909, "novecientos nueve")+ , (990, "novecientos noventa")+ , (999, "novecientos noventa y nueve")+ , (1000, "mil")+ , (1001, "mil un")+ , (1008, "mil ocho")+ , (1234, "mil doscientos trenta y cuatro")+ , (2000, "dos mil")+ , (3000, "tres mil")+ , (4000, "cuatro mil")+ , (4321, "cuatro mil trescientos ventiún")+ , (5000, "cinco mil")+ , (6000, "seis mil")+ , (7000, "siete mil")+ , (8000, "ocho mil")+ , (9000, "nueve mil")+ , (10000, "diez mil")+ , (12345, "doce mil trescientos cuaranta y cinco")+ , (20000, "venti mil")+ , (30000, "trenta mil")+ , (40000, "cuaranta mil")+ , (50000, "cincuenta mil")+ , (54321, "cincuenta y cuatro mil trescientos ventiún")+ , (60000, "sesenta mil")+ , (70000, "setanta mil")+ , (80000, "ochenta mil")+ , (90000, "noventa mil")+ , (100000, "cien mil")+ , (123456, "cien ventitrés mil cuatrocientos cincuenta y seis")+ , (200000, "doscientos mil")+ , (300000, "trescientos mil")+ , (400000, "cuatrocientos mil")+ , (500000, "quinientos mil")+ , (600000, "seiscientos mil")+ , (654321, "seiscientos cincuenta y cuatro mil trescientos ventiún")+ , (700000, "setecientos mil")+ , (800000, "ochocientos mil")+ , (900000, "novecientos mil")+ , (1000000, "un millón")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/AZ/TestData.hs view
@@ -0,0 +1,206 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] az++[@ISO639-2@] aze++[@ISO639-3@] aze++[@Native name@] Azərbaycanca++[@English name@] Azerbaijani+-}+module Text.Numeral.Language.AZ.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-azerbaijani/en/aze/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "sıfır")+ , (1, "bir")+ , (2, "iki")+ , (3, "üç")+ , (4, "dörd")+ , (5, "beş")+ , (6, "altı")+ , (7, "yeddi")+ , (8, "səkkiz")+ , (9, "doqquz")+ , (10, "on")+ , (11, "on bir")+ , (12, "on iki")+ , (13, "on uç")+ , (14, "on dörd")+ , (15, "on beş")+ , (16, "on altı")+ , (17, "on yeddi")+ , (18, "on səkkiz")+ , (19, "on doqquz")+ , (20, "iyirmi")+ , (21, "iyirmi bir")+ , (22, "iyirmi iki")+ , (23, "iyirmi uç")+ , (24, "iyirmi dörd")+ , (25, "iyirmi beş")+ , (26, "iyirmi altı")+ , (27, "iyirmi yeddi")+ , (28, "iyirmi səkkiz")+ , (29, "iyirmi doqquz")+ , (30, "otuz")+ , (31, "otuz bir")+ , (32, "otuz iki")+ , (33, "otuz uç")+ , (34, "otuz dörd")+ , (35, "otuz beş")+ , (36, "otuz altı")+ , (37, "otuz yeddi")+ , (38, "otuz səkkiz")+ , (39, "otuz doqquz")+ , (40, "qırx")+ , (41, "qırx bir")+ , (42, "qırx iki")+ , (43, "qırx uç")+ , (44, "qırx dörd")+ , (45, "qırx beş")+ , (46, "qırx altı")+ , (47, "qırx yeddi")+ , (48, "qırx səkkiz")+ , (49, "qırx doqquz")+ , (50, "əlli")+ , (51, "əlli bir")+ , (52, "əlli iki")+ , (53, "əlli uç")+ , (54, "əlli dörd")+ , (55, "əlli beş")+ , (56, "əlli altı")+ , (57, "əlli yeddi")+ , (58, "əlli səkkiz")+ , (59, "əlli doqquz")+ , (60, "altmış")+ , (61, "altmış bir")+ , (62, "altmış iki")+ , (63, "altmış uç")+ , (64, "altmış dörd")+ , (65, "altmış beş")+ , (66, "altmış altı")+ , (67, "altmış yeddi")+ , (68, "altmış səkkiz")+ , (69, "altmış doqquz")+ , (70, "yetmiş")+ , (71, "yetmiş bir")+ , (72, "yetmiş iki")+ , (73, "yetmiş uç")+ , (74, "yetmiş dörd")+ , (75, "yetmiş beş")+ , (76, "yetmiş altı")+ , (77, "yetmiş yeddi")+ , (78, "yetmiş səkkiz")+ , (79, "yetmiş doqquz")+ , (80, "səksən")+ , (81, "səksən bir")+ , (82, "səksən iki")+ , (83, "səksən uç")+ , (84, "səksən dörd")+ , (85, "səksən beş")+ , (86, "səksən altı")+ , (87, "səksən yeddi")+ , (88, "səksən səkkiz")+ , (89, "səksən doqquz")+ , (90, "doxsan")+ , (91, "doxsan bir")+ , (92, "doxsan iki")+ , (93, "doxsan uç")+ , (94, "doxsan dörd")+ , (95, "doxsan beş")+ , (96, "doxsan altı")+ , (97, "doxsan yeddi")+ , (98, "doxsan səkkiz")+ , (99, "doxsan doqquz")+ , (100, "yüz")+ , (101, "yüz bir")+ , (102, "yüz iki")+ , (103, "yüz uç")+ , (104, "yüz dörd")+ , (105, "yüz beş")+ , (106, "yüz altı")+ , (107, "yüz yeddi")+ , (108, "yüz səkkiz")+ , (109, "yüz doqquz")+ , (110, "yüz on")+ , (123, "yüz iyirmi uç")+ , (200, "iki yüz")+ , (300, "üç yüz")+ , (321, "üç yüz iyirmi bir")+ , (400, "dörd yüz")+ , (500, "beş yüz")+ , (600, "altı yüz")+ , (700, "yeddi yüz")+ , (800, "səkkiz yüz")+ , (900, "doqquz yüz")+ , (909, "doqquz yüz doqquz")+ , (990, "doqquz yüz doxsan")+ , (999, "doqquz yüz doxsan doqquz")+ , (1000, "bir min")+ , (1001, "bir min bir")+ , (1008, "bir min səkkiz")+ , (1234, "bir min iki yüz otuz dörd")+ , (2000, "iki min")+ , (3000, "üç min")+ , (4000, "dörd min")+ , (4321, "dörd min üç yüz iyirmi bir")+ , (5000, "beş min")+ , (6000, "altı min")+ , (7000, "yeddi min")+ , (8000, "səkkiz min")+ , (9000, "doqquz min")+ , (10000, "on min")+ , (12345, "oniki min üç yüz qırx beş")+ , (20000, "iyirmi min")+ , (30000, "otuz min")+ , (40000, "qırx min")+ , (50000, "əlli min")+ , (54321, "əlli dörd min üç yüz iyirmi bir")+ , (60000, "altmış min")+ , (70000, "yetmiş min")+ , (80000, "səksən min")+ , (90000, "doxsan min")+ , (100000, "yüz min")+ , (123456, "yüz iyirmi üç min dörd yüz əlli altı")+ , (200000, "iki yüz min")+ , (300000, "üç yüz min")+ , (400000, "dörd yüz min")+ , (500000, "beş yüz min")+ , (600000, "altı yüz min")+ , (654321, "altı yüz əlli dörd min üç yüz iyirmi bir")+ , (700000, "yeddi yüz min")+ , (800000, "səkkiz yüz min")+ , (900000, "doqquz yüz min")+ , (1000000, "bir milyon")+ , (1000000000, "bir milyar")+ , (1000000000000, "bir trilyon")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/BA/TestData.hs view
@@ -0,0 +1,180 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] ba++[@ISO639-2@] bak++[@ISO639-3@] bak++[@Native name@] Башҡорт теле++[@English name@] Bashkir+-}+module Text.Numeral.Language.BA.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-bashkir/en/bak/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "бер")+ , (2, "ике")+ , (3, "өс")+ , (4, "дүрт")+ , (5, "биш")+ , (6, "алты")+ , (7, "ете")+ , (8, "һигеҙ")+ , (9, "туғыҙ")+ , (10, "ун")+ , (11, "ун бер")+ , (12, "ун ике")+ , (13, "ун өс")+ , (14, "ун дүрт")+ , (15, "ун биш")+ , (16, "ун алты")+ , (17, "ун ете")+ , (18, "ун һигеҙ")+ , (19, "ун туғыҙ")+ , (20, "егерме")+ , (21, "егерме бер")+ , (22, "егерме ике")+ , (23, "егерме өс")+ , (24, "егерме дүрт")+ , (25, "егерме биш")+ , (26, "егерме алты")+ , (27, "егерме ете")+ , (28, "егерме һигеҙ")+ , (29, "егерме туғыҙ")+ , (30, "утыҙ")+ , (31, "утыҙ бер")+ , (32, "утыҙ ике")+ , (33, "утыҙ өс")+ , (34, "утыҙ дүрт")+ , (35, "утыҙ биш")+ , (36, "утыҙ алты")+ , (37, "утыҙ ете")+ , (38, "утыҙ һигеҙ")+ , (39, "утыҙ туғыҙ")+ , (40, "ҡырҡ")+ , (41, "ҡырҡ бер")+ , (42, "ҡырҡ ике")+ , (43, "ҡырҡ өс")+ , (44, "ҡырҡ дүрт")+ , (45, "ҡырҡ биш")+ , (46, "ҡырҡ алты")+ , (47, "ҡырҡ ете")+ , (48, "ҡырҡ һигеҙ")+ , (49, "ҡырҡ туғыҙ")+ , (50, "илле")+ , (51, "илле бер")+ , (52, "илле ике")+ , (53, "илле өс")+ , (54, "илле дүрт")+ , (55, "илле биш")+ , (56, "илле алты")+ , (57, "илле ете")+ , (58, "илле һигеҙ")+ , (59, "илле туғыҙ")+ , (60, "алтмыш")+ , (61, "алтмыш бер")+ , (62, "алтмыш ике")+ , (63, "алтмыш өс")+ , (64, "алтмыш дүрт")+ , (65, "алтмыш биш")+ , (66, "алтмыш алты")+ , (67, "алтмыш ете")+ , (68, "алтмыш һигеҙ")+ , (69, "алтмыш туғыҙ")+ , (70, "етмеш")+ , (71, "етмеш бер")+ , (72, "етмеш ике")+ , (73, "етмеш өс")+ , (74, "етмеш дүрт")+ , (75, "етмеш биш")+ , (76, "етмеш алты")+ , (77, "етмеш ете")+ , (78, "етмеш һигеҙ")+ , (79, "етмеш туғыҙ")+ , (80, "һикһән")+ , (81, "һикһән бер")+ , (82, "һикһән ике")+ , (83, "һикһән өс")+ , (84, "һикһән дүрт")+ , (85, "һикһән биш")+ , (86, "һикһән алты")+ , (87, "һикһән ете")+ , (88, "һикһән һигеҙ")+ , (89, "һикһән туғыҙ")+ , (90, "туҡһан")+ , (91, "туҡһан бер")+ , (92, "туҡһан ике")+ , (93, "туҡһан өс")+ , (94, "туҡһан дүрт")+ , (95, "туҡһан биш")+ , (96, "туҡһан алты")+ , (97, "туҡһан ете")+ , (98, "туҡһан һигеҙ")+ , (99, "туҡһан туғыҙ")+ , (100, "йөҙ")+ , (101, "йөҙ бер")+ , (102, "йөҙ ике")+ , (103, "йөҙ өс")+ , (104, "йөҙ дүрт")+ , (105, "йөҙ биш")+ , (106, "йөҙ алты")+ , (107, "йөҙ ете")+ , (108, "йөҙ һигеҙ")+ , (109, "йөҙ туғыҙ")+ , (110, "йөҙ ун")+ , (123, "йөҙ егерме өс")+ , (200, "ике йөҙ")+ , (300, "өс йөҙ")+ , (321, "өс йөҙ егерме бер")+ , (400, "дүрт йөҙ")+ , (500, "биш йөҙ")+ , (600, "алты йөҙ")+ , (700, "ете йөҙ")+ , (800, "һигеҙ йөҙ")+ , (900, "туғыҙ йөҙ")+ , (909, "туғыҙ йөҙ туғыҙ")+ , (990, "туғыҙ йөҙ туҡһан")+ , (999, "туғыҙ йөҙ туҡһан туғыҙ")+ , (1000, "мең")+ , (1001, "мең бер")+ , (1008, "мең һигеҙ")+ , (1234, "мең ике йөҙ утыҙ дүрт")+ , (2000, "ике мең")+ , (3000, "өс мең")+ , (4000, "дүрт мең")+ , (4321, "дүрт мең өс йөҙ егерме бер")+ , (5000, "биш мең")+ , (6000, "алты мең")+ , (7000, "ете мең")+ , (8000, "һигеҙ мең")+ , (9000, "туғыҙ мең")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/BG/TestData.hs view
@@ -0,0 +1,237 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] bg++[@ISO639-2@] bul++[@ISO639-3@] bul++[@Native name@] български език++[@English name@] Bulgarian+-}++module Text.Numeral.Language.BG.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral, (+) )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-bulgarian/en/bul/+ http://en.wikipedia.org/wiki/Bulgarian_grammar#Numbers+ http://bg.wikipedia.org/wiki/Имена_на_числата+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "neuter"+ , neuter defaultInflection+ , [ (-3, "минус три")+ , (0, "нула")+ , (1, "едно")+ , (2, "две")+ , (3, "три")+ , (4, "четири")+ , (5, "пет")+ , (6, "шест")+ , (7, "седем")+ , (8, "осем")+ , (9, "девет")+ , (10, "десет")+ , (11, "единадесет")+ , (12, "дванадесет")+ , (13, "тринадесет")+ , (14, "четиринадесет")+ , (15, "петнадесет")+ , (16, "шестнадесет")+ , (17, "седемнадесет")+ , (18, "осемнадесет")+ , (19, "деветнадесет")+ , (20, "двадесет")+ , (21, "двадесет и едно")+ , (22, "двадесет и две")+ , (23, "двадесет и три")+ , (24, "двадесет и четири")+ , (25, "двадесет и пет")+ , (26, "двадесет и шест")+ , (27, "двадесет и седем")+ , (28, "двадесет и осем")+ , (29, "двадесет и девет")+ , (30, "тридесет")+ , (31, "тридесет и едно")+ , (32, "тридесет и две")+ , (33, "тридесет и три")+ , (34, "тридесет и четири")+ , (35, "тридесет и пет")+ , (36, "тридесет и шест")+ , (37, "тридесет и седем")+ , (38, "тридесет и осем")+ , (39, "тридесет и девет")+ , (40, "четиридесет")+ , (41, "четиридесет и едно")+ , (42, "четиридесет и две")+ , (43, "четиридесет и три")+ , (44, "четиридесет и четири")+ , (45, "четиридесет и пет")+ , (46, "четиридесет и шест")+ , (47, "четиридесет и седем")+ , (48, "четиридесет и осем")+ , (49, "четиридесет и девет")+ , (50, "петдесет")+ , (51, "петдесет и едно")+ , (52, "петдесет и две")+ , (53, "петдесет и три")+ , (54, "петдесет и четири")+ , (55, "петдесет и пет")+ , (56, "петдесет и шест")+ , (57, "петдесет и седем")+ , (58, "петдесет и осем")+ , (59, "петдесет и девет")+ , (60, "шестдесет")+ , (61, "шестдесет и едно")+ , (62, "шестдесет и две")+ , (63, "шестдесет и три")+ , (64, "шестдесет и четири")+ , (65, "шестдесет и пет")+ , (66, "шестдесет и шест")+ , (67, "шестдесет и седем")+ , (68, "шестдесет и осем")+ , (69, "шестдесет и девет")+ , (70, "седемдесет")+ , (71, "седемдесет и едно")+ , (72, "седемдесет и две")+ , (73, "седемдесет и три")+ , (74, "седемдесет и четири")+ , (75, "седемдесет и пет")+ , (76, "седемдесет и шест")+ , (77, "седемдесет и седем")+ , (78, "седемдесет и осем")+ , (79, "седемдесет и девет")+ , (80, "осемдесет")+ , (81, "осемдесет и едно")+ , (82, "осемдесет и две")+ , (83, "осемдесет и три")+ , (84, "осемдесет и четири")+ , (85, "осемдесет и пет")+ , (86, "осемдесет и шест")+ , (87, "осемдесет и седем")+ , (88, "осемдесет и осем")+ , (89, "осемдесет и девет")+ , (90, "деветдесет")+ , (91, "деветдесет и едно")+ , (92, "деветдесет и две")+ , (93, "деветдесет и три")+ , (94, "деветдесет и четири")+ , (95, "деветдесет и пет")+ , (96, "деветдесет и шест")+ , (97, "деветдесет и седем")+ , (98, "деветдесет и осем")+ , (99, "деветдесет и девет")+ , (100, "сто")+ , (101, "сто и едно")+ , (102, "сто и две")+ , (110, "сто и десет")+ , (115, "сто и петнадесет")+ , (120, "сто и двадесет")+ , (121, "сто двадесет и едно")+ , (130, "сто и тридесет")+ , (133, "сто тридесет и три")+ , (200, "двеста")+ , (202, "двеста и две")+ , (216, "двеста и шестнадесет")+ , (265, "двеста шестдесет и пет")+ , (300, "триста")+ , (400, "четиристотин")+ , (500, "петстотин")+ , (507, "петстотин и седем")+ , (600, "шестстотин")+ , (700, "седемстотин")+ , (800, "осемстотин")+ , (900, "деветстотин")+ , (1000, "хиляда")+ , (1234, "хиляда двеста тридесет и четири")+ , (2000, "две хиляди")+ , (3000, "три хиляди")+ , (5000, "пет хиляди")+ , (6000, "шест хиляди")+ , (9000, "девет хиляди")+ , (16000, "шестнадесет хиляди")+ , (21000, "двадесет и едно хиляди")+ , (22000, "двадесет и две хиляди")+ , (22136, "двадесет и две хиляди сто тридесет и шест")+ , (23000, "двадесет и три хиляди")+ , (28000, "двадесет и осем хиляди")+ , (41000, "четиридесет и едно хиляди")+ , (42000, "четиридесет и две хиляди")+ , (49000, "четиридесет и девет хиляди")+ , (100000, "сто хиляди")+ , (200000, "двеста хиляди")+ , (255383, "двеста петдесет и пет хиляди триста осемдесет и три")+ , (300000, "триста хиляди")+ , (300001, "триста хиляди и едно")+ , (300020, "триста хиляди и двадесет")+ , (300825, "триста хиляди осемстотин двадесет и пет")+ , (dec 6, "един милион")+ , (1300825, "един милион триста хиляди осемстотин двадесет и пет")+ , (1021000, "един милион двадесет и едно хиляди")+ , (1001234, "един милион хиляда двеста тридесет и четири")+ , (1000216, "един милион двеста и шестнадесет")+ , (1000074, "един милион седемдесет и четири")+ , (1000004, "един милион и четири")+ , (2 ⋅ dec 6, "два милиона")+ , (5 ⋅ dec 6, "пет милиона")+ , (dec 9, "един милиард")+ , (2 ⋅ dec 9, "два милиарда")+ , (3 ⋅ dec 12, "три трилиона")+ , (dec 15, "един квадрилион")+ , (15 ⋅ dec 15 + 41, "петнадесет квадрилиона четиридесет и едно")+ , (dec 18, "един квинтилион")+ , (dec 21, "един секстилион")+ , (dec 24, "един септилион")+ , (dec 27, "един октилион")+ , (dec 30, "един нонилион")+ , (dec 33, "един децилион")+ , (dec 36, "един индецилион")+ , (dec 39, "един дуодецилион")+ , (dec 42, "един тридецилион")+ , (dec 45, "един куадродецилион")+ , (900 ⋅ dec 45, "деветстотин куадродецилиона")+ ]+ )+ , ( "feminine"+ , feminine defaultInflection+ , [ (1, "една")+ , (2, "две")+ , (200, "двеста")+ , (202, "двеста и две")+ ]+ )+ , ( "masculine"+ , masculine defaultInflection+ , [ (1, "един")+ , (2, "два")+ , (200, "двеста")+ , (202, "двеста и два")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/BM/TestData.hs view
@@ -0,0 +1,203 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] bm++[@ISO639-2@] bam++[@ISO639-3@] bam++[@Native name@] -++[@English name@] Bambara+-}+module Text.Numeral.Language.BM.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-bambara/en/bam/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "kélen")+ , (2, "fila")+ , (3, "sàba")+ , (4, "náani")+ , (5, "dúuru")+ , (6, "wɔɔrɔ")+ , (7, "wólonwula")+ , (8, "séegin")+ , (9, "k̀ɔnɔntɔn")+ , (10, "tán")+ , (11, "tán ní kélen")+ , (12, "tán ní fila")+ , (13, "tán ní sàba")+ , (14, "tán ní náani")+ , (15, "tán ní dúuru")+ , (16, "tán ní wɔɔrɔ")+ , (17, "tán ní wólonwula")+ , (18, "tán ní séegin")+ , (19, "tán ní k̀ɔnɔntɔn")+ , (20, "mùgan")+ , (21, "mùgan ní kélen")+ , (22, "mùgan ní fila")+ , (23, "mùgan ní sàba")+ , (24, "mùgan ní náani")+ , (25, "mùgan ní dúuru")+ , (26, "mùgan ní wɔɔrɔ")+ , (27, "mùgan ní wólonwula")+ , (28, "mùgan ní séegin")+ , (29, "mùgan ní k̀ɔnɔntɔn")+ , (30, "bísàba")+ , (31, "bísàba ní kélen")+ , (32, "bísàba ní fila")+ , (33, "bísàba ní sàba")+ , (34, "bísàba ní náani")+ , (35, "bísàba ní dúuru")+ , (36, "bísàba ní wɔɔrɔ")+ , (37, "bísàba ní wólonwula")+ , (38, "bísàba ní séegin")+ , (39, "bísàba ní k̀ɔnɔntɔn")+ , (40, "bínaani")+ , (41, "bínaani ní kélen")+ , (42, "bínaani ní fila")+ , (43, "bínaani ní sàba")+ , (44, "bínaani ní náani")+ , (45, "bínaani ní dúuru")+ , (46, "bínaani ní wɔɔrɔ")+ , (47, "bínaani ní wólonwula")+ , (48, "bínaani ní séegin")+ , (49, "bínaani ní k̀ɔnɔntɔn")+ , (50, "bídúuru")+ , (51, "bídúuru ní kélen")+ , (52, "bídúuru ní fila")+ , (53, "bídúuru ní sàba")+ , (54, "bídúuru ní náani")+ , (55, "bídúuru ní dúuru")+ , (56, "bídúuru ní wɔɔrɔ")+ , (57, "bídúuru ní wólonwula")+ , (58, "bídúuru ní séegin")+ , (59, "bídúuru ní k̀ɔnɔntɔn")+ , (60, "bíwɔɔrɔ")+ , (61, "bíwɔɔrɔ ní kélen")+ , (62, "bíwɔɔrɔ ní fila")+ , (63, "bíwɔɔrɔ ní sàba")+ , (64, "bíwɔɔrɔ ní náani")+ , (65, "bíwɔɔrɔ ní dúuru")+ , (66, "bíwɔɔrɔ ní wɔɔrɔ")+ , (67, "bíwɔɔrɔ ní wólonwula")+ , (68, "bíwɔɔrɔ ní séegin")+ , (69, "bíwɔɔrɔ ní k̀ɔnɔntɔn")+ , (70, "bíwolonfila")+ , (71, "bíwolonfila ní kélen")+ , (72, "bíwolonfila ní fila")+ , (73, "bíwolonfila ní sàba")+ , (74, "bíwolonfila ní náani")+ , (75, "bíwolonfila ní dúuru")+ , (76, "bíwolonfila ní wɔɔrɔ")+ , (77, "bíwolonfila ní wólonwula")+ , (78, "bíwolonfila ní séegin")+ , (79, "bíwolonfila ní k̀ɔnɔntɔn")+ , (80, "bíséegin")+ , (81, "bíséegin ní kélen")+ , (82, "bíséegin ní fila")+ , (83, "bíséegin ní sàba")+ , (84, "bíséegin ní náani")+ , (85, "bíséegin ní dúuru")+ , (86, "bíséegin ní wɔɔrɔ")+ , (87, "bíséegin ní wólonwula")+ , (88, "bíséegin ní séegin")+ , (89, "bíséegin ní k̀ɔnɔntɔn")+ , (90, "bík̀ɔnɔntɔn")+ , (91, "bík̀ɔnɔntɔn ní kélen")+ , (92, "bík̀ɔnɔntɔn ní fila")+ , (93, "bík̀ɔnɔntɔn ní sàba")+ , (94, "bík̀ɔnɔntɔn ní náani")+ , (95, "bík̀ɔnɔntɔn ní dúuru")+ , (96, "bík̀ɔnɔntɔn ní wɔɔrɔ")+ , (97, "bík̀ɔnɔntɔn ní wólonwula")+ , (98, "bík̀ɔnɔntɔn ní séegin")+ , (99, "bík̀ɔnɔntɔn ní k̀ɔnɔntɔn")+ , (100, "k̀ɛmɛ")+ , (101, "k̀ɛmɛ ní kélen")+ , (102, "k̀ɛmɛ ní fila")+ , (103, "k̀ɛmɛ ní sàba")+ , (104, "k̀ɛmɛ ní náani")+ , (105, "k̀ɛmɛ ní dúuru")+ , (106, "k̀ɛmɛ ní wɔɔrɔ")+ , (107, "k̀ɛmɛ ní wólonwula")+ , (108, "k̀ɛmɛ ní séegin")+ , (109, "k̀ɛmɛ ní k̀ɔnɔntɔn")+ , (110, "k̀ɛmɛ ní tán")+ , (123, "k̀ɛmɛ ní mùgan ní sàba")+ , (200, "k̀ɛmɛ fila")+ , (300, "k̀ɛmɛ sàba")+ , (321, "k̀ɛmɛ sàba ní mùgan ní kélen")+ , (400, "k̀ɛmɛ náani")+ , (500, "k̀ɛmɛ dúuru")+ , (600, "k̀ɛmɛ wɔɔrɔ")+ , (700, "wólonwula k̀ɛmɛ")+ , (800, "séegin k̀ɛmɛ")+ , (900, "k̀ɔnɔntɔn k̀ɛmɛ")+ , (909, "k̀ɔnɔntɔn k̀ɛmɛ ní k̀ɔnɔntɔn")+ , (990, "k̀ɔnɔntɔn k̀ɛmɛ ní bík̀ɔnɔntɔn")+ , (999, "k̀ɔnɔntɔn k̀ɛmɛ ní bík̀ɔnɔntɔn ní k̀ɔnɔntɔn")+ , (1000, "wa kélen")+ , (1001, "wa kélen ní kélen")+ , (1008, "wa kélen ní séegin")+ , (1234, "wa kélen ní k̀ɛmɛ fila ní bísàba ní náani")+ , (2000, "wa fila")+ , (3000, "wa sàba")+ , (4000, "wa náani")+ , (4321, "wa náani ní k̀ɛmɛ sàba ní mùgan ní kélen")+ , (5000, "wa dúuru")+ , (6000, "wa wɔɔrɔ")+ , (7000, "wólonwula wa")+ , (8000, "séegin wa")+ , (9000, "k̀ɔnɔntɔn wa")+ , (10000, "tán wa")+ , (12345, "tán ní wa fila ní k̀ɛmɛ sàba ní bínaani ní dúuru")+ , (20000, "mùgan wa")+ , (30000, "bíwa sàba")+ , (40000, "bínaani wa")+ , (50000, "bíwa dúuru")+ , (54321, "bídúuru ní wa náani ní k̀ɛmɛ sàba ní mùgan ní kélen")+ , (60000, "bíwa wɔɔrɔ")+ , (70000, "bíwa wolonfila")+ , (80000, "bíséegin wa")+ , (90000, "bík̀ɔnɔntɔn wa")+ , (100000, "k̀ɛmɛ wa")+ , (123456, "k̀ɛmɛ ní mùgan ní wa sàba ní k̀ɛmɛ náani ní bídúuru ní wɔɔrɔ")+ , (200000, "k̀ɛmɛ fila wa")+ , (300000, "k̀ɛmɛ sàba wa")+ , (400000, "k̀ɛmɛ náani wa")+ , (500000, "k̀ɛmɛ dúuru wa")+ , (600000, "k̀ɛmɛ wɔɔrɔ wa")+ , (654321, "k̀ɛmɛ wɔɔrɔ ní bídúuru ní wa náani ní k̀ɛmɛ sàba ní mùgan ní kélen")+ , (700000, "wólonwula k̀ɛmɛ wa")+ , (800000, "séegin k̀ɛmɛ wa")+ , (900000, "k̀ɔnɔntɔn k̀ɛmɛ wa")+ , (1000000, "mílyɔn kélen")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/CA/TestData.hs view
@@ -0,0 +1,217 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] ca++[@ISO639-2@] cat++[@ISO639-3@] cat++[@Native name@] català++[@English name@] Catalan+-}+module Text.Numeral.Language.CA.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-catalan/en/cat/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "zero")+ , (1, "un")+ , (2, "dos")+ , (3, "tres")+ , (4, "quatre")+ , (5, "cinc")+ , (6, "sis")+ , (7, "set")+ , (8, "vuit")+ , (9, "nou")+ , (10, "deu")+ , (11, "onze")+ , (12, "dotze")+ , (13, "tretze")+ , (14, "catorze")+ , (15, "quinze")+ , (16, "setze")+ , (17, "disset")+ , (18, "divuit")+ , (19, "dinou")+ , (20, "vint")+ , (21, "vint-i-u")+ , (22, "vint-i-dos")+ , (23, "vint-i-tres")+ , (24, "vint-i-quatre")+ , (25, "vint-i-cinc")+ , (26, "vint-i-sis")+ , (27, "vint-i-set")+ , (28, "vint-i-vuit")+ , (29, "vint-i-nou")+ , (30, "trenta")+ , (31, "trenta-u")+ , (32, "trenta-dos")+ , (33, "trenta-tres")+ , (34, "trenta-quatre")+ , (35, "trenta-cinc")+ , (36, "trenta-sis")+ , (37, "trenta-set")+ , (38, "trenta-vuit")+ , (39, "trenta-nou")+ , (40, "quaranta")+ , (41, "quaranta-u")+ , (42, "quaranta-dos")+ , (43, "quaranta-tres")+ , (44, "quaranta-quatre")+ , (45, "quaranta-cinc")+ , (46, "quaranta-sis")+ , (47, "quaranta-set")+ , (48, "quaranta-vuit")+ , (49, "quaranta-nou")+ , (50, "cinquanta")+ , (51, "cinquanta-u")+ , (52, "cinquanta-dos")+ , (53, "cinquanta-tres")+ , (54, "cinquanta-quatre")+ , (55, "cinquanta-cinc")+ , (56, "cinquanta-sis")+ , (57, "cinquanta-set")+ , (58, "cinquanta-vuit")+ , (59, "cinquanta-nou")+ , (60, "seixanta")+ , (61, "seixanta-u")+ , (62, "seixanta-dos")+ , (63, "seixanta-tres")+ , (64, "seixanta-quatre")+ , (65, "seixanta-cinc")+ , (66, "seixanta-sis")+ , (67, "seixanta-set")+ , (68, "seixanta-vuit")+ , (69, "seixanta-nou")+ , (70, "setanta")+ , (71, "setanta-u")+ , (72, "setanta-dos")+ , (73, "setanta-tres")+ , (74, "setanta-quatre")+ , (75, "setanta-cinc")+ , (76, "setanta-sis")+ , (77, "setanta-set")+ , (78, "setanta-vuit")+ , (79, "setanta-nou")+ , (80, "vuitanta")+ , (81, "vuitanta-u")+ , (82, "vuitanta-dos")+ , (83, "vuitanta-tres")+ , (84, "vuitanta-quatre")+ , (85, "vuitanta-cinc")+ , (86, "vuitanta-sis")+ , (87, "vuitanta-set")+ , (88, "vuitanta-vuit")+ , (89, "vuitanta-nou")+ , (90, "noranta")+ , (91, "noranta-u")+ , (92, "noranta-dos")+ , (93, "noranta-tres")+ , (94, "noranta-quatre")+ , (95, "noranta-cinc")+ , (96, "noranta-sis")+ , (97, "noranta-set")+ , (98, "noranta-vuit")+ , (99, "noranta-nou")+ , (100, "cent")+ , (101, "cent un")+ , (102, "cent dos")+ , (103, "cent tres")+ , (104, "cent quatre")+ , (105, "cent cinc")+ , (106, "cent sis")+ , (107, "cent set")+ , (108, "cent vuit")+ , (109, "cent nou")+ , (110, "cent deu")+ , (123, "cent vint-i-tres")+ , (200, "dos-cents")+ , (300, "tres-cents")+ , (321, "tres-cents vint-i-u")+ , (400, "quatre-cents")+ , (500, "cinc-cents")+ , (600, "sis-cents")+ , (700, "set-cents")+ , (800, "vuit-cents")+ , (900, "nou-cents")+ , (909, "nou-cents nou")+ , (990, "nou-cents noranta")+ , (999, "nou-cents noranta-nou")+ , (1000, "mil")+ , (1001, "mil un")+ , (1008, "mil vuit")+ , (1234, "mil dos-cents trenta-quatre")+ , (2000, "dos mil")+ , (3000, "tres mil")+ , (4000, "quatre mil")+ , (4321, "quatre mil tres-cents vint-i-u")+ , (5000, "cinc mil")+ , (6000, "sis mil")+ , (7000, "set mil")+ , (8000, "vuit mil")+ , (9000, "nou mil")+ , (10000, "deu mil")+ , (12345, "dotze mil tres-cents quaranta-cinc")+ , (20000, "vint mil")+ , (30000, "trenta mil")+ , (40000, "quaranta mil")+ , (50000, "cinquanta mil")+ , (54321, "cinquanta-quatre mil tres-cents vint-i-u")+ , (60000, "seixanta mil")+ , (70000, "setanta mil")+ , (80000, "vuitanta mil")+ , (90000, "noranta mil")+ , (100000, "cent mil")+ , (123456, "cent vint-i-tres mil quatre-cents cinquanta-sis")+ , (200000, "dos-cents mil")+ , (300000, "tres-cents mil")+ , (400000, "quatre-cents mil")+ , (500000, "cinc-cents mil")+ , (600000, "sis-cents mil")+ , (654321, "sis-cents cinquanta-quatre mil tres-cents vint-i-u")+ , (700000, "set-cents mil")+ , (800000, "vuit-cents mil")+ , (900000, "nou-cents mil")+ , (1000000, "un milió")+ , (1234567, "un milió dos-cents trenta-quatre mil cinc-cents seixanta-set")+ , (7654321, "set milions sis-cents cinquanta-quatre mil tres-cents vint-i-u")+ , (1000000000, "mil milions")+ , (1000000000000, "un bilió")+ , (1000000000000000000, "un trilió")+ , (1000000000000000000000, "un triliard")+ , (1000000000000000000000000, "un quadrilió")+ , (1000000000000000000000000000, "un quadriliard")+ , (1000000000000000000000000000000, "un quintilió")+ , (1000000000000000000000000000000000, "un quintiliard")+ , (1000000000000000000000000000000000000, "un sextilió")+ , (1000000000000000000000000000000000000000, "un sextiliard")+ , (1000000000000000000000000000000000000000000, "un septilió")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/CAF/TestData.hs view
@@ -0,0 +1,256 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] caf++[@Native name@] Dakeł (ᑕᗸᒡ)++[@English name@] Southern Carrier+-}+module Text.Numeral.Language.CAF.TestData+ ( cardinals+ , syllabic_cardinals+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-carrier/en/caf/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "lhuk’i")+ , (2, "nankoh")+ , (3, "tak’ih")+ , (4, "dink’ih")+ , (5, "skwunlai")+ , (6, "lhk’uttak’ih")+ , (7, "lhtak’alt’i")+ , (8, "lhk’utdink’ih")+ , (9, "lhuk’i hooloh")+ , (10, "lanezyi")+ , (11, "lanezyi ’o’un lhuk’i")+ , (12, "lanezyi ’o’un nankoh")+ , (13, "lanezyi ’o’un tak’ih")+ , (14, "lanezyi ’o’un dink’ih")+ , (15, "lanezyi ’o’un skwunlai")+ , (16, "lanezyi ’o’un lhk’uttak’ih")+ , (17, "lanezyi ’o’un lhtak’alt’i")+ , (18, "lanezyi ’o’un lhk’utdink’ih")+ , (19, "lanezyi ’o’un lhuk’i hooloh")+ , (20, "nat lanezyi")+ , (21, "nat lanezyi ’o’un lhuk’i")+ , (22, "nat lanezyi ’o’un nankoh")+ , (23, "nat lanezyi ’o’un tak’ih")+ , (24, "nat lanezyi ’o’un dink’ih")+ , (25, "nat lanezyi ’o’un skwunlai")+ , (26, "nat lanezyi ’o’un lhk’uttak’ih")+ , (27, "nat lanezyi ’o’un lhtak’alt’i")+ , (28, "nat lanezyi ’o’un lhk’utdink’ih")+ , (29, "nat lanezyi ’o’un lhuk’i hooloh")+ , (30, "tat lanezyi")+ , (31, "tat lanezyi ’o’un lhuk’i")+ , (32, "tat lanezyi ’o’un nankoh")+ , (33, "tat lanezyi ’o’un tak’ih")+ , (34, "tat lanezyi ’o’un dink’ih")+ , (35, "tat lanezyi ’o’un skwunlai")+ , (36, "tat lanezyi ’o’un lhk’uttak’ih")+ , (37, "tat lanezyi ’o’un lhtak’alt’i")+ , (38, "tat lanezyi ’o’un lhk’utdink’ih")+ , (39, "tat lanezyi ’o’un lhuk’i hooloh")+ , (40, "dit lanezyi")+ , (41, "dit lanezyi ’o’un lhuk’i")+ , (42, "dit lanezyi ’o’un nankoh")+ , (43, "dit lanezyi ’o’un tak’ih")+ , (44, "dit lanezyi ’o’un dink’ih")+ , (45, "dit lanezyi ’o’un skwunlai")+ , (46, "dit lanezyi ’o’un lhk’uttak’ih")+ , (47, "dit lanezyi ’o’un lhtak’alt’i")+ , (48, "dit lanezyi ’o’un lhk’utdink’ih")+ , (49, "dit lanezyi ’o’un lhuk’i hooloh")+ , (50, "skwunlat lanezyi")+ , (51, "skwunlat lanezyi ’o’un lhuk’i")+ , (52, "skwunlat lanezyi ’o’un nankoh")+ , (53, "skwunlat lanezyi ’o’un tak’ih")+ , (54, "skwunlat lanezyi ’o’un dink’ih")+ , (55, "skwunlat lanezyi ’o’un skwunlai")+ , (56, "skwunlat lanezyi ’o’un lhk’uttak’ih")+ , (57, "skwunlat lanezyi ’o’un lhtak’alt’i")+ , (58, "skwunlat lanezyi ’o’un lhk’utdink’ih")+ , (59, "skwunlat lanezyi ’o’un lhuk’i hooloh")+ , (60, "lhk’utat lanezyi")+ , (61, "lhk’utat lanezyi ’o’un lhuk’i")+ , (62, "lhk’utat lanezyi ’o’un nankoh")+ , (63, "lhk’utat lanezyi ’o’un tak’ih")+ , (64, "lhk’utat lanezyi ’o’un dink’ih")+ , (65, "lhk’utat lanezyi ’o’un skwunlai")+ , (66, "lhk’utat lanezyi ’o’un lhk’uttak’ih")+ , (67, "lhk’utat lanezyi ’o’un lhtak’alt’i")+ , (68, "lhk’utat lanezyi ’o’un lhk’utdink’ih")+ , (69, "lhk’utat lanezyi ’o’un lhuk’i hooloh")+ , (70, "lhtak’alt’it lanezyi")+ , (71, "lhtak’alt’it lanezyi ’o’un lhuk’i")+ , (72, "lhtak’alt’it lanezyi ’o’un nankoh")+ , (73, "lhtak’alt’it lanezyi ’o’un tak’ih")+ , (74, "lhtak’alt’it lanezyi ’o’un dink’ih")+ , (75, "lhtak’alt’it lanezyi ’o’un skwunlai")+ , (76, "lhtak’alt’it lanezyi ’o’un lhk’uttak’ih")+ , (77, "lhtak’alt’it lanezyi ’o’un lhtak’alt’i")+ , (78, "lhtak’alt’it lanezyi ’o’un lhk’utdink’ih")+ , (79, "lhtak’alt’it lanezyi ’o’un lhuk’i hooloh")+ , (80, "lhk’udit lanezyi")+ , (81, "lhk’udit lanezyi ’o’un lhuk’i")+ , (82, "lhk’udit lanezyi ’o’un nankoh")+ , (83, "lhk’udit lanezyi ’o’un tak’ih")+ , (84, "lhk’udit lanezyi ’o’un dink’ih")+ , (85, "lhk’udit lanezyi ’o’un skwunlai")+ , (86, "lhk’udit lanezyi ’o’un lhk’uttak’ih")+ , (87, "lhk’udit lanezyi ’o’un lhtak’alt’i")+ , (88, "lhk’udit lanezyi ’o’un lhk’utdink’ih")+ , (89, "lhk’udit lanezyi ’o’un lhuk’i hooloh")+ , (90, "lhuk’i hooloh lanezyi")+ , (91, "lhuk’i hooloh lanezyi ’o’un lhuk’i")+ , (92, "lhuk’i hooloh lanezyi ’o’un nankoh")+ , (93, "lhuk’i hooloh lanezyi ’o’un tak’ih")+ , (94, "lhuk’i hooloh lanezyi ’o’un dink’ih")+ , (95, "lhuk’i hooloh lanezyi ’o’un skwunlai")+ , (96, "lhuk’i hooloh lanezyi ’o’un lhk’uttak’ih")+ , (97, "lhuk’i hooloh lanezyi ’o’un lhtak’alt’i")+ , (98, "lhuk’i hooloh lanezyi ’o’un lhk’utdink’ih")+ , (99, "lhuk’i hooloh lanezyi ’o’un lhuk’i hooloh")+ , (100, "lhk’ut’lanezyi")+ ]+ )+ ]++-- Using Carrier sylllabics+syllabic_cardinals ∷ (Num i) ⇒ TestData i+syllabic_cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "ᘰᗿ")+ , (2, "ᘇᐣᗶᑋ")+ , (3, "ᗡᗿᑋ")+ , (4, "ᑔᐣᗿᑋ")+ , (5, "ᔆᐠᗒᐣᘧᐉ")+ , (6, "ᒡᗽᐪᗡᗿᑋ")+ , (7, "ᒡᗡᘀᑊᗦ")+ , (8, "ᒡᗽᐪᑔᐣᗿᑋ")+ , (9, "ᘰᗿ ᐯᘣᑋ")+ , (10, "ᘧᘅᙆᘒ")+ , (11, "ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ")+ , (12, "ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘇᐣᗶᑋ")+ , (13, "ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᗡᗿᑋ")+ , (14, "ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᑔᐣᗿᑋ")+ , (15, "ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᔆᐠᗒᐣᘧᐉ")+ , (16, "ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᗡᗿᑋ")+ , (17, "ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗡᘀᑊᗦ")+ , (18, "ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᑔᐣᗿᑋ")+ , (19, "ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ ᐯᘣᑋ")+ , (20, "ᘇᐪ ᘧᘅᙆᘒ")+ , (21, "ᘇᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ")+ , (22, "ᘇᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘇᐣᗶᑋ")+ , (23, "ᘇᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᗡᗿᑋ")+ , (24, "ᘇᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᑔᐣᗿᑋ")+ , (25, "ᘇᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᔆᐠᗒᐣᘧᐉ")+ , (26, "ᘇᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᗡᗿᑋ")+ , (27, "ᘇᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗡᘀᑊᗦ")+ , (28, "ᘇᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᑔᐣᗿᑋ")+ , (29, "ᘇᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ ᐯᘣᑋ")+ , (30, "ᗡᐪ ᘧᘅᙆᘒ")+ , (31, "ᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ")+ , (32, "ᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘇᐣᗶᑋ")+ , (33, "ᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᗡᗿᑋ")+ , (34, "ᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᑔᐣᗿᑋ")+ , (35, "ᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᔆᐠᗒᐣᘧᐉ")+ , (36, "ᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᗡᗿᑋ")+ , (37, "ᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗡᘀᑊᗦ")+ , (38, "ᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᑔᐣᗿᑋ")+ , (39, "ᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ ᐯᘣᑋ")+ , (40, "ᑔᐪ ᘧᘅᙆᘒ")+ , (41, "ᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ")+ , (42, "ᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘇᐣᗶᑋ")+ , (43, "ᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᗡᗿᑋ")+ , (44, "ᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᑔᐣᗿᑋ")+ , (45, "ᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᔆᐠᗒᐣᘧᐉ")+ , (46, "ᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᗡᗿᑋ")+ , (47, "ᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗡᘀᑊᗦ")+ , (48, "ᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᑔᐣᗿᑋ")+ , (49, "ᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ ᐯᘣᑋ")+ , (50, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ")+ , (51, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ")+ , (52, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘇᐣᗶᑋ")+ , (53, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᗡᗿᑋ")+ , (54, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᑔᐣᗿᑋ")+ , (55, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᔆᐠᗒᐣᘧᐉ")+ , (56, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᗡᗿᑋ")+ , (57, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗡᘀᑊᗦ")+ , (58, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᑔᐣᗿᑋ")+ , (59, "ᔆᐠᗒᐣᘧᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ ᐯᘣᑋ")+ , (60, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ")+ , (61, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ")+ , (62, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘇᐣᗶᑋ")+ , (63, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᗡᗿᑋ")+ , (64, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᑔᐣᗿᑋ")+ , (65, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᔆᐠᗒᐣᘧᐉ")+ , (66, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᗡᗿᑋ")+ , (67, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗡᘀᑊᗦ")+ , (68, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᑔᐣᗿᑋ")+ , (69, "ᒡᗽᗡᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ ᐯᘣᑋ")+ , (70, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ")+ , (71, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ")+ , (72, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘇᐣᗶᑋ")+ , (73, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᗡᗿᑋ")+ , (74, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᑔᐣᗿᑋ")+ , (75, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᔆᐠᗒᐣᘧᐉ")+ , (76, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᗡᗿᑋ")+ , (77, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗡᘀᑊᗦ")+ , (78, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᑔᐣᗿᑋ")+ , (79, "ᒡᗡᘀᑊᗦᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ ᐯᘣᑋ")+ , (80, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ")+ , (81, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ")+ , (82, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘇᐣᗶᑋ")+ , (83, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᗡᗿᑋ")+ , (84, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᑔᐣᗿᑋ")+ , (85, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᔆᐠᗒᐣᘧᐉ")+ , (86, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᗡᗿᑋ")+ , (87, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗡᘀᑊᗦ")+ , (88, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᑔᐣᗿᑋ")+ , (89, "ᒡᗽᑔᐪ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ ᐯᘣᑋ")+ , (90, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ")+ , (91, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ")+ , (92, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘇᐣᗶᑋ")+ , (93, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᗡᗿᑋ")+ , (94, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᑔᐣᗿᑋ")+ , (95, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᔆᐠᗒᐣᘧᐉ")+ , (96, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᗡᗿᑋ")+ , (97, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗡᘀᑊᗦ")+ , (98, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᒡᗽᐪᑔᐣᗿᑋ")+ , (99, "ᘰᗿ ᐯᘣᑋ ᘧᘅᙆᘒ ᐧᐃᐧᐅᐣ ᘰᗿ ᐯᘣᑋ")+ , (100, "ᒡᗽᐪᐧᘧᘅᙆᘒ")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/CBK/TestData.hs view
@@ -0,0 +1,215 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] cbk++[@Native name@] Chabacano++[@English name@] Chavacano+-}+module Text.Numeral.Language.CBK.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-chavacano/en/cbk/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "cero")+ , (1, "uno")+ , (2, "dos")+ , (3, "tres")+ , (4, "cuatro")+ , (5, "cinco")+ , (6, "seis")+ , (7, "siete")+ , (8, "ocho")+ , (9, "nueve")+ , (10, "diez")+ , (11, "once")+ , (12, "doce")+ , (13, "trece")+ , (14, "catorce")+ , (15, "quince")+ , (16, "dieciséis")+ , (17, "diecisiete")+ , (18, "dieciocho")+ , (19, "diecinueve")+ , (20, "veinte")+ , (21, "veintiún")+ , (22, "veintidós")+ , (23, "veintitrés")+ , (24, "veinticuatro")+ , (25, "veinticinco")+ , (26, "veintiséis")+ , (27, "veintisiete")+ , (28, "veintiocho")+ , (29, "veintinueve")+ , (30, "treinta")+ , (31, "treinta y uno")+ , (32, "treinta y dos")+ , (33, "treinta y tres")+ , (34, "treinta y cuatro")+ , (35, "treinta y cinco")+ , (36, "treinta y seis")+ , (37, "treinta y siete")+ , (38, "treinta y ocho")+ , (39, "treinta y nueve")+ , (40, "cuarenta")+ , (41, "cuarenta y uno")+ , (42, "cuarenta y dos")+ , (43, "cuarenta y tres")+ , (44, "cuarenta y cuatro")+ , (45, "cuarenta y cinco")+ , (46, "cuarenta y seis")+ , (47, "cuarenta y siete")+ , (48, "cuarenta y ocho")+ , (49, "cuarenta y nueve")+ , (50, "cinquenta")+ , (51, "cinquenta y uno")+ , (52, "cinquenta y dos")+ , (53, "cinquenta y tres")+ , (54, "cinquenta y cuatro")+ , (55, "cinquenta y cinco")+ , (56, "cinquenta y seis")+ , (57, "cinquenta y siete")+ , (58, "cinquenta y ocho")+ , (59, "cinquenta y nueve")+ , (60, "sesenta")+ , (61, "sesenta y uno")+ , (62, "sesenta y dos")+ , (63, "sesenta y tres")+ , (64, "sesenta y cuatro")+ , (65, "sesenta y cinco")+ , (66, "sesenta y seis")+ , (67, "sesenta y siete")+ , (68, "sesenta y ocho")+ , (69, "sesenta y nueve")+ , (70, "setenta")+ , (71, "setenta y uno")+ , (72, "setenta y dos")+ , (73, "setenta y tres")+ , (74, "setenta y cuatro")+ , (75, "setenta y cinco")+ , (76, "setenta y seis")+ , (77, "setenta y siete")+ , (78, "setenta y ocho")+ , (79, "setenta y nueve")+ , (80, "ochenta")+ , (81, "ochenta y uno")+ , (82, "ochenta y dos")+ , (83, "ochenta y tres")+ , (84, "ochenta y cuatro")+ , (85, "ochenta y cinco")+ , (86, "ochenta y seis")+ , (87, "ochenta y siete")+ , (88, "ochenta y ocho")+ , (89, "ochenta y nueve")+ , (90, "noventa")+ , (91, "noventa y uno")+ , (92, "noventa y dos")+ , (93, "noventa y tres")+ , (94, "noventa y cuatro")+ , (95, "noventa y cinco")+ , (96, "noventa y seis")+ , (97, "noventa y siete")+ , (98, "noventa y ocho")+ , (99, "noventa y nueve")+ , (100, "ciento")+ , (101, "ciento uno")+ , (102, "ciento dos")+ , (103, "ciento tres")+ , (104, "ciento cuatro")+ , (105, "ciento cinco")+ , (106, "ciento seis")+ , (107, "ciento siete")+ , (108, "ciento ocho")+ , (109, "ciento nueve")+ , (110, "ciento diez")+ , (123, "ciento veintitrés")+ , (200, "dos cientos")+ , (300, "tres cientos")+ , (321, "tres cientos veintiún")+ , (400, "cuatro cientos")+ , (500, "quinientos")+ , (600, "seis cientos")+ , (700, "siete cientos")+ , (800, "ocho cientos")+ , (900, "nueve cientos")+ , (909, "nueve cientos nueve")+ , (990, "nueve cientos noventa")+ , (999, "nueve cientos noventa y nueve")+ , (1000, "un mil")+ , (1001, "un mil uno")+ , (1008, "un mil ocho")+ , (1234, "un mil dos cientos treinta y cuatro")+ , (2000, "dos mil")+ , (3000, "tres mil")+ , (4000, "cuatro mil")+ , (4321, "cuatro mil tres cientos veintiún")+ , (5000, "cinco mil")+ , (6000, "seis mil")+ , (7000, "siete mil")+ , (8000, "ocho mil")+ , (9000, "nueve mil")+ , (10000, "diez mil")+ , (12345, "doce mil tres cientos cuarenta y cinco")+ , (20000, "veinte mil")+ , (30000, "treinta mil")+ , (40000, "cuarenta mil")+ , (50000, "cinquenta mil")+ , (54321, "cinquenta y cuatro mil tres cientos veintiún")+ , (60000, "sesenta mil")+ , (70000, "setenta mil")+ , (80000, "ochenta mil")+ , (90000, "noventa mil")+ , (100000, "ciento mil")+ , (123456, "ciento veintitrés mil cuatro cientos cinquenta y seis")+ , (200000, "dos cientos mil")+ , (300000, "tres cientos mil")+ , (400000, "cuatro cientos mil")+ , (500000, "quinientos mil")+ , (600000, "seis cientos mil")+ , (654321, "seis cientos cinquenta y cuatro mil tres cientos veintiún")+ , (700000, "siete cientos mil")+ , (800000, "ocho cientos mil")+ , (900000, "nueve cientos mil")+ , (1000000, "un millón")+ , (1234567, "un millón dos cientos treinta y cuatro mil quinientos sesenta y siete")+ , (7654321, "siete millones seis cientos cinquenta y cuatro mil tres cientos veintiún")+ , (1000000000, "un billón")+ , (1000000000000, "un trillón")+ , (1000000000000000, "un cuatrillón")+ , (1000000000000000000, "un quintillón")+ , (1000000000000000000000, "un sextillón")+ , (1000000000000000000000000, "un septillón")+ , (1000000000000000000000000000, "un octillón")+ , (1000000000000000000000000000000, "un nonillón")+ , (1000000000000000000000000000000000, "un decallón")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/CHN/TestData.hs view
@@ -0,0 +1,140 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2B@] chn++[@ISO639-3@] chn++[@Native name@] -++[@English name@] Chinook Jargon+-}++module Text.Numeral.Language.CHN.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "ikt")+ , (2, "mokst")+ , (3, "klone")+ , (4, "lakit")+ , (5, "kwinnum")+ , (6, "taghum")+ , (7, "sinamokst")+ , (8, "stotekin")+ , (9, "kwaist")+ , (10, "tahtlum")+ , (11, "tahtlum pe ikt")+ , (12, "tahtlum pe mokst")+ , (13, "tahtlum pe klone")+ , (14, "tahtlum pe lakit")+ , (15, "tahtlum pe kwinnum")+ , (16, "tahtlum pe taghum")+ , (17, "tahtlum pe sinamokst")+ , (18, "tahtlum pe stotekin")+ , (19, "tahtlum pe kwaist")+ , (20, "mokst tahtlum")+ , (21, "mokst tahtlum pe ikt")+ , (22, "mokst tahtlum pe mokst")+ , (23, "mokst tahtlum pe klone")+ , (24, "mokst tahtlum pe lakit")+ , (25, "mokst tahtlum pe kwinnum")+ , (26, "mokst tahtlum pe taghum")+ , (27, "mokst tahtlum pe sinamokst")+ , (28, "mokst tahtlum pe stotekin")+ , (29, "mokst tahtlum pe kwaist")+ , (30, "klone tahtlum")+ , (31, "klone tahtlum pe ikt")+ , (32, "klone tahtlum pe mokst")+ , (33, "klone tahtlum pe klone")+ , (34, "klone tahtlum pe lakit")+ , (35, "klone tahtlum pe kwinnum")+ , (36, "klone tahtlum pe taghum")+ , (37, "klone tahtlum pe sinamokst")+ , (38, "klone tahtlum pe stotekin")+ , (39, "klone tahtlum pe kwaist")+ , (40, "lakit tahtlum")+ , (41, "lakit tahtlum pe ikt")+ , (42, "lakit tahtlum pe mokst")+ , (43, "lakit tahtlum pe klone")+ , (44, "lakit tahtlum pe lakit")+ , (45, "lakit tahtlum pe kwinnum")+ , (46, "lakit tahtlum pe taghum")+ , (47, "lakit tahtlum pe sinamokst")+ , (48, "lakit tahtlum pe stotekin")+ , (49, "lakit tahtlum pe kwaist")+ , (50, "kwinnum tahtlum")+ , (51, "kwinnum tahtlum pe ikt")+ , (52, "kwinnum tahtlum pe mokst")+ , (53, "kwinnum tahtlum pe klone")+ , (54, "kwinnum tahtlum pe lakit")+ , (55, "kwinnum tahtlum pe kwinnum")+ , (56, "kwinnum tahtlum pe taghum")+ , (57, "kwinnum tahtlum pe sinamokst")+ , (58, "kwinnum tahtlum pe stotekin")+ , (59, "kwinnum tahtlum pe kwaist")+ , (60, "taghum tahtlum")+ , (61, "taghum tahtlum pe ikt")+ , (62, "taghum tahtlum pe mokst")+ , (63, "taghum tahtlum pe klone")+ , (64, "taghum tahtlum pe lakit")+ , (65, "taghum tahtlum pe kwinnum")+ , (66, "taghum tahtlum pe taghum")+ , (67, "taghum tahtlum pe sinamokst")+ , (68, "taghum tahtlum pe stotekin")+ , (69, "taghum tahtlum pe kwaist")+ , (70, "sinamokst tahtlum")+ , (71, "sinamokst tahtlum pe ikt")+ , (72, "sinamokst tahtlum pe mokst")+ , (73, "sinamokst tahtlum pe klone")+ , (74, "sinamokst tahtlum pe lakit")+ , (75, "sinamokst tahtlum pe kwinnum")+ , (76, "sinamokst tahtlum pe taghum")+ , (77, "sinamokst tahtlum pe sinamokst")+ , (78, "sinamokst tahtlum pe stotekin")+ , (79, "sinamokst tahtlum pe kwaist")+ , (80, "stotekin tahtlum")+ , (81, "stotekin tahtlum pe ikt")+ , (82, "stotekin tahtlum pe mokst")+ , (83, "stotekin tahtlum pe klone")+ , (84, "stotekin tahtlum pe lakit")+ , (85, "stotekin tahtlum pe kwinnum")+ , (86, "stotekin tahtlum pe taghum")+ , (87, "stotekin tahtlum pe sinamokst")+ , (88, "stotekin tahtlum pe stotekin")+ , (89, "stotekin tahtlum pe kwaist")+ , (90, "kwaist tahtlum")+ , (91, "kwaist tahtlum pe ikt")+ , (92, "kwaist tahtlum pe mokst")+ , (93, "kwaist tahtlum pe klone")+ , (94, "kwaist tahtlum pe lakit")+ , (95, "kwaist tahtlum pe kwinnum")+ , (96, "kwaist tahtlum pe taghum")+ , (97, "kwaist tahtlum pe sinamokst")+ , (98, "kwaist tahtlum pe stotekin")+ , (99, "kwaist tahtlum pe kwaist")+ , (100, "tukamonuk")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/CHR/TestData.hs view
@@ -0,0 +1,190 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] chr++[@ISO639-3@] chr++[@Native name@] ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ (Tsalagi Gawonihisdi)++[@English name@] Cherokee+-}+module Text.Numeral.Language.CHR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://en.wikipedia.org/wiki/Cherokee_language+ http://www.languagesandnumbers.com/how-to-count-in-cherokee/en/chr/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "Ꮭ ᎪᏍᏗ")+ , (1, "ᏐᏬ")+ , (2, "ᏔᎵ")+ , (3, "ᏦᎢ")+ , (4, "ᏅᎩ")+ , (5, "ᎯᏍᎩ")+ , (6, "ᏑᏓᎵ")+ , (7, "ᎦᎵᏉᎩ")+ , (8, "ᏧᏁᎳ")+ , (9, "ᏐᏁᎳ")+ , (10, "ᏍᎪᎯ")+ , (11, "ᏌᏚ")+ , (12, "ᏔᎵᏚ")+ , (13, "ᏦᎦᏚ")+ , (14, "ᏂᎦᏚ")+ , (15, "ᎯᏍᎦᏚ")+ , (16, "ᏓᎳᏚ")+ , (17, "ᎦᎵᏆᏚ")+ , (18, "ᏁᎳᏚ")+ , (19, "ᏐᏁᎳᏚ")+ , (20, "ᏔᎵᏍᎪᎯ")+ , (21, "ᏔᎵᏍᎪ ᏌᏬ")+ , (22, "ᏔᎵᏍᎪ ᏔᎵ")+ , (23, "ᏔᎵᏍᎪ ᏦᎢ")+ , (24, "ᏔᎵᏍᎪ ᏅᎩ")+ , (25, "ᏔᎵᏍᎪ ᎯᏍᎩ")+ , (26, "ᏔᎵᏍᎪ ᏑᏓᎵ")+ , (27, "ᏔᎵᏍᎪ ᎦᎵᏉᎩ")+ , (28, "ᏔᎵᏍᎪ ᏧᏁᎳ")+ , (29, "ᏔᎵᏍᎪ ᏐᏁᎳ")+ , (30, "ᏦᎢᏍᎪᎯ")+ , (31, "ᏦᎢᏍᎪ ᏌᏬ")+ , (32, "ᏦᎢᏍᎪ ᏔᎵ")+ , (33, "ᏦᎢᏍᎪ ᏦᎢ")+ , (34, "ᏦᎢᏍᎪ ᏅᎩ")+ , (35, "ᏦᎢᏍᎪ ᎯᏍᎩ")+ , (36, "ᏦᎢᏍᎪ ᏑᏓᎵ")+ , (37, "ᏦᎢᏍᎪ ᎦᎵᏉᎩ")+ , (38, "ᏦᎢᏍᎪ ᏧᏁᎳ")+ , (39, "ᏦᎢᏍᎪ ᏐᏁᎳ")+ , (40, "ᏅᎩᏍᎪᎯ")+ , (41, "ᏅᎩᏍᎪ ᏌᏬ")+ , (42, "ᏅᎩᏍᎪ ᏔᎵ")+ , (43, "ᏅᎩᏍᎪ ᏦᎢ")+ , (44, "ᏅᎩᏍᎪ ᏅᎩ")+ , (45, "ᏅᎩᏍᎪ ᎯᏍᎩ")+ , (46, "ᏅᎩᏍᎪ ᏑᏓᎵ")+ , (47, "ᏅᎩᏍᎪ ᎦᎵᏉᎩ")+ , (48, "ᏅᎩᏍᎪ ᏧᏁᎳ")+ , (49, "ᏅᎩᏍᎪ ᏐᏁᎳ")+ , (50, "ᎯᏍᎩᏍᎪᎯ")+ , (51, "ᎯᏍᎩᏍᎪ ᏌᏬ")+ , (52, "ᎯᏍᎩᏍᎪ ᏔᎵ")+ , (53, "ᎯᏍᎩᏍᎪ ᏦᎢ")+ , (54, "ᎯᏍᎩᏍᎪ ᏅᎩ")+ , (55, "ᎯᏍᎩᏍᎪ ᎯᏍᎩ")+ , (56, "ᎯᏍᎩᏍᎪ ᏑᏓᎵ")+ , (57, "ᎯᏍᎩᏍᎪ ᎦᎵᏉᎩ")+ , (58, "ᎯᏍᎩᏍᎪ ᏧᏁᎳ")+ , (59, "ᎯᏍᎩᏍᎪ ᏐᏁᎳ")+ , (60, "ᏑᏓᎵᏍᎪᎯ")+ , (61, "ᏑᏓᎵᏍᎪ ᏌᏬ")+ , (62, "ᏑᏓᎵᏍᎪ ᏔᎵ")+ , (63, "ᏑᏓᎵᏍᎪ ᏦᎢ")+ , (64, "ᏑᏓᎵᏍᎪ ᏅᎩ")+ , (65, "ᏑᏓᎵᏍᎪ ᎯᏍᎩ")+ , (66, "ᏑᏓᎵᏍᎪ ᏑᏓᎵ")+ , (67, "ᏑᏓᎵᏍᎪ ᎦᎵᏉᎩ")+ , (68, "ᏑᏓᎵᏍᎪ ᏧᏁᎳ")+ , (69, "ᏑᏓᎵᏍᎪ ᏐᏁᎳ")+ , (70, "ᎦᎵᏆᏍᎪᎯ")+ , (71, "ᎦᎵᏆᏍᎪ ᏌᏬ")+ , (72, "ᎦᎵᏆᏍᎪ ᏔᎵ")+ , (73, "ᎦᎵᏆᏍᎪ ᏦᎢ")+ , (74, "ᎦᎵᏆᏍᎪ ᏅᎩ")+ , (75, "ᎦᎵᏆᏍᎪ ᎯᏍᎩ")+ , (76, "ᎦᎵᏆᏍᎪ ᏑᏓᎵ")+ , (77, "ᎦᎵᏆᏍᎪ ᎦᎵᏉᎩ")+ , (78, "ᎦᎵᏆᏍᎪ ᏧᏁᎳ")+ , (79, "ᎦᎵᏆᏍᎪ ᏐᏁᎳ")+ , (80, "ᏧᏁᎳᏍᎪᎯ")+ , (81, "ᏧᏁᎳᏍᎪ ᏌᏬ")+ , (82, "ᏧᏁᎳᏍᎪ ᏔᎵ")+ , (83, "ᏧᏁᎳᏍᎪ ᏦᎢ")+ , (84, "ᏧᏁᎳᏍᎪ ᏅᎩ")+ , (85, "ᏧᏁᎳᏍᎪ ᎯᏍᎩ")+ , (86, "ᏧᏁᎳᏍᎪ ᏑᏓᎵ")+ , (87, "ᏧᏁᎳᏍᎪ ᎦᎵᏉᎩ")+ , (88, "ᏧᏁᎳᏍᎪ ᏧᏁᎳ")+ , (89, "ᏧᏁᎳᏍᎪ ᏐᏁᎳ")+ , (90, "ᏐᏁᎳᏍᎪᎯ")+ , (91, "ᏐᏁᎳᏍᎪ ᏌᏬ")+ , (92, "ᏐᏁᎳᏍᎪ ᏔᎵ")+ , (93, "ᏐᏁᎳᏍᎪ ᏦᎢ")+ , (94, "ᏐᏁᎳᏍᎪ ᏅᎩ")+ , (95, "ᏐᏁᎳᏍᎪ ᎯᏍᎩ")+ , (96, "ᏐᏁᎳᏍᎪ ᏑᏓᎵ")+ , (97, "ᏐᏁᎳᏍᎪ ᎦᎵᏉᎩ")+ , (98, "ᏐᏁᎳᏍᎪ ᏧᏁᎳ")+ , (99, "ᏐᏁᎳᏍᎪ ᏐᏁᎳ")+ , (100, "ᏍᎪᎯᏥᏆ")+ , (101, "ᏐᏬ ᏍᎪᎯᏥᏆ ᏌᏬ")+ , (102, "ᏐᏬ ᏍᎪᎯᏥᏆ ᏔᎵ")+ , (110, "ᏐᏬ ᏍᎪᎯᏥᏆ ᏍᎪᎯ")+ , (111, "ᏐᏬ ᏍᎪᎯᏥᏆ ᏌᏚ")+ , (112, "ᏐᏬ ᏍᎪᎯᏥᏆ ᏔᎵᏚ")+ , (123, "ᏐᏬ ᏍᎪᎯᏥᏆ ᏔᎵᏍᎪ ᏦᎢ")+ , (200, "ᏔᎵᏍᎪᎯᏥᏆ")+ , (234, "ᏔᎵ ᏍᎪᎯᏥᏆ ᏦᎢᏍᎪ ᏅᎩ")+ , (300, "ᏦᏍᎪᎯᏥᏆ")+ , (301, "ᏦᎢ ᏍᎪᎯᏥᏆ ᏌᏬ")+ , (400, "ᏅᎩᏍᎪᎯᏥᏆ")+ , (500, "ᎯᏍᎩᏍᎪᎯᏥᏆ")+ , (600, "ᏑᏓᎵᏍᎪᎯᏥᏆ")+ , (700, "ᎦᎵᏆᏍᎪᎯᏥᏆ")+ , (707, "ᎦᎵᏉᎩ ᏍᎪᎯᏥᏆ ᎦᎵᏉᎩ")+ , (800, "ᏧᏁᎵᏍᎪᎯᏥᏆ")+ , (900, "ᏐᏁᎵᏍᎪᎯᏥᏆ")+ , (901, "ᏐᏁᎵ ᏍᎪᎯᏥᏆ ᏌᏬ")+ , (999, "ᏐᏁᎵ ᏍᎪᎯᏥᏆ ᏐᏁᎳᏍᎪ ᏐᏁᎳ")+ , (1000, "ᏐᏬ ᎢᏯᎦᏴᎵ")+ , (1001, "ᏐᏬ ᎢᏯᎦᏴᎵ ᏌᏬ")+ , (1100, "ᏐᏬ ᎢᏯᎦᏴᎵ ᏍᎪᎯᏥᏆ")+ , (1101, "ᏐᏬ ᎢᏯᎦᏴᎵ ᏐᏬ ᏍᎪᎯᏥᏆ ᏌᏬ")+ , (1111, "ᏐᏬ ᎢᏯᎦᏴᎵ ᏐᏬ ᏍᎪᎯᏥᏆ ᏌᏚ")+ , (2000, "ᏔᎵ ᎢᏯᎦᏴᎵ")+ , (3000, "ᏦᎢ ᎢᏯᎦᏴᎵ")+ , (9999, "ᏐᏁᎳ ᎢᏯᎦᏴᎵ ᏐᏁᎵ ᏍᎪᎯᏥᏆ ᏐᏁᎳᏍᎪ ᏐᏁᎳ")+ , (10000, "ᏍᎪᎯ ᎢᏯᎦᏴᎵ")+ , (12345, "ᏔᎵᏚ ᎢᏯᎦᏴᎵ ᏦᎢ ᏍᎪᎯᏥᏆ ᏅᎩᏍᎪ ᎯᏍᎩ")+ , (54321, "ᎯᏍᎩᏍᎪ ᏅᎩ ᎢᏯᎦᏴᎵ ᏦᎢ ᏍᎪᎯᏥᏆ ᏔᎵᏍᎪ ᏌᏬ")+ , (99999, "ᏐᏁᎳᏍᎪ ᏐᏁᎳ ᎢᏯᎦᏴᎵ ᏐᏁᎵ ᏍᎪᎯᏥᏆ ᏐᏁᎳᏍᎪ ᏐᏁᎳ")+ , (100000, "ᏐᏬ ᏍᎪᎯᏥᏆ ᎢᏯᎦᏴᎵ")+ , (123456, "ᏐᏬ ᏍᎪᎯᏥᏆ ᏔᎵᏍᎪ ᏦᎢ ᎢᏯᎦᏴᎵ ᏅᎩ ᏍᎪᎯᏥᏆ ᎯᏍᎩᏍᎪ ᏑᏓᎵ")+ , (200000, "ᏔᎵ ᏍᎪᎯᏥᏆ ᎢᏯᎦᏴᎵ")+ , (300000, "ᏦᎢ ᏍᎪᎯᏥᏆ ᎢᏯᎦᏴᎵ")+ , (400000, "ᏅᎩ ᏍᎪᎯᏥᏆ ᎢᏯᎦᏴᎵ")+ , (500000, "ᎯᏍᎩ ᏍᎪᎯᏥᏆ ᎢᏯᎦᏴᎵ")+ , (600000, "ᏑᏓᎵ ᏍᎪᎯᏥᏆ ᎢᏯᎦᏴᎵ")+ , (654321, "ᏑᏓᎵ ᏍᎪᎯᏥᏆ ᎯᏍᎩᏍᎪ ᏅᎩ ᎢᏯᎦᏴᎵ ᏦᎢ ᏍᎪᎯᏥᏆ ᏔᎵᏍᎪ ᏌᏬ")+ , (700000, "ᎦᎵᏉᎩ ᏍᎪᎯᏥᏆ ᎢᏯᎦᏴᎵ")+ , (800000, "ᏧᏁᎳ ᏍᎪᎯᏥᏆ ᎢᏯᎦᏴᎵ")+ , (900000, "ᏐᏁᎵ ᏍᎪᎯᏥᏆ ᎢᏯᎦᏴᎵ")+ , (999999, "ᏐᏁᎵ ᏍᎪᎯᏥᏆ ᏐᏁᎳᏍᎪ ᏐᏁᎳ ᎢᏯᎦᏴᎵ ᏐᏁᎵ ᏍᎪᎯᏥᏆ ᏐᏁᎳᏍᎪ ᏐᏁᎳ")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/CLM/TestData.hs view
@@ -0,0 +1,151 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2B@] -++[@ISO639-3@] clm++[@Native name@] nəxʷsƛ̕ay̕əmúcən++[@English name@] Klallam+-}++module Text.Numeral.Language.CLM.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "nə́c̕uʔ")+ , (2, "čə́saʔ")+ , (3, "ɬíxʷ")+ , (4, "ŋús")+ , (5, "ɬq̕áčš")+ , (6, "t̕x̣ə́ŋ")+ , (7, "c̕úʔkʷs")+ , (8, "táʔcs")+ , (9, "tə́kʷxʷ")+ , (10, "ʔúpən")+ , (11, "ʔúpən ʔiʔ nə́c̕uʔ")+ , (12, "ʔúpən ʔiʔ čə́saʔ")+ , (13, "ʔúpən ʔiʔ ɬíxʷ")+ , (14, "ʔúpən ʔiʔ ŋús")+ , (15, "ʔúpən ʔiʔ ɬq̕áčš")+ , (16, "ʔúpən ʔiʔ t̕x̣ə́ŋ")+ , (17, "ʔúpən ʔiʔ c̕úʔkʷs")+ , (18, "ʔúpən ʔiʔ táʔcs")+ , (19, "ʔúpən ʔiʔ tə́kʷxʷ")+ , (20, "nəc̕xʷk̕ʷə́s")+ , (21, "nəc̕xʷk̕ʷə́s ʔiʔ nə́c̕uʔ")+ , (22, "nəc̕xʷk̕ʷə́s ʔiʔ čə́saʔ")+ , (23, "nəc̕xʷk̕ʷə́s ʔiʔ ɬíxʷ")+ , (24, "nəc̕xʷk̕ʷə́s ʔiʔ ŋús")+ , (25, "nəc̕xʷk̕ʷə́s ʔiʔ ɬq̕áčš")+ , (26, "nəc̕xʷk̕ʷə́s ʔiʔ t̕x̣ə́ŋ")+ , (27, "nəc̕xʷk̕ʷə́s ʔiʔ c̕úʔkʷs")+ , (28, "nəc̕xʷk̕ʷə́s ʔiʔ táʔcs")+ , (29, "nəc̕xʷk̕ʷə́s ʔiʔ tə́kʷxʷ")+ , (30, "ɬxʷɬšáʔ")+ , (31, "ɬxʷɬšáʔ ʔiʔ nə́c̕uʔ")+ , (32, "ɬxʷɬšáʔ ʔiʔ čə́saʔ")+ , (33, "ɬxʷɬšáʔ ʔiʔ ɬíxʷ")+ , (34, "ɬxʷɬšáʔ ʔiʔ ŋús")+ , (35, "ɬxʷɬšáʔ ʔiʔ ɬq̕áčš")+ , (36, "ɬxʷɬšáʔ ʔiʔ t̕x̣ə́ŋ")+ , (37, "ɬxʷɬšáʔ ʔiʔ c̕úʔkʷs")+ , (38, "ɬxʷɬšáʔ ʔiʔ táʔcs")+ , (39, "ɬxʷɬšáʔ ʔiʔ tə́kʷxʷ")+ , (40, "ŋəsɬšáʔ")+ , (41, "ŋəsɬšáʔ ʔiʔ nə́c̕uʔ")+ , (42, "ŋəsɬšáʔ ʔiʔ čə́saʔ")+ , (43, "ŋəsɬšáʔ ʔiʔ ɬíxʷ")+ , (44, "ŋəsɬšáʔ ʔiʔ ŋús")+ , (45, "ŋəsɬšáʔ ʔiʔ ɬq̕áčš")+ , (46, "ŋəsɬšáʔ ʔiʔ t̕x̣ə́ŋ")+ , (47, "ŋəsɬšáʔ ʔiʔ c̕úʔkʷs")+ , (48, "ŋəsɬšáʔ ʔiʔ táʔcs")+ , (49, "ŋəsɬšáʔ ʔiʔ tə́kʷxʷ")+ , (50, "ɬq̕čšɬšáʔ")+ , (51, "ɬq̕čšɬšáʔ ʔiʔ nə́c̕uʔ")+ , (52, "ɬq̕čšɬšáʔ ʔiʔ čə́saʔ")+ , (53, "ɬq̕čšɬšáʔ ʔiʔ ɬíxʷ")+ , (54, "ɬq̕čšɬšáʔ ʔiʔ ŋús")+ , (55, "ɬq̕čšɬšáʔ ʔiʔ ɬq̕áčš")+ , (56, "ɬq̕čšɬšáʔ ʔiʔ t̕x̣ə́ŋ")+ , (57, "ɬq̕čšɬšáʔ ʔiʔ c̕úʔkʷs")+ , (58, "ɬq̕čšɬšáʔ ʔiʔ táʔcs")+ , (59, "ɬq̕čšɬšáʔ ʔiʔ tə́kʷxʷ")+ , (60, "t̕x̣əŋɬšáʔ")+ , (61, "t̕x̣əŋɬšáʔ ʔiʔ nə́c̕uʔ")+ , (62, "t̕x̣əŋɬšáʔ ʔiʔ čə́saʔ")+ , (63, "t̕x̣əŋɬšáʔ ʔiʔ ɬíxʷ")+ , (64, "t̕x̣əŋɬšáʔ ʔiʔ ŋús")+ , (65, "t̕x̣əŋɬšáʔ ʔiʔ ɬq̕áčš")+ , (66, "t̕x̣əŋɬšáʔ ʔiʔ t̕x̣ə́ŋ")+ , (67, "t̕x̣əŋɬšáʔ ʔiʔ c̕úʔkʷs")+ , (68, "t̕x̣əŋɬšáʔ ʔiʔ táʔcs")+ , (69, "t̕x̣əŋɬšáʔ ʔiʔ tə́kʷxʷ")+ , (70, "c̕aʔkʷsɬšáʔ")+ , (71, "c̕aʔkʷsɬšáʔ ʔiʔ nə́c̕uʔ")+ , (72, "c̕aʔkʷsɬšáʔ ʔiʔ čə́saʔ")+ , (73, "c̕aʔkʷsɬšáʔ ʔiʔ ɬíxʷ")+ , (74, "c̕aʔkʷsɬšáʔ ʔiʔ ŋús")+ , (75, "c̕aʔkʷsɬšáʔ ʔiʔ ɬq̕áčš")+ , (76, "c̕aʔkʷsɬšáʔ ʔiʔ t̕x̣ə́ŋ")+ , (77, "c̕aʔkʷsɬšáʔ ʔiʔ c̕úʔkʷs")+ , (78, "c̕aʔkʷsɬšáʔ ʔiʔ táʔcs")+ , (79, "c̕aʔkʷsɬšáʔ ʔiʔ tə́kʷxʷ")+ , (80, "taʔcsɬšáʔ")+ , (81, "taʔcsɬšáʔ ʔiʔ nə́c̕uʔ")+ , (82, "taʔcsɬšáʔ ʔiʔ čə́saʔ")+ , (83, "taʔcsɬšáʔ ʔiʔ ɬíxʷ")+ , (84, "taʔcsɬšáʔ ʔiʔ ŋús")+ , (85, "taʔcsɬšáʔ ʔiʔ ɬq̕áčš")+ , (86, "taʔcsɬšáʔ ʔiʔ t̕x̣ə́ŋ")+ , (87, "taʔcsɬšáʔ ʔiʔ c̕úʔkʷs")+ , (88, "taʔcsɬšáʔ ʔiʔ táʔcs")+ , (89, "taʔcsɬšáʔ ʔiʔ tə́kʷxʷ")+ , (90, "təkʷxʷɬšáʔ")+ , (91, "təkʷxʷɬšáʔ ʔiʔ nə́c̕uʔ")+ , (92, "təkʷxʷɬšáʔ ʔiʔ čə́saʔ")+ , (93, "təkʷxʷɬšáʔ ʔiʔ ɬíxʷ")+ , (94, "təkʷxʷɬšáʔ ʔiʔ ŋús")+ , (95, "təkʷxʷɬšáʔ ʔiʔ ɬq̕áčš")+ , (96, "təkʷxʷɬšáʔ ʔiʔ t̕x̣ə́ŋ")+ , (97, "təkʷxʷɬšáʔ ʔiʔ c̕úʔkʷs")+ , (98, "təkʷxʷɬšáʔ ʔiʔ táʔcs")+ , (99, "təkʷxʷɬšáʔ ʔiʔ tə́kʷxʷ")+ , (100, "snáč̕əwəč")+ , (101, "snáč̕əwəč ʔiʔ nə́c̕uʔ")+ , (107, "snáč̕əwəč ʔiʔ c̕úʔkʷs")+ , (123, "snáč̕əwəč ʔiʔ nəc̕xʷk̕ʷə́s ʔiʔ ɬíxʷ")+ , (199, "snáč̕əwəč ʔiʔ təkʷxʷɬšáʔ ʔiʔ tə́kʷxʷ")+ , (200, "čə́saʔ snáč̕əwəč")+ , (201, "čə́saʔ snáč̕əwəč ʔiʔ nə́c̕uʔ")+ , (207, "čə́saʔ snáč̕əwəč ʔiʔ c̕úʔkʷs")+ , (321, "ɬíxʷ snáč̕əwəč ʔiʔ nəc̕xʷk̕ʷə́s ʔiʔ nə́c̕uʔ")+ , (909, "tə́kʷxʷ snáč̕əwəč ʔiʔ tə́kʷxʷ")+ , (990, "tə́kʷxʷ snáč̕əwəč ʔiʔ təkʷxʷɬšáʔ")+ , (999, "tə́kʷxʷ snáč̕əwəč ʔiʔ təkʷxʷɬšáʔ ʔiʔ tə́kʷxʷ")+ , (1000, "ʔúpən snáč̕əwəč")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/CO/TestData.hs view
@@ -0,0 +1,225 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] co++[@ISO639-2@] cos++[@ISO639-3@] cos++[@Native name@] corsu++[@English name@] Corsican+-}+module Text.Numeral.Language.CO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-corsican/en/cos/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "zéru")+ , (1, "unu")+ , (2, "dui")+ , (3, "trè")+ , (4, "quattru")+ , (5, "cinque")+ , (6, "séi")+ , (7, "sétte")+ , (8, "óttu")+ , (9, "nóve")+ , (10, "déce")+ , (11, "òndeci")+ , (12, "dòdeci")+ , (13, "trèdeci")+ , (14, "quattòrdeci")+ , (15, "quindeci")+ , (16, "sèdeci")+ , (17, "dicessétte")+ , (18, "dicióttu")+ , (19, "dicennóve")+ , (20, "vinti")+ , (21, "vintunu")+ , (22, "vintidui")+ , (23, "vintitrè")+ , (24, "vintiquattru")+ , (25, "vinticinque")+ , (26, "vintiséi")+ , (27, "vintisétte")+ , (28, "vintóttu")+ , (29, "vintinóve")+ , (30, "trènta")+ , (31, "trèntunu")+ , (32, "trèntadui")+ , (33, "trèntatrè")+ , (34, "trèntaquattru")+ , (35, "trèntacinque")+ , (36, "trèntaséi")+ , (37, "trèntasétte")+ , (38, "trèntóttu")+ , (39, "trèntanóve")+ , (40, "quaranta")+ , (41, "quarantunu")+ , (42, "quarantadui")+ , (43, "quarantatrè")+ , (44, "quarantaquattru")+ , (45, "quarantacinque")+ , (46, "quarantaséi")+ , (47, "quarantasétte")+ , (48, "quarantóttu")+ , (49, "quarantanóve")+ , (50, "cinquanta")+ , (51, "cinquantunu")+ , (52, "cinquantadui")+ , (53, "cinquantatrè")+ , (54, "cinquantaquattru")+ , (55, "cinquantacinque")+ , (56, "cinquantaséi")+ , (57, "cinquantasétte")+ , (58, "cinquantóttu")+ , (59, "cinquantanóve")+ , (60, "sessanta")+ , (61, "sessantunu")+ , (62, "sessantadui")+ , (63, "sessantatrè")+ , (64, "sessantaquattru")+ , (65, "sessantacinque")+ , (66, "sessantaséi")+ , (67, "sessantasétte")+ , (68, "sessantóttu")+ , (69, "sessantanóve")+ , (70, "settanta")+ , (71, "settantunu")+ , (72, "settantadui")+ , (73, "settantatrè")+ , (74, "settantaquattru")+ , (75, "settantacinque")+ , (76, "settantaséi")+ , (77, "settantasétte")+ , (78, "settantóttu")+ , (79, "settantanóve")+ , (80, "ottanta")+ , (81, "ottantunu")+ , (82, "ottantadui")+ , (83, "ottantatrè")+ , (84, "ottantaquattru")+ , (85, "ottantacinque")+ , (86, "ottantaséi")+ , (87, "ottantasétte")+ , (88, "ottantóttu")+ , (89, "ottantanóve")+ , (90, "novanta")+ , (91, "novantunu")+ , (92, "novantadui")+ , (93, "novantatrè")+ , (94, "novantaquattru")+ , (95, "novantacinque")+ , (96, "novantaséi")+ , (97, "novantasétte")+ , (98, "novantóttu")+ , (99, "novantanóve")+ , (100, "cèntu")+ , (101, "cèntu è unu")+ , (102, "cèntu è dui")+ , (103, "cèntu è trè")+ , (104, "cèntu è quattru")+ , (105, "cèntu è cinque")+ , (106, "cèntu è séi")+ , (107, "cèntu è sétte")+ , (108, "cèntu è óttu")+ , (109, "cèntu è nóve")+ , (110, "cèntu è déce")+ , (123, "cèntuvintitrè")+ , (200, "duiecèntu")+ , (300, "trecèntu")+ , (321, "trecèntu vintunu")+ , (400, "quattrucèntu")+ , (500, "cinquecèntu")+ , (600, "séicèntu")+ , (700, "séttecèntu")+ , (800, "óttucèntu")+ , (900, "nóvecèntu")+ , (909, "nóvecèntu è nóve")+ , (990, "nóvecèntu novanta")+ , (999, "nóvecèntu novantanóve")+ , (1000, "mille")+ , (1001, "mille è unu")+ , (1008, "mille è óttu")+ , (1234, "mille è duiecèntu trèntaquattru")+ , (2000, "duiemila")+ , (3000, "trèmila")+ , (4000, "quattrumila")+ , (4321, "quattrumila è trecèntu vintunu")+ , (5000, "cinquemila")+ , (6000, "séimila")+ , (7000, "séttemila")+ , (8000, "óttumila")+ , (9000, "nóvemila")+ , (10000, "décemila")+ , (12345, "dòdecimila è trecèntu quarantacinque")+ , (20000, "vintimila")+ , (30000, "trèntamila")+ , (40000, "quarantamila")+ , (50000, "cinquantamila")+ , (54321, "cinquantaquattrumila è trecèntu vintunu")+ , (60000, "sessantamila")+ , (70000, "settantamila")+ , (80000, "ottantamila")+ , (90000, "novantamila")+ , (100000, "cèntumila")+ , (123456, "cèntuvintitrèmila è quattrucèntu cinquantaséi")+ , (200000, "duiecèntumila")+ , (300000, "trecèntumila")+ , (400000, "quattrucèntumila")+ , (500000, "cinquecèntumila")+ , (600000, "séicèntumila")+ , (654321, "séicèntu cinquantaquattrumila è trecèntu vintunu")+ , (700000, "séttecèntumila")+ , (800000, "óttucèntumila")+ , (900000, "nóvecèntumila")+ , (1000000, "un miliòne")+ , (1000001, "un miliòne è unu")+ , (1234567, "un miliòne è duiecèntu trèntaquattrumila è cinquecèntu sessantasétte")+ , (2000000, "dui milioni")+ , (3000000, "trè milioni")+ , (4000000, "quattru milioni")+ , (5000000, "cinque milioni")+ , (6000000, "séi milioni")+ , (7000000, "sétte milioni")+ , (7654321, "sétte milioni è séicèntu cinquantaquattrumila è trecèntu vintunu")+ , (8000000, "óttu milioni")+ , (9000000, "nóve milioni")+ , (1000000000, "una miliarda")+ , (1000000001, "una miliarda è unu")+ , (2000000000, "duie miliarde")+ , (3000000000, "trè miliarde")+ , (4000000000, "quattru miliarde")+ , (5000000000, "cinque miliarde")+ , (6000000000, "séi miliarde")+ , (7000000000, "sétte miliarde")+ , (8000000000, "óttu miliarde")+ , (9000000000, "nóve miliarde")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/COD/TestData.hs view
@@ -0,0 +1,180 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] cod++[@Native name@] Kokáma++[@English name@] Cocama+-}+module Text.Numeral.Language.COD.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-cocama/en/cod/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "huepe")+ , (2, "mucuica")+ , (3, "mutsapɨrɨca")+ , (4, "iruaca")+ , (5, "pichca")+ , (6, "socta")+ , (7, "cansi")+ , (8, "pusa")+ , (9, "iscun")+ , (10, "chunga")+ , (11, "chunga huepe")+ , (12, "chunga mucuica")+ , (13, "chunga mutsapɨrɨca")+ , (14, "chunga iruaca")+ , (15, "chunga pichca")+ , (16, "chunga socta")+ , (17, "chunga cansi")+ , (18, "chunga pusa")+ , (19, "chunga iscun")+ , (20, "mucuica chunga")+ , (21, "mucuica chunga huepe")+ , (22, "mucuica chunga mucuica")+ , (23, "mucuica chunga mutsapɨrɨca")+ , (24, "mucuica chunga iruaca")+ , (25, "mucuica chunga pichca")+ , (26, "mucuica chunga socta")+ , (27, "mucuica chunga cansi")+ , (28, "mucuica chunga pusa")+ , (29, "mucuica chunga iscun")+ , (30, "mutsapɨrɨca chunga")+ , (31, "mutsapɨrɨca chunga huepe")+ , (32, "mutsapɨrɨca chunga mucuica")+ , (33, "mutsapɨrɨca chunga mutsapɨrɨca")+ , (34, "mutsapɨrɨca chunga iruaca")+ , (35, "mutsapɨrɨca chunga pichca")+ , (36, "mutsapɨrɨca chunga socta")+ , (37, "mutsapɨrɨca chunga cansi")+ , (38, "mutsapɨrɨca chunga pusa")+ , (39, "mutsapɨrɨca chunga iscun")+ , (40, "iruaca chunga")+ , (41, "iruaca chunga huepe")+ , (42, "iruaca chunga mucuica")+ , (43, "iruaca chunga mutsapɨrɨca")+ , (44, "iruaca chunga iruaca")+ , (45, "iruaca chunga pichca")+ , (46, "iruaca chunga socta")+ , (47, "iruaca chunga cansi")+ , (48, "iruaca chunga pusa")+ , (49, "iruaca chunga iscun")+ , (50, "pichca chunga")+ , (51, "pichca chunga huepe")+ , (52, "pichca chunga mucuica")+ , (53, "pichca chunga mutsapɨrɨca")+ , (54, "pichca chunga iruaca")+ , (55, "pichca chunga pichca")+ , (56, "pichca chunga socta")+ , (57, "pichca chunga cansi")+ , (58, "pichca chunga pusa")+ , (59, "pichca chunga iscun")+ , (60, "socta chunga")+ , (61, "socta chunga huepe")+ , (62, "socta chunga mucuica")+ , (63, "socta chunga mutsapɨrɨca")+ , (64, "socta chunga iruaca")+ , (65, "socta chunga pichca")+ , (66, "socta chunga socta")+ , (67, "socta chunga cansi")+ , (68, "socta chunga pusa")+ , (69, "socta chunga iscun")+ , (70, "cansi chunga")+ , (71, "cansi chunga huepe")+ , (72, "cansi chunga mucuica")+ , (73, "cansi chunga mutsapɨrɨca")+ , (74, "cansi chunga iruaca")+ , (75, "cansi chunga pichca")+ , (76, "cansi chunga socta")+ , (77, "cansi chunga cansi")+ , (78, "cansi chunga pusa")+ , (79, "cansi chunga iscun")+ , (80, "pusa chunga")+ , (81, "pusa chunga huepe")+ , (82, "pusa chunga mucuica")+ , (83, "pusa chunga mutsapɨrɨca")+ , (84, "pusa chunga iruaca")+ , (85, "pusa chunga pichca")+ , (86, "pusa chunga socta")+ , (87, "pusa chunga cansi")+ , (88, "pusa chunga pusa")+ , (89, "pusa chunga iscun")+ , (90, "iscun chunga")+ , (91, "iscun chunga huepe")+ , (92, "iscun chunga mucuica")+ , (93, "iscun chunga mutsapɨrɨca")+ , (94, "iscun chunga iruaca")+ , (95, "iscun chunga pichca")+ , (96, "iscun chunga socta")+ , (97, "iscun chunga cansi")+ , (98, "iscun chunga pusa")+ , (99, "iscun chunga iscun")+ , (100, "pacha")+ , (101, "pacha huepe")+ , (102, "pacha mucuica")+ , (103, "pacha mutsapɨrɨca")+ , (104, "pacha iruaca")+ , (105, "pacha pichca")+ , (106, "pacha socta")+ , (107, "pacha cansi")+ , (108, "pacha pusa")+ , (109, "pacha iscun")+ , (110, "pacha chunga")+ , (123, "pacha mucuica chunga mutsapɨrɨca")+ , (200, "mucuica pacha")+ , (300, "mutsapɨrɨca pacha")+ , (321, "mutsapɨrɨca pacha mucuica chunga huepe")+ , (400, "iruaca pacha")+ , (500, "pichca pacha")+ , (600, "socta pacha")+ , (700, "cansi pacha")+ , (800, "pusa pacha")+ , (900, "iscun pacha")+ , (909, "iscun pacha iscun")+ , (990, "iscun pacha iscun chunga")+ , (999, "iscun pacha iscun chunga iscun")+ , (1000, "huaranga")+ , (1001, "huaranga huepe")+ , (1008, "huaranga pusa")+ , (1234, "huaranga mucuica pacha mutsapɨrɨca chunga iruaca")+ , (2000, "mucuica huaranga")+ , (3000, "mutsapɨrɨca huaranga")+ , (4000, "iruaca huaranga")+ , (4321, "iruaca huaranga mutsapɨrɨca pacha mucuica chunga huepe")+ , (5000, "pichca huaranga")+ , (6000, "socta huaranga")+ , (7000, "cansi huaranga")+ , (8000, "pusa huaranga")+ , (9000, "iscun huaranga")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/COO/TestData.hs view
@@ -0,0 +1,144 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] coo++[@Native name@] -++[@English name@] Comox+-}+module Text.Numeral.Language.COO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-comox/en/coo/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "paʔa")+ , (2, "saʔa")+ , (3, "čɛlas")+ , (4, "mos")+ , (5, "θiyɛčɩs")+ , (6, "t̓əxəm")+ , (7, "tᶿočɩs")+ , (8, "taʔačɩs")+ , (9, "tɩgiχʷ")+ , (10, "opən")+ , (11, "ʔopən hekʷ paʔa")+ , (12, "ʔopən hekʷ saʔa")+ , (13, "ʔopən hekʷ čɛlas")+ , (14, "ʔopən hekʷ mos")+ , (15, "ʔopən hekʷ θiyɛčɩs")+ , (16, "ʔopən hekʷ t̓əxəm")+ , (17, "ʔopən hekʷ tᶿočɩs")+ , (18, "ʔopən hekʷ taʔačɩs")+ , (19, "ʔopən hekʷ tɩgiχʷ")+ , (20, "θamšɛ")+ , (21, "θamšɛ heykʷ paʔa")+ , (22, "θamšɛ heykʷ saʔa")+ , (23, "θamšɛ heykʷ čɛlas")+ , (24, "θamšɛ heykʷ mos")+ , (25, "θamšɛ heykʷ θiyɛčɩs")+ , (26, "θamšɛ heykʷ t̓əxəm")+ , (27, "θamšɛ heykʷ tᶿočɩs")+ , (28, "θamšɛ heykʷ taʔačɩs")+ , (29, "θamšɛ heykʷ tɩgiχʷ")+ , (30, "čɩnuxʷ šɛ")+ , (31, "čɩnuxʷ šɛ heykʷ paʔa")+ , (32, "čɩnuxʷ šɛ heykʷ saʔa")+ , (33, "čɩnuxʷ šɛ heykʷ čɛlas")+ , (34, "čɩnuxʷ šɛ heykʷ mos")+ , (35, "čɩnuxʷ šɛ heykʷ θiyɛčɩs")+ , (36, "čɩnuxʷ šɛ heykʷ t̓əxəm")+ , (37, "čɩnuxʷ šɛ heykʷ tᶿočɩs")+ , (38, "čɩnuxʷ šɛ heykʷ taʔačɩs")+ , (39, "čɩnuxʷ šɛ heykʷ tɩgiχʷ")+ , (40, "mosaɬ šɛ")+ , (41, "mosaɬ šɛ heykʷ paʔa")+ , (42, "mosaɬ šɛ heykʷ saʔa")+ , (43, "mosaɬ šɛ heykʷ čɛlas")+ , (44, "mosaɬ šɛ heykʷ mos")+ , (45, "mosaɬ šɛ heykʷ θiyɛčɩs")+ , (46, "mosaɬ šɛ heykʷ t̓əxəm")+ , (47, "mosaɬ šɛ heykʷ tᶿočɩs")+ , (48, "mosaɬ šɛ heykʷ taʔačɩs")+ , (49, "mosaɬ šɛ heykʷ tɩgiχʷ")+ , (50, "θiyɛčɩsaɬšɛ")+ , (51, "θiyɛčɩsaɬšɛ heykʷ paʔa")+ , (52, "θiyɛčɩsaɬšɛ heykʷ saʔa")+ , (53, "θiyɛčɩsaɬšɛ heykʷ čɛlas")+ , (54, "θiyɛčɩsaɬšɛ heykʷ mos")+ , (55, "θiyɛčɩsaɬšɛ heykʷ θiyɛčɩs")+ , (56, "θiyɛčɩsaɬšɛ heykʷ t̓əxəm")+ , (57, "θiyɛčɩsaɬšɛ heykʷ tᶿočɩs")+ , (58, "θiyɛčɩsaɬšɛ heykʷ taʔačɩs")+ , (59, "θiyɛčɩsaɬšɛ heykʷ tɩgiχʷ")+ , (60, "t̓əχmaɬ šɛ")+ , (61, "t̓əχmaɬ šɛ heykʷ paʔa")+ , (62, "t̓əχmaɬ šɛ heykʷ saʔa")+ , (63, "t̓əχmaɬ šɛ heykʷ čɛlas")+ , (64, "t̓əχmaɬ šɛ heykʷ mos")+ , (65, "t̓əχmaɬ šɛ heykʷ θiyɛčɩs")+ , (66, "t̓əχmaɬ šɛ heykʷ t̓əxəm")+ , (67, "t̓əχmaɬ šɛ heykʷ tᶿočɩs")+ , (68, "t̓əχmaɬ šɛ heykʷ taʔačɩs")+ , (69, "t̓əχmaɬ šɛ heykʷ tɩgiχʷ")+ , (70, "tᶿočɩsaɬ šɛ")+ , (71, "tᶿočɩsaɬ šɛ heykʷ paʔa")+ , (72, "tᶿočɩsaɬ šɛ heykʷ saʔa")+ , (73, "tᶿočɩsaɬ šɛ heykʷ čɛlas")+ , (74, "tᶿočɩsaɬ šɛ heykʷ mos")+ , (75, "tᶿočɩsaɬ šɛ heykʷ θiyɛčɩs")+ , (76, "tᶿočɩsaɬ šɛ heykʷ t̓əxəm")+ , (77, "tᶿočɩsaɬ šɛ heykʷ tᶿočɩs")+ , (78, "tᶿočɩsaɬ šɛ heykʷ taʔačɩs")+ , (79, "tᶿočɩsaɬ šɛ heykʷ tɩgiχʷ")+ , (80, "taʔačɩsaɬ šɛ")+ , (81, "taʔačɩsaɬ šɛ heykʷ paʔa")+ , (82, "taʔačɩsaɬ šɛ heykʷ saʔa")+ , (83, "taʔačɩsaɬ šɛ heykʷ čɛlas")+ , (84, "taʔačɩsaɬ šɛ heykʷ mos")+ , (85, "taʔačɩsaɬ šɛ heykʷ θiyɛčɩs")+ , (86, "taʔačɩsaɬ šɛ heykʷ t̓əxəm")+ , (87, "taʔačɩsaɬ šɛ heykʷ tᶿočɩs")+ , (88, "taʔačɩsaɬ šɛ heykʷ taʔačɩs")+ , (89, "taʔačɩsaɬ šɛ heykʷ tɩgiχʷ")+ , (90, "tɩgixʷaɬ šɛ")+ , (91, "tɩgixʷaɬ šɛ heykʷ paʔa")+ , (92, "tɩgixʷaɬ šɛ heykʷ saʔa")+ , (93, "tɩgixʷaɬ šɛ heykʷ čɛlas")+ , (94, "tɩgixʷaɬ šɛ heykʷ mos")+ , (95, "tɩgixʷaɬ šɛ heykʷ θiyɛčɩs")+ , (96, "tɩgixʷaɬ šɛ heykʷ t̓əxəm")+ , (97, "tɩgixʷaɬ šɛ heykʷ tᶿočɩs")+ , (98, "tɩgixʷaɬ šɛ heykʷ taʔačɩs")+ , (99, "tɩgixʷaɬ šɛ heykʷ tɩgiχʷ")+ , (100, "opən təsɛʔɛč")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/CS/TestData.hs view
@@ -0,0 +1,212 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] cs++[@ISO639-2B@] cze++[@ISO639-2T@] ces++[@ISO639-3@] ces++[@Native name@] Čeština++[@English name@] Czech+-}++module Text.Numeral.Language.CS.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "nula")+ , (1, "jeden")+ , (2, "dva")+ , (3, "tři")+ , (4, "čtyři")+ , (5, "pět")+ , (6, "šest")+ , (7, "sedm")+ , (8, "osm")+ , (9, "devět")+ , (10, "deset")+ , (11, "jedenáct")+ , (12, "dvanáct")+ , (13, "třináct")+ , (14, "ctrnáct")+ , (15, "patnáct")+ , (16, "šestnáct")+ , (17, "sedmnáct")+ , (18, "osmnáct")+ , (19, "devatenáct")+ , (20, "dvacet")+ , (21, "dvacet jedna")+ , (22, "dvacet dva")+ , (23, "dvacet tři")+ , (24, "dvacet čtyři")+ , (25, "dvacet pět")+ , (26, "dvacet šest")+ , (27, "dvacet sedm")+ , (28, "dvacet osm")+ , (29, "dvacet devět")+ , (30, "třicet")+ , (31, "třicet jedna")+ , (32, "třicet dva")+ , (33, "třicet tři")+ , (34, "třicet čtyři")+ , (35, "třicet pět")+ , (36, "třicet šest")+ , (37, "třicet sedm")+ , (38, "třicet osm")+ , (39, "třicet devět")+ , (40, "čtyřicet")+ , (41, "čtyřicet jedna")+ , (42, "čtyřicet dva")+ , (43, "čtyřicet tři")+ , (44, "čtyřicet čtyři")+ , (45, "čtyřicet pět")+ , (46, "čtyřicet šest")+ , (47, "čtyřicet sedm")+ , (48, "čtyřicet osm")+ , (49, "čtyřicet devět")+ , (50, "padesát")+ , (51, "padesát jedna")+ , (52, "padesát dva")+ , (53, "padesát tři")+ , (54, "padesát čtyři")+ , (55, "padesát pět")+ , (56, "padesát šest")+ , (57, "padesát sedm")+ , (58, "padesát osm")+ , (59, "padesát devět")+ , (60, "šedesát")+ , (61, "šedesát jedna")+ , (62, "šedesát dva")+ , (63, "šedesát tři")+ , (64, "šedesát čtyři")+ , (65, "šedesát pět")+ , (66, "šedesát šest")+ , (67, "šedesát sedm")+ , (68, "šedesát osm")+ , (69, "šedesát devět")+ , (70, "sedmdesát")+ , (71, "sedmdesát jedna")+ , (72, "sedmdesát dva")+ , (73, "sedmdesát tři")+ , (74, "sedmdesát čtyři")+ , (75, "sedmdesát pět")+ , (76, "sedmdesát šest")+ , (77, "sedmdesát sedm")+ , (78, "sedmdesát osm")+ , (79, "sedmdesát devět")+ , (80, "osmdesát")+ , (81, "osmdesát jedna")+ , (82, "osmdesát dva")+ , (83, "osmdesát tři")+ , (84, "osmdesát čtyři")+ , (85, "osmdesát pět")+ , (86, "osmdesát šest")+ , (87, "osmdesát sedm")+ , (88, "osmdesát osm")+ , (89, "osmdesát devět")+ , (90, "devádesát")+ , (91, "devádesát jedna")+ , (92, "devádesát dva")+ , (93, "devádesát tři")+ , (94, "devádesát čtyři")+ , (95, "devádesát pět")+ , (96, "devádesát šest")+ , (97, "devádesát sedm")+ , (98, "devádesát osm")+ , (99, "devádesát devět")+ , (100, "sto")+ , (101, "sto jedna")+ , (102, "sto dva")+ , (110, "sto deset")+ , (120, "sto dvacet")+ , (200, "dvě stě")+ , (201, "dvě stě jedna") -- or is it "dvě stě jeden"?+ , (300, "tři sta")+ , (400, "čtyři sta")+ , (500, "pět set")+ , (600, "šest set")+ , (700, "sedm set")+ , (800, "osm set")+ , (900, "devět set")+ , (1000, "tisíc")+ , (1001, "tisíc jedna") -- or is it "tisíc jeden"?+ , (2000, "dva tisíce")+ , (2007, "dva tisíce sedm")+ , (2008, "dva tisíce osm")+ , (3000, "tři tisíce")+ , (4000, "čtyři tisíce")+ , (5000, "pět tisíc")+ , (6000, "šest tisíc")+ , (7000, "sedm tisíc")+ , (8000, "osm tisíc")+ , (9000, "devět tisíc")+ , (10000, "deset tisíc")+ , (11000, "jedenáct tisíc")+ , (25000, "dvacet pět tisíc")+ , (50000, "padesát tisíc")+ , (dec 5, "sto tisíc")+ , (138000, "sto třicet osm tisíc")+ , (dec 6, "milión")+ , (2 ⋅ dec 6, "dva milióny")+ , (5 ⋅ dec 6, "pět miliónů")+ , (6 ⋅ dec 6, "šest miliónů")+ , (7 ⋅ dec 6, "sedm miliónů")+ , (dec 9, "miliarda")+ , (dec 12, "bilión")+ ]+ )+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "první")+ , (2, "druhý")+ , (3, "třetí")+ , (4, "čtvrtý")+ , (5, "pátý")+ , (6, "šestý")+ , (7, "sedmý")+ , (8, "osmý")+ , (9, "devátý")+ , (10, "desátý")+ , (11, "jedenáctý")+ , (12, "dvanáctý")+ , (13, "třináctý")+ , (14, "čtrnáctý")+ , (15, "patnáctý")+ , (16, "šestnáctý")+ , (17, "sedmnáctý")+ , (18, "osmnáctý")+ , (19, "devatenáctý")+ , (20, "dvacátý")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/CY/TestData.hs view
@@ -0,0 +1,178 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] cy++[@ISO639-2B@] wel++[@ISO639-2T@] cym++[@ISO639-3@] cym++[@Native name@] Cymraeg++[@English name@] Welsh+-}++module Text.Numeral.Language.CY.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://mylanguages.org/welsh_numbers.php++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "dim")+ , (1, "un")+ , (2, "dau")+ , (3, "tri")+ , (4, "pedwar")+ , (5, "pump")+ , (6, "chwech")+ , (7, "saith")+ , (8, "wyth")+ , (9, "naw")+ , (10, "deg")+ , (11, "un deg un")+ , (12, "un deg dau")+ , (13, "un deg tri")+ , (14, "un deg pedwar")+ , (15, "un deg pump")+ , (16, "un deg chwech")+ , (17, "un deg saith")+ , (18, "un deg wyth")+ , (19, "un deg naw")+ , (20, "dau deg")+ , (21, "dau deg un")+ , (22, "dau deg dau")+ , (23, "dau deg tri")+ , (24, "dau deg pedwar")+ , (25, "dau deg pump")+ , (26, "dau deg chwech")+ , (27, "dau deg saith")+ , (28, "dau deg wyth")+ , (29, "dau deg naw")+ , (30, "tri deg")+ , (31, "tri deg un")+ , (32, "tri deg dau")+ , (33, "tri deg tri")+ , (34, "tri deg pedwar")+ , (35, "tri deg pump")+ , (36, "tri deg chwech")+ , (37, "tri deg saith")+ , (38, "tri deg wyth")+ , (39, "tri deg naw")+ , (40, "pedwar deg")+ , (41, "pedwar deg un")+ , (42, "pedwar deg dau")+ , (43, "pedwar deg tri")+ , (44, "pedwar deg pedwar")+ , (45, "pedwar deg pump")+ , (46, "pedwar deg chwech")+ , (47, "pedwar deg saith")+ , (48, "pedwar deg wyth")+ , (49, "pedwar deg naw")+ , (50, "pum deg")+ , (51, "pum deg un")+ , (52, "pum deg dau")+ , (53, "pum deg tri")+ , (54, "pum deg pedwar")+ , (55, "pum deg pump")+ , (56, "pum deg chwech")+ , (57, "pum deg saith")+ , (58, "pum deg wyth")+ , (59, "pum deg naw")+ , (60, "chwe deg")+ , (61, "chwe deg un")+ , (62, "chwe deg dau")+ , (63, "chwe deg tri")+ , (64, "chwe deg pedwar")+ , (65, "chwe deg pump")+ , (66, "chwe deg chwech")+ , (67, "chwe deg saith")+ , (68, "chwe deg wyth")+ , (69, "chwe deg naw")+ , (70, "saith deg")+ , (71, "saith deg un")+ , (72, "saith deg dau")+ , (73, "saith deg tri")+ , (74, "saith deg pedwar")+ , (75, "saith deg pump")+ , (76, "saith deg chwech")+ , (77, "saith deg saith")+ , (78, "saith deg wyth")+ , (79, "saith deg naw")+ , (80, "wyth deg")+ , (81, "wyth deg un")+ , (82, "wyth deg dau")+ , (83, "wyth deg tri")+ , (84, "wyth deg pedwar")+ , (85, "wyth deg pump")+ , (86, "wyth deg chwech")+ , (87, "wyth deg saith")+ , (88, "wyth deg wyth")+ , (89, "wyth deg naw")+ , (90, "naw deg")+ , (91, "naw deg un")+ , (92, "naw deg dau")+ , (93, "naw deg tri")+ , (94, "naw deg pedwar")+ , (95, "naw deg pump")+ , (96, "naw deg chwech")+ , (97, "naw deg saith")+ , (98, "naw deg wyth")+ , (99, "naw deg naw")+ , (100, "cant")+ , (1000, "un thousand")+ , (dec 6, "miliwn")+ ]+ )+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "gyntaf")+ , (2, "ail")+ , (3, "trydydd")+ , (4, "pedwerydd")+ , (5, "pumed")+ , (6, "chweched")+ , (7, "seithfed")+ , (8, "wythfed")+ , (9, "nawfed")+ , (10, "degfed")+ , (11, "unfed ar ddeg")+ , (12, "deuddegfed")+ , (13, "drydedd ar ddeg")+ , (14, "ddeg")+ , (15, "pymthegfed")+ , (16, "ar bymtheg")+ , (17, "ail ar bymtheg")+ , (18, "deunawfed")+ , (19, "bedwaredd ganrif ar bymtheg")+ , (20, "ugeinfed")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/DE/TestData.hs view
@@ -0,0 +1,475 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] de++[@ISO639-2B@] ger++[@ISO639-2T@] deu++[@ISO639-3@] deu++[@Native name@] Deutsch++[@English name@] German+-}++module Text.Numeral.Language.DE.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://de.wikipedia.org/wiki/Zahlennamen+ http://german.about.com/library/blzahlen.htm+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "null")+ , (1, "eins")+ , (2, "zwei")+ , (3, "drei")+ , (4, "vier")+ , (5, "fünf")+ , (6, "sechs")+ , (7, "sieben")+ , (8, "acht")+ , (9, "neun")+ , (10, "zehn")+ , (11, "elf")+ , (12, "zwölf")+ , (13, "dreizehn")+ , (14, "vierzehn")+ , (15, "fünfzehn")+ , (16, "sechzehn")+ , (17, "siebzehn")+ , (18, "achtzehn")+ , (19, "neunzehn")+ , (20, "zwanzig")+ , (21, "einundzwanzig")+ , (22, "zweiundzwanzig")+ , (23, "dreiundzwanzig")+ , (24, "vierundzwanzig")+ , (25, "fünfundzwanzig")+ , (26, "sechsundzwanzig")+ , (27, "siebenundzwanzig")+ , (28, "achtundzwanzig")+ , (29, "neunundzwanzig")+ , (30, "dreißig")+ , (31, "einunddreißig")+ , (32, "zweiunddreißig")+ , (33, "dreiunddreißig")+ , (34, "vierunddreißig")+ , (35, "fünfunddreißig")+ , (36, "sechsunddreißig")+ , (37, "siebenunddreißig")+ , (38, "achtunddreißig")+ , (39, "neununddreißig")+ , (40, "vierzig")+ , (41, "einundvierzig")+ , (42, "zweiundvierzig")+ , (43, "dreiundvierzig")+ , (44, "vierundvierzig")+ , (45, "fünfundvierzig")+ , (46, "sechsundvierzig")+ , (47, "siebenundvierzig")+ , (48, "achtundvierzig")+ , (49, "neunundvierzig")+ , (50, "fünfzig")+ , (51, "einundfünfzig")+ , (52, "zweiundfünfzig")+ , (53, "dreiundfünfzig")+ , (54, "vierundfünfzig")+ , (55, "fünfundfünfzig")+ , (56, "sechsundfünfzig")+ , (57, "siebenundfünfzig")+ , (58, "achtundfünfzig")+ , (59, "neunundfünfzig")+ , (60, "sechzig")+ , (61, "einundsechzig")+ , (62, "zweiundsechzig")+ , (63, "dreiundsechzig")+ , (64, "vierundsechzig")+ , (65, "fünfundsechzig")+ , (66, "sechsundsechzig")+ , (67, "siebenundsechzig")+ , (68, "achtundsechzig")+ , (69, "neunundsechzig")+ , (70, "siebzig")+ , (71, "einundsiebzig")+ , (72, "zweiundsiebzig")+ , (73, "dreiundsiebzig")+ , (74, "vierundsiebzig")+ , (75, "fünfundsiebzig")+ , (76, "sechsundsiebzig")+ , (77, "siebenundsiebzig")+ , (78, "achtundsiebzig")+ , (79, "neunundsiebzig")+ , (80, "achtzig")+ , (81, "einundachtzig")+ , (82, "zweiundachtzig")+ , (83, "dreiundachtzig")+ , (84, "vierundachtzig")+ , (85, "fünfundachtzig")+ , (86, "sechsundachtzig")+ , (87, "siebenundachtzig")+ , (88, "achtundachtzig")+ , (89, "neunundachtzig")+ , (90, "neunzig")+ , (91, "einundneunzig")+ , (92, "zweiundneunzig")+ , (93, "dreiundneunzig")+ , (94, "vierundneunzig")+ , (95, "fünfundneunzig")+ , (96, "sechsundneunzig")+ , (97, "siebenundneunzig")+ , (98, "achtundneunzig")+ , (99, "neunundneunzig")+ , (100, "hundert")+ , (101, "hunderteins")+ , (102, "hundertzwei")+ , (103, "hundertdrei")+ , (153, "hundertdreiundfünfzig")+ , (200, "zweihundert")+ , (201, "zweihunderteins")+ , (202, "zweihundertzwei")+ , (203, "zweihundertdrei")+ , (204, "zweihundertvier")+ , (205, "zweihundertfünf")+ , (206, "zweihundertsechs")+ , (207, "zweihundertsieben")+ , (208, "zweihundertacht")+ , (209, "zweihundertneun")+ , (210, "zweihundertzehn")+ , (211, "zweihundertelf")+ , (212, "zweihundertzwölf")+ , (213, "zweihundertdreizehn")+ , (214, "zweihundertvierzehn")+ , (215, "zweihundertfünfzehn")+ , (216, "zweihundertsechzehn")+ , (217, "zweihundertsiebzehn")+ , (218, "zweihundertachtzehn")+ , (219, "zweihundertneunzehn")+ , (220, "zweihundertzwanzig")+ , (221, "zweihunderteinundzwanzig")+ , (222, "zweihundertzweiundzwanzig")+ , (223, "zweihundertdreiundzwanzig")+ , (224, "zweihundertvierundzwanzig")+ , (225, "zweihundertfünfundzwanzig")+ , (226, "zweihundertsechsundzwanzig")+ , (227, "zweihundertsiebenundzwanzig")+ , (228, "zweihundertachtundzwanzig")+ , (229, "zweihundertneunundzwanzig")+ , (230, "zweihundertdreißig")+ , (300, "dreihundert")+ , (320, "dreihundertzwanzig")+ , (400, "vierhundert")+ , (421, "vierhunderteinundzwanzig")+ , (500, "fünfhundert")+ , (522, "fünfhundertzweiundzwanzig")+ , (600, "sechshundert")+ , (623, "sechshundertdreiundzwanzig")+ , (700, "siebenhundert")+ , (724, "siebenhundertvierundzwanzig")+ , (800, "achthundert")+ , (825, "achthundertfünfundzwanzig")+ , (900, "neunhundert")+ , (901, "neunhunderteins")+ , (926, "neunhundertsechsundzwanzig")+ , (998, "neunhundertachtundneunzig")+ , (999, "neunhundertneunundneunzig")+ , (1000, "tausend")+ , (1001, "tausendeins")+ , (1002, "tausendzwei")+ , (1030, "tausenddreißig")+ , (1031, "tausendeinunddreißig")+ , (1032, "tausendzweiunddreißig")+ , (1033, "tausenddreiunddreißig")+ , (1034, "tausendvierunddreißig")+ , (1035, "tausendfünfunddreißig")+ , (1036, "tausendsechsunddreißig")+ , (1037, "tausendsiebenunddreißig")+ , (1038, "tausendachtunddreißig")+ , (1039, "tausendneununddreißig")+ , (1040, "tausendvierzig")+ , (1041, "tausendeinundvierzig")+ , (1042, "tausendzweiundvierzig")+ , (1043, "tausenddreiundvierzig")+ , (1044, "tausendvierundvierzig")+ , (1045, "tausendfünfundvierzig")+ , (1046, "tausendsechsundvierzig")+ , (1047, "tausendsiebenundvierzig")+ , (1048, "tausendachtundvierzig")+ , (1049, "tausendneunundvierzig")+ , (1050, "tausendfünfzig")+ , (1051, "tausendeinundfünfzig")+ , (1052, "tausendzweiundfünfzig")+ , (1053, "tausenddreiundfünfzig")+ , (1054, "tausendvierundfünfzig")+ , (1055, "tausendfünfundfünfzig")+ , (1056, "tausendsechsundfünfzig")+ , (1057, "tausendsiebenundfünfzig")+ , (1058, "tausendachtundfünfzig")+ , (1059, "tausendneunundfünfzig")+ , (1060, "tausendsechzig")+ , (1061, "tausendeinundsechzig")+ , (1062, "tausendzweiundsechzig")+ , (1063, "tausenddreiundsechzig")+ , (1064, "tausendvierundsechzig")+ , (1065, "tausendfünfundsechzig")+ , (1066, "tausendsechsundsechzig")+ , (1067, "tausendsiebenundsechzig")+ , (1068, "tausendachtundsechzig")+ , (1069, "tausendneunundsechzig")+ , (1070, "tausendsiebzig")+ , (1071, "tausendeinundsiebzig")+ , (1072, "tausendzweiundsiebzig")+ , (1073, "tausenddreiundsiebzig")+ , (1074, "tausendvierundsiebzig")+ , (1075, "tausendfünfundsiebzig")+ , (1076, "tausendsechsundsiebzig")+ , (1077, "tausendsiebenundsiebzig")+ , (1078, "tausendachtundsiebzig")+ , (1079, "tausendneunundsiebzig")+ , (1080, "tausendachtzig")+ , (1081, "tausendeinundachtzig")+ , (1082, "tausendzweiundachtzig")+ , (1083, "tausenddreiundachtzig")+ , (1084, "tausendvierundachtzig")+ , (1085, "tausendfünfundachtzig")+ , (1086, "tausendsechsundachtzig")+ , (1087, "tausendsiebenundachtzig")+ , (1088, "tausendachtundachtzig")+ , (1089, "tausendneunundachtzig")+ , (1090, "tausendneunzig")+ , (1091, "tausendeinundneunzig")+ , (1092, "tausendzweiundneunzig")+ , (1093, "tausenddreiundneunzig")+ , (1094, "tausendvierundneunzig")+ , (1095, "tausendfünfundneunzig")+ , (1096, "tausendsechsundneunzig")+ , (1097, "tausendsiebenundneunzig")+ , (1098, "tausendachtundneunzig")+ , (1099, "tausendneunundneunzig")+ , (1100, "tausendhundert")+ , (1101, "tausendhunderteins")+ , (1102, "tausendhundertzwei")+ , (1103, "tausendhundertdrei")+ , (1104, "tausendhundertvier")+ , (1105, "tausendhundertfünf")+ , (1106, "tausendhundertsechs")+ , (1107, "tausendhundertsieben")+ , (1108, "tausendhundertacht")+ , (1109, "tausendhundertneun")+ , (1210, "tausendzweihundertzehn")+ , (1211, "tausendzweihundertelf")+ , (1212, "tausendzweihundertzwölf")+ , (1213, "tausendzweihundertdreizehn")+ , (1214, "tausendzweihundertvierzehn")+ , (1215, "tausendzweihundertfünfzehn")+ , (1216, "tausendzweihundertsechzehn")+ , (1217, "tausendzweihundertsiebzehn")+ , (1218, "tausendzweihundertachtzehn")+ , (1219, "tausendzweihundertneunzehn")+ , (2000, "zweitausend")+ , (2001, "zweitausendeins")+ , (2002, "zweitausendzwei")+ , (2004, "zweitausendvier")+ , (9999, "neuntausendneunhundertneunundneunzig")+ , (10000, "zehntausend")+ , (20000, "zwanzigtausend")+ , (dec 5, "hunderttausend")+ , (dec 6, "million")+ , (2 ⋅ dec 6, "zwei millionen")+ , (dec 9, "milliarde")+ , (6 ⋅ dec 9, "sechs milliarden")+ , (dec 12, "billion")+ , (dec 15, "billiarde")+ , (dec 18, "trillion")+ , (dec 21, "trilliarde")+ , (dec 24, "quadrillion")+ , (dec 27, "quadrilliarde")+ , (dec 30, "quintillion")+ , (dec 33, "quintilliarde")+ , (dec 36, "sextillion")+ , (dec 39, "sextilliarde")+ , (dec 42, "septillion")+ , (dec 45, "septilliarde")+ , (dec 48, "oktillion")+ , (dec 51, "oktilliarde")+ , (dec 54, "nonillion")+ , (dec 57, "nonilliarde")+ , (dec 60, "dezillion")+ , (dec 63, "dezilliarde")+ , (dec 66, "undezillion")+ , (dec 69, "undezilliarde")+ , (dec 72, "duodezillion")+ , (dec 75, "duodezilliarde")+ , (dec 78, "tredezillion")+ , (dec 81, "tredezilliarde")+ , (dec 84, "quattuordezillion")+ , (dec 87, "quattuordezilliarde")+ , (dec 90, "quindezillion")+ , (dec 93, "quindezilliarde")+ , (dec 180, "trigintillion")+ , (dec 600, "zentillion")+ , (dec 603, "zentilliarde")+ , (dec 6000, "millinillion")+ ]+ )+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "nullte")+ , (1, "erste")+ , (2, "zweite")+ , (3, "dritte")+ , (4, "vierte")+ , (5, "fünfte")+ , (6, "sechste")+ , (7, "siebte")+ , (8, "achte")+ , (9, "neunte")+ , (10, "zehnte")+ , (11, "elfte")+ , (12, "zwölfte")+ , (13, "dreizehnte")+ , (14, "vierzehnte")+ , (15, "fünfzehnte")+ , (16, "sechzehnte")+ , (17, "siebzehnte")+ , (18, "achtzehnte")+ , (19, "neunzehnte")+ , (20, "zwanzigste")+ , (21, "einundzwanzigste")+ , (22, "zweiundzwanzigste")+ , (23, "dreiundzwanzigste")+ , (24, "vierundzwanzigste")+ , (25, "fünfundzwanzigste")+ , (26, "sechsundzwanzigste")+ , (27, "siebenundzwanzigste")+ , (28, "achtundzwanzigste")+ , (29, "neunundzwanzigste")+ , (30, "dreißigste")+ , (31, "einunddreißigste")+ , (32, "zweiunddreißigste")+ , (33, "dreiunddreißigste")+ , (34, "vierunddreißigste")+ , (35, "fünfunddreißigste")+ , (36, "sechsunddreißigste")+ , (37, "siebenunddreißigste")+ , (38, "achtunddreißigste")+ , (39, "neununddreißigste")+ , (40, "vierzigste")+ , (41, "einundvierzigste")+ , (42, "zweiundvierzigste")+ , (43, "dreiundvierzigste")+ , (44, "vierundvierzigste")+ , (45, "fünfundvierzigste")+ , (46, "sechsundvierzigste")+ , (47, "siebenundvierzigste")+ , (48, "achtundvierzigste")+ , (49, "neunundvierzigste")+ , (50, "fünfzigste")+ , (51, "einundfünfzigste")+ , (52, "zweiundfünfzigste")+ , (53, "dreiundfünfzigste")+ , (54, "vierundfünfzigste")+ , (55, "fünfundfünfzigste")+ , (56, "sechsundfünfzigste")+ , (57, "siebenundfünfzigste")+ , (58, "achtundfünfzigste")+ , (59, "neunundfünfzigste")+ , (60, "sechzigste")+ , (61, "einundsechzigste")+ , (62, "zweiundsechzigste")+ , (63, "dreiundsechzigste")+ , (64, "vierundsechzigste")+ , (65, "fünfundsechzigste")+ , (66, "sechsundsechzigste")+ , (67, "siebenundsechzigste")+ , (68, "achtundsechzigste")+ , (69, "neunundsechzigste")+ , (70, "siebzigste")+ , (71, "einundsiebzigste")+ , (72, "zweiundsiebzigste")+ , (73, "dreiundsiebzigste")+ , (74, "vierundsiebzigste")+ , (75, "fünfundsiebzigste")+ , (76, "sechsundsiebzigste")+ , (77, "siebenundsiebzigste")+ , (78, "achtundsiebzigste")+ , (79, "neunundsiebzigste")+ , (80, "achtzigste")+ , (81, "einundachtzigste")+ , (82, "zweiundachtzigste")+ , (83, "dreiundachtzigste")+ , (84, "vierundachtzigste")+ , (85, "fünfundachtzigste")+ , (86, "sechsundachtzigste")+ , (87, "siebenundachtzigste")+ , (88, "achtundachtzigste")+ , (89, "neunundachtzigste")+ , (90, "neunzigste")+ , (91, "einundneunzigste")+ , (92, "zweiundneunzigste")+ , (93, "dreiundneunzigste")+ , (94, "vierundneunzigste")+ , (95, "fünfundneunzigste")+ , (96, "sechsundneunzigste")+ , (97, "siebenundneunzigste")+ , (98, "achtundneunzigste")+ , (99, "neunundneunzigste")+ , (100, "hundertste")+ , (101, "hunderterste")+ , (102, "hundertzweite")+ , (103, "hundertdritte")+ , (200, "zweihundertste")+ , (201, "zweihunderterste")+ , (202, "zweihundertzweite")+ , (203, "zweihundertdritte")+ , (900, "neunhundertste")+ , (901, "neunhunderterste")+ , (998, "neunhundertachtundneunzigste")+ , (999, "neunhundertneunundneunzigste")+ , (1000, "tausendste")+ , (1001, "tausenderste")+ , (1002, "tausendzweite")+ , (2000, "zweitausendste")+ , (2001, "zweitausenderste")+ , (2002, "zweitausendzweite")+ , (2004, "zweitausendvierte")+ , (10000, "zehntausendste")+ , (20000, "zwanzigtausendste")+ , (dec 5, "hunderttausendste")+ , (dec 6, "millionste")+ , (2 ⋅ dec 6, "zwei millionste")+ , (dec 9, "milliardste")+ , (dec 12, "billionste")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/DJK/TestData.hs view
@@ -0,0 +1,203 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] djk++[@Native name@] Aukan++[@English name@] Ndyuka+-}+module Text.Numeral.Language.DJK.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-aukan/en/djk/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "wan")+ , (2, "tu")+ , (3, "dii")+ , (4, "fo")+ , (5, "feifi")+ , (6, "sigisi")+ , (7, "seibin")+ , (8, "aitin")+ , (9, "neigin")+ , (10, "tin")+ , (11, "elufu")+ , (12, "twalufu")+ , (13, "tin na dii")+ , (14, "tin na fo")+ , (15, "tin na feifi")+ , (16, "tin na sigisi")+ , (17, "tin na seibin")+ , (18, "tin na aitin")+ , (19, "tin a neigin")+ , (20, "twenti")+ , (21, "twenti a wan")+ , (22, "twenti a tu")+ , (23, "twenti a dii")+ , (24, "twenti a fo")+ , (25, "twenti a feifi")+ , (26, "twenti a sigisi")+ , (27, "twenti a seibin")+ , (28, "twenti a aitin")+ , (29, "twenti a neigin")+ , (30, "diitenti")+ , (31, "diitenti a wan")+ , (32, "diitenti a tu")+ , (33, "diitenti a dii")+ , (34, "diitenti a fo")+ , (35, "diitenti a feifi")+ , (36, "diitenti a sigisi")+ , (37, "diitenti a seibin")+ , (38, "diitenti a aitin")+ , (39, "diitenti a neigin")+ , (40, "fotenti")+ , (41, "fotenti a wan")+ , (42, "fotenti a tu")+ , (43, "fotenti a dii")+ , (44, "fotenti a fo")+ , (45, "fotenti a feifi")+ , (46, "fotenti a sigisi")+ , (47, "fotenti a seibin")+ , (48, "fotenti a aitin")+ , (49, "fotenti a neigin")+ , (50, "feifitenti")+ , (51, "feifitenti a wan")+ , (52, "feifitenti a tu")+ , (53, "feifitenti a dii")+ , (54, "feifitenti a fo")+ , (55, "feifitenti a feifi")+ , (56, "feifitenti a sigisi")+ , (57, "feifitenti a seibin")+ , (58, "feifitenti a aitin")+ , (59, "feifitenti a neigin")+ , (60, "sigisitenti")+ , (61, "sigisitenti a wan")+ , (62, "sigisitenti a tu")+ , (63, "sigisitenti a dii")+ , (64, "sigisitenti a fo")+ , (65, "sigisitenti a feifi")+ , (66, "sigisitenti a sigisi")+ , (67, "sigisitenti a seibin")+ , (68, "sigisitenti a aitin")+ , (69, "sigisitenti a neigin")+ , (70, "seibintenti")+ , (71, "seibintenti a wan")+ , (72, "seibintenti a tu")+ , (73, "seibintenti a dii")+ , (74, "seibintenti a fo")+ , (75, "seibintenti a feifi")+ , (76, "seibintenti a sigisi")+ , (77, "seibintenti a seibin")+ , (78, "seibintenti a aitin")+ , (79, "seibintenti a neigin")+ , (80, "aitintenti")+ , (81, "aitintenti a wan")+ , (82, "aitintenti a tu")+ , (83, "aitintenti a dii")+ , (84, "aitintenti a fo")+ , (85, "aitintenti a feifi")+ , (86, "aitintenti a sigisi")+ , (87, "aitintenti a seibin")+ , (88, "aitintenti a aitin")+ , (89, "aitintenti a neigin")+ , (90, "neigintenti")+ , (91, "neigintenti a wan")+ , (92, "neigintenti a tu")+ , (93, "neigintenti a dii")+ , (94, "neigintenti a fo")+ , (95, "neigintenti a feifi")+ , (96, "neigintenti a sigisi")+ , (97, "neigintenti a seibin")+ , (98, "neigintenti a aitin")+ , (99, "neigintenti a neigin")+ , (100, "wan ondoo")+ , (101, "wan ondoo anga wan")+ , (102, "wan ondoo anga tu")+ , (103, "wan ondoo anga dii")+ , (104, "wan ondoo anga fo")+ , (105, "wan ondoo anga feifi")+ , (106, "wan ondoo anga sigisi")+ , (107, "wan ondoo anga seibin")+ , (108, "wan ondoo anga aitin")+ , (109, "wan ondoo anga neigin")+ , (110, "wan ondoo anga tin")+ , (123, "wan ondoo anga twenti a dii")+ , (200, "tu ondoo")+ , (300, "dii ondoo")+ , (321, "dii ondoo anga twenti a wan")+ , (400, "fo ondoo")+ , (500, "feifi ondoo")+ , (600, "sigisi ondoo")+ , (700, "seibin ondoo")+ , (800, "aitin ondoo")+ , (900, "neigin ondoo")+ , (909, "neigin ondoo anga neigin")+ , (990, "neigin ondoo anga neigintenti")+ , (999, "neigin ondoo anga neigintenti a neigin")+ , (1000, "wan dunsu")+ , (1001, "wan dunsu wan")+ , (1008, "wan dunsu aitin")+ , (1234, "wan dunsu tu ondoo anga anga diitenti a fo")+ , (2000, "tu dunsu")+ , (3000, "dii dunsu")+ , (4000, "fo dunsu")+ , (4321, "fo dunsu dii ondoo anga anga twenti a wan")+ , (5000, "feifi dunsu")+ , (6000, "sigisi dunsu")+ , (7000, "seibin dunsu")+ , (8000, "aitin dunsu")+ , (9000, "neigin dunsu")+ , (10000, "tin dunsu")+ , (12345, "twalufu dunsu dii ondoo anga anga fotenti a feifi")+ , (20000, "twenti dunsu")+ , (30000, "diitenti dunsu")+ , (40000, "fotenti dunsu")+ , (50000, "feifitenti dunsu")+ , (54321, "feifitenti a fo dunsu dii ondoo anga anga twenti a wan")+ , (60000, "sigisitenti dunsu")+ , (70000, "seibintenti dunsu")+ , (80000, "aitintenti dunsu")+ , (90000, "neigintenti dunsu")+ , (100000, "wan ondoo anga dunsu")+ , (123456, "wan ondoo anga twenti a dii dunsu fo ondoo anga anga feifitenti a sigisi")+ , (200000, "tu ondoo anga dunsu")+ , (300000, "dii ondoo anga dunsu")+ , (400000, "fo ondoo anga dunsu")+ , (500000, "feifi ondoo anga dunsu")+ , (600000, "sigisi ondoo anga dunsu")+ , (654321, "sigisi ondoo anga feifitenti a fo dunsu dii ondoo anga anga twenti a wan")+ , (700000, "seibin ondoo anga dunsu")+ , (800000, "aitin ondoo anga dunsu")+ , (900000, "neigin ondoo anga dunsu")+ , (1000000, "wan miliyun")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/EN/TestData.hs view
@@ -0,0 +1,380 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] en++[@ISO639-2B@] eng++[@ISO639-3@] eng++[@Native name@] English++[@English name@] English+-}++module Text.Numeral.Language.EN.TestData+ ( gb_cardinals, gb_ordinals+ , us_cardinals, us_ordinals+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources: http://en.wikipedia.org/wiki/List_of_numbers++en_cardinals ∷ (Num i) ⇒ [(i, Text)]+en_cardinals =+ [ (0, "zero")+ , (1, "one")+ , (2, "two")+ , (3, "three")+ , (4, "four")+ , (5, "five")+ , (6, "six")+ , (7, "seven")+ , (8, "eight")+ , (9, "nine")+ , (10, "ten")+ , (11, "eleven")+ , (12, "twelve")+ , (13, "thirteen")+ , (14, "fourteen")+ , (15, "fifteen")+ , (16, "sixteen")+ , (17, "seventeen")+ , (18, "eighteen")+ , (19, "nineteen")+ , (20, "twenty")+ , (21, "twenty-one")+ , (22, "twenty-two")+ , (23, "twenty-three")+ , (24, "twenty-four")+ , (25, "twenty-five")+ , (26, "twenty-six")+ , (27, "twenty-seven")+ , (28, "twenty-eight")+ , (29, "twenty-nine")+ , (30, "thirty")+ , (31, "thirty-one")+ , (32, "thirty-two")+ , (33, "thirty-three")+ , (34, "thirty-four")+ , (35, "thirty-five")+ , (36, "thirty-six")+ , (37, "thirty-seven")+ , (38, "thirty-eight")+ , (39, "thirty-nine")+ , (40, "forty")+ , (41, "forty-one")+ , (42, "forty-two")+ , (43, "forty-three")+ , (44, "forty-four")+ , (45, "forty-five")+ , (46, "forty-six")+ , (47, "forty-seven")+ , (48, "forty-eight")+ , (49, "forty-nine")+ , (50, "fifty")+ , (51, "fifty-one")+ , (52, "fifty-two")+ , (53, "fifty-three")+ , (54, "fifty-four")+ , (55, "fifty-five")+ , (56, "fifty-six")+ , (57, "fifty-seven")+ , (58, "fifty-eight")+ , (59, "fifty-nine")+ , (60, "sixty")+ , (61, "sixty-one")+ , (62, "sixty-two")+ , (63, "sixty-three")+ , (64, "sixty-four")+ , (65, "sixty-five")+ , (66, "sixty-six")+ , (67, "sixty-seven")+ , (68, "sixty-eight")+ , (69, "sixty-nine")+ , (70, "seventy")+ , (71, "seventy-one")+ , (72, "seventy-two")+ , (73, "seventy-three")+ , (74, "seventy-four")+ , (75, "seventy-five")+ , (76, "seventy-six")+ , (77, "seventy-seven")+ , (78, "seventy-eight")+ , (79, "seventy-nine")+ , (80, "eighty")+ , (81, "eighty-one")+ , (82, "eighty-two")+ , (83, "eighty-three")+ , (84, "eighty-four")+ , (85, "eighty-five")+ , (86, "eighty-six")+ , (87, "eighty-seven")+ , (88, "eighty-eight")+ , (89, "eighty-nine")+ , (90, "ninety")+ , (91, "ninety-one")+ , (92, "ninety-two")+ , (93, "ninety-three")+ , (94, "ninety-four")+ , (95, "ninety-five")+ , (96, "ninety-six")+ , (97, "ninety-seven")+ , (98, "ninety-eight")+ , (99, "ninety-nine")+ , (100, "one hundred")+ ]++en_ordinals ∷ (Num i) ⇒ [(i, Text)]+en_ordinals =+ [ (0, "zeroth")+ , (1, "first")+ , (2, "second")+ , (3, "third")+ , (4, "fourth")+ , (5, "fifth")+ , (6, "sixth")+ , (7, "seventh")+ , (8, "eighth")+ , (9, "ninth")+ , (10, "tenth")+ , (11, "eleventh")+ , (12, "twelfth")+ , (13, "thirteenth")+ , (14, "fourteenth")+ , (15, "fifteenth")+ , (16, "sixteenth")+ , (17, "seventeenth")+ , (18, "eighteenth")+ , (19, "nineteenth")+ , (20, "twentieth")+ , (21, "twenty-first")+ , (22, "twenty-second")+ , (23, "twenty-third")+ , (24, "twenty-fourth")+ , (25, "twenty-fifth")+ , (26, "twenty-sixth")+ , (27, "twenty-seventh")+ , (28, "twenty-eighth")+ , (29, "twenty-ninth")+ , (30, "thirtieth")+ , (31, "thirty-first")+ , (32, "thirty-second")+ , (33, "thirty-third")+ , (34, "thirty-fourth")+ , (35, "thirty-fifth")+ , (36, "thirty-sixth")+ , (37, "thirty-seventh")+ , (38, "thirty-eighth")+ , (39, "thirty-ninth")+ , (40, "fortieth")+ , (41, "forty-first")+ , (42, "forty-second")+ , (43, "forty-third")+ , (44, "forty-fourth")+ , (45, "forty-fifth")+ , (46, "forty-sixth")+ , (47, "forty-seventh")+ , (48, "forty-eighth")+ , (49, "forty-ninth")+ , (50, "fiftieth")+ , (51, "fifty-first")+ , (52, "fifty-second")+ , (53, "fifty-third")+ , (54, "fifty-fourth")+ , (55, "fifty-fifth")+ , (56, "fifty-sixth")+ , (57, "fifty-seventh")+ , (58, "fifty-eighth")+ , (59, "fifty-ninth")+ , (60, "sixtieth")+ , (61, "sixty-first")+ , (62, "sixty-second")+ , (63, "sixty-third")+ , (64, "sixty-fourth")+ , (65, "sixty-fifth")+ , (66, "sixty-sixth")+ , (67, "sixty-seventh")+ , (68, "sixty-eighth")+ , (69, "sixty-ninth")+ , (70, "seventieth")+ , (71, "seventy-first")+ , (72, "seventy-second")+ , (73, "seventy-third")+ , (74, "seventy-fourth")+ , (75, "seventy-fifth")+ , (76, "seventy-sixth")+ , (77, "seventy-seventh")+ , (78, "seventy-eighth")+ , (79, "seventy-ninth")+ , (80, "eightieth")+ , (81, "eighty-first")+ , (82, "eighty-second")+ , (83, "eighty-third")+ , (84, "eighty-fourth")+ , (85, "eighty-fifth")+ , (86, "eighty-sixth")+ , (87, "eighty-seventh")+ , (88, "eighty-eighth")+ , (89, "eighty-ninth")+ , (90, "ninetieth")+ , (91, "ninety-first")+ , (92, "ninety-second")+ , (93, "ninety-third")+ , (94, "ninety-fourth")+ , (95, "ninety-fifth")+ , (96, "ninety-sixth")+ , (97, "ninety-seventh")+ , (98, "ninety-eighth")+ , (99, "ninety-ninth")+ , (100, "one hundreth")+ ]++gb_cardinals ∷ (Num i) ⇒ TestData i+gb_cardinals =+ [ ( "default"+ , defaultInflection+ , en_cardinals+ ⊕ [ (-1, "minus one")+ , (101, "one hundred and one")+ , (110, "one hundred and ten")+ , (111, "one hundred and eleven")+ , (120, "one hundred and twenty")+ , (121, "one hundred and twenty-one")+ , (144, "one hundred and forty-four")+ , (200, "two hundred")+ , (300, "three hundred")+ , (666, "six hundred and sixty-six")+ , (1000, "one thousand")+ , (1001, "one thousand and one")+ , (1010, "one thousand and ten")+ , (1011, "one thousand and eleven")+ , (1024, "one thousand and twenty-four")+ , (1100, "one thousand one hundred")+ , (1728, "one thousand seven hundred and twenty-eight")+ , (2000, "two thousand")+ , (10000, "ten thousand")+ , (100000, "one hundred thousand")+ , (500000, "five hundred thousand")+ , (1000000, "one million")+ , (1048576, "one million forty-eight thousand five hundred and seventy-six")+ , (10000000, "ten million")+ ]+ )+ ]++gb_ordinals ∷ (Num i) ⇒ TestData i+gb_ordinals =+ [ ( "default"+ , defaultInflection+ , en_ordinals+ ⊕ [ (101, "one hundred and first")+ , (110, "one hundred and tenth")+ , (111, "one hundred and eleventh")+ , (120, "one hundred and twentieth")+ , (121, "one hundred and twenty-first")+ , (144, "one hundred and forty-fourth")+ , (200, "two hundreth")+ , (300, "three hundreth")+ , (666, "six hundred and sixty-sixth")+ , (1000, "one thousandth")+ , (1001, "one thousand and first")+ , (1010, "one thousand and tenth")+ , (1011, "one thousand and eleventh")+ , (1024, "one thousand and twenty-fourth")+ , (1100, "one thousand one hundreth")+ , (1728, "one thousand seven hundred and twenty-eighth")+ , (2000, "two thousandth")+ , (10000, "ten thousandth")+ , (100000, "one hundred thousandth")+ , (500000, "five hundred thousandth")+ , (1000000, "one millionth")+ , (1048576, "one million forty-eight thousand five hundred and seventy-sixth")+ , (10000000, "ten millionth")+ ]+ )+ ]++us_cardinals ∷ (Num i) ⇒ TestData i+us_cardinals =+ [ ( "default"+ , defaultInflection+ , en_cardinals+ ⊕ [ (-1, "negative one")+ , (101, "one hundred one")+ , (110, "one hundred ten")+ , (111, "one hundred eleven")+ , (120, "one hundred twenty")+ , (121, "one hundred twenty-one")+ , (144, "one hundred forty-four")+ , (200, "two hundred")+ , (300, "three hundred")+ , (666, "six hundred sixty-six")+ , (1000, "one thousand")+ , (1001, "one thousand one")+ , (1010, "one thousand ten")+ , (1011, "one thousand eleven")+ , (1024, "one thousand twenty-four")+ , (1100, "one thousand one hundred")+ , (1728, "one thousand seven hundred twenty-eight")+ , (2000, "two thousand")+ , (10000, "ten thousand")+ , (100000, "one hundred thousand")+ , (500000, "five hundred thousand")+ , (1000000, "one million")+ , (1048576, "one million forty-eight thousand five hundred seventy-six")+ , (10000000, "ten million")+ ]+ )+ ]++us_ordinals ∷ (Num i) ⇒ TestData i+us_ordinals =+ [ ( "default"+ , defaultInflection+ , en_ordinals+ ⊕ [ (101, "one hundred first")+ , (110, "one hundred tenth")+ , (111, "one hundred eleventh")+ , (120, "one hundred twentieth")+ , (121, "one hundred twenty-first")+ , (144, "one hundred forty-fourth")+ , (200, "two hundreth")+ , (300, "three hundreth")+ , (666, "six hundred sixty-sixth")+ , (1000, "one thousandth")+ , (1001, "one thousand first")+ , (1010, "one thousand tenth")+ , (1011, "one thousand eleventh")+ , (1024, "one thousand twenty-fourth")+ , (1100, "one thousand one hundreth")+ , (1728, "one thousand seven hundred twenty-eighth")+ , (2000, "two thousandth")+ , (10000, "ten thousandth")+ , (100000, "one hundred thousandth")+ , (500000, "five hundred thousandth")+ , (1000000, "one millionth")+ , (1048576, "one million forty-eight thousand five hundred seventy-sixth")+ , (10000000, "ten millionth")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/EO/TestData.hs view
@@ -0,0 +1,142 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] eo++[@ISO639-2B@] epo++[@ISO639-3@] epo++[@Native name@] Esperanto++[@English name@] Esperanto+-}++module Text.Numeral.Language.EO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "nul")+ , (1, "unu")+ , (2, "du")+ , (3, "tri")+ , (4, "kvar")+ , (5, "kvin")+ , (6, "ses")+ , (7, "sep")+ , (8, "ok")+ , (9, "naŭ")+ , (10, "dek")+ , (11, "dek unu")+ , (12, "dek du")+ , (13, "dek tri")+ , (14, "dek kvar")+ , (15, "dek kvin")+ , (16, "dek ses")+ , (17, "dek sep")+ , (18, "dek ok")+ , (19, "dek naŭ")+ , (20, "dudek")+ , (21, "dudek unu")+ , (22, "dudek du")+ , (23, "dudek tri")+ , (24, "dudek kvar")+ , (25, "dudek kvin")+ , (26, "dudek ses")+ , (27, "dudek sep")+ , (28, "dudek ok")+ , (29, "dudek naŭ")+ , (30, "tridek")+ , (31, "tridek unu")+ , (32, "tridek du")+ , (33, "tridek tri")+ , (34, "tridek kvar")+ , (35, "tridek kvin")+ , (36, "tridek ses")+ , (37, "tridek sep")+ , (38, "tridek ok")+ , (39, "tridek naŭ")+ , (40, "kvardek")+ , (41, "kvardek unu")+ , (42, "kvardek du")+ , (43, "kvardek tri")+ , (44, "kvardek kvar")+ , (45, "kvardek kvin")+ , (46, "kvardek ses")+ , (47, "kvardek sep")+ , (48, "kvardek ok")+ , (49, "kvardek naŭ")+ , (50, "kvindek")+ , (51, "kvindek unu")+ , (52, "kvindek du")+ , (53, "kvindek tri")+ , (54, "kvindek kvar")+ , (55, "kvindek kvin")+ , (56, "kvindek ses")+ , (57, "kvindek sep")+ , (58, "kvindek ok")+ , (59, "kvindek naŭ")+ , (60, "sesdek")+ , (61, "sesdek unu")+ , (62, "sesdek du")+ , (63, "sesdek tri")+ , (64, "sesdek kvar")+ , (65, "sesdek kvin")+ , (66, "sesdek ses")+ , (67, "sesdek sep")+ , (68, "sesdek ok")+ , (69, "sesdek naŭ")+ , (70, "sepdek")+ , (71, "sepdek unu")+ , (72, "sepdek du")+ , (73, "sepdek tri")+ , (74, "sepdek kvar")+ , (75, "sepdek kvin")+ , (76, "sepdek ses")+ , (77, "sepdek sep")+ , (78, "sepdek ok")+ , (79, "sepdek naŭ")+ , (80, "okdek")+ , (81, "okdek unu")+ , (82, "okdek du")+ , (83, "okdek tri")+ , (84, "okdek kvar")+ , (85, "okdek kvin")+ , (86, "okdek ses")+ , (87, "okdek sep")+ , (88, "okdek ok")+ , (89, "okdek naŭ")+ , (90, "naŭdek")+ , (91, "naŭdek unu")+ , (92, "naŭdek du")+ , (93, "naŭdek tri")+ , (94, "naŭdek kvar")+ , (95, "naŭdek kvin")+ , (96, "naŭdek ses")+ , (97, "naŭdek sep")+ , (98, "naŭdek ok")+ , (99, "naŭdek naŭ")+ , (100, "cent")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/ES/TestData.hs view
@@ -0,0 +1,280 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] es++[@ISO639-2B@] spa++[@ISO639-3@] spa++[@Native name@] Español++[@English name@] Spanish+-}++module Text.Numeral.Language.ES.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num, (+), Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Misc ( dec )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://www.sf.airnet.ne.jp/~ts/language/number/spanish.html+-- http://spanish.about.com/cs/forbeginners/a/cardinalnum_beg.htm+-- http://www.learn-spanish-help.com/count-in-spanish.html+-- http://www.donquijote.org/spanishlanguage/numbers/numbers1.asp+-- http://en.wiktionary.org/wiki/Appendix:Spanish_numerals++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "neuter"+ , neuter defaultInflection+ , [ (-3, "menos tres")+ , (-2, "menos dos")+ , (-1, "menos uno")+ , (0, "cero")+ , (1, "uno")+ , (2, "dos")+ , (3, "tres")+ , (4, "cuatro")+ , (5, "cinco")+ , (6, "seis")+ , (7, "siete")+ , (8, "ocho")+ , (9, "nueve")+ , (10, "diez")+ , (11, "once")+ , (12, "doce")+ , (13, "trece")+ , (14, "catorce")+ , (15, "quince")+ , (16, "dieciséis")+ , (17, "diecisiete")+ , (18, "dieciocho")+ , (19, "diecinueve")+ , (20, "veinte")+ , (21, "veintiuno")+ , (22, "veintidós")+ , (23, "veintitrés")+ , (24, "veinticuatro")+ , (25, "veinticinco")+ , (26, "veintiséis")+ , (27, "veintisiete")+ , (28, "veintiocho")+ , (29, "veintinueve")+ , (30, "treinta")+ , (31, "treinta y uno")+ , (32, "treinta y dos")+ , (33, "treinta y tres")+ , (34, "treinta y cuatro")+ , (35, "treinta y cinco")+ , (36, "treinta y seis")+ , (37, "treinta y siete")+ , (38, "treinta y ocho")+ , (39, "treinta y nueve")+ , (40, "cuarenta")+ , (41, "cuarenta y uno")+ , (42, "cuarenta y dos")+ , (43, "cuarenta y tres")+ , (44, "cuarenta y cuatro")+ , (45, "cuarenta y cinco")+ , (46, "cuarenta y seis")+ , (47, "cuarenta y siete")+ , (48, "cuarenta y ocho")+ , (49, "cuarenta y nueve")+ , (50, "cincuenta")+ , (51, "cincuenta y uno")+ , (52, "cincuenta y dos")+ , (53, "cincuenta y tres")+ , (54, "cincuenta y cuatro")+ , (55, "cincuenta y cinco")+ , (56, "cincuenta y seis")+ , (57, "cincuenta y siete")+ , (58, "cincuenta y ocho")+ , (59, "cincuenta y nueve")+ , (60, "sesenta")+ , (61, "sesenta y uno")+ , (62, "sesenta y dos")+ , (63, "sesenta y tres")+ , (64, "sesenta y cuatro")+ , (65, "sesenta y cinco")+ , (66, "sesenta y seis")+ , (67, "sesenta y siete")+ , (68, "sesenta y ocho")+ , (69, "sesenta y nueve")+ , (70, "setenta")+ , (71, "setenta y uno")+ , (72, "setenta y dos")+ , (73, "setenta y tres")+ , (74, "setenta y cuatro")+ , (75, "setenta y cinco")+ , (76, "setenta y seis")+ , (77, "setenta y siete")+ , (78, "setenta y ocho")+ , (79, "setenta y nueve")+ , (80, "ochenta")+ , (81, "ochenta y uno")+ , (82, "ochenta y dos")+ , (83, "ochenta y tres")+ , (84, "ochenta y cuatro")+ , (85, "ochenta y cinco")+ , (86, "ochenta y seis")+ , (87, "ochenta y siete")+ , (88, "ochenta y ocho")+ , (89, "ochenta y nueve")+ , (90, "noventa")+ , (91, "noventa y uno")+ , (92, "noventa y dos")+ , (93, "noventa y tres")+ , (94, "noventa y cuatro")+ , (95, "noventa y cinco")+ , (96, "noventa y seis")+ , (97, "noventa y siete")+ , (98, "noventa y ocho")+ , (99, "noventa y nueve")+ , (100, "cien")+ , (101, "ciento uno")+ , (103, "ciento tres")+ , (114, "ciento catorce")+ , (127, "ciento veintisiete")+ , (165, "ciento sesenta y cinco")+ , (198, "ciento noventa y ocho")+ , (199, "ciento noventa y nueve")+ , (200, "doscientos")+ , (221, "doscientos veintiuno")+ , (256, "doscientos cincuenta y seis")+ , (300, "trescientos")+ , (400, "cuatrocientos")+ , (496, "cuatrocientos noventa y seis")+ , (500, "quinientos")+ , (512, "quinientos doce")+ , (600, "seiscientos")+ , (666, "seiscientos sesenta y seis")+ , (700, "setecientos")+ , (800, "ochocientos")+ , (900, "novecientos")+ , (1000, "mil")+ , (1002, "mil dos")+ , (1024, "mil veinticuatro")+ , (1729, "mil setecientos veintinueve")+ , (2000, "dos mil")+ , (2800, "dos mil ochocientos")+ , (3000, "tres mil")+ , (4000, "cuatro mil")+ , (5000, "cinco mil")+ , (6000, "seis mil")+ , (7000, "siete mil")+ , (8000, "ocho mil")+ , (9000, "nueve mil")+ , (dec 4, "diez mil")+ , (15000, "quince mil")+ , (18000, "dieciocho mil")+ , (22000, "veintidós mil")+ , (28000, "veintiocho mil")+ , (37000, "treinta y siete mil")+ , (85000, "ochenta y cinco mil")+ , (dec 5, "cien mil")+ , (108000, "ciento ocho mil")+ , (160000, "ciento sesenta mil")+ , (585000, "quinientos ochenta y cinco mil")+ , (999000, "novecientos noventa y nueve mil")+ , (dec 6, "un millón")+ , (dec 6 + 1, "un millón uno")+ , (21 ⋅ dec 6 + 21, "veintiún millones veintiuno")+ , (500 ⋅ dec 6, "quinientos millones")+ , (521 ⋅ dec 6 + 1, "quinientos veintiún millones uno")+ , (dec 7, "diez millones")+ , (dec 8, "cien millones")+ , (dec 9, "mil millones")+ , (dec 10, "diez mil millones")+ , (dec 11, "cien mil millones")+ , (dec 12, "un billón")+ , (dec 18, "un trillón")+ , (dec 24, "un cuatrillón")+ , (15936535897932384626433832795, "quince mil novecientos treinta y seis cuatrillones quinientos treinta y cinco mil ochocientos noventa y siete trillones novecientos treinta y dos mil trescientos ochenta y cuatro billones seiscientos veintiséis mil cuatrocientos treinta y tres millones ochocientos treinta y dos mil setecientos noventa y cinco")+ , (dec 30, "un quintillón")+ , (31415926535897932384626433832795, "treinta y un quintillones cuatrocientos quince mil novecientos veintiséis cuatrillones quinientos treinta y cinco mil ochocientos noventa y siete trillones novecientos treinta y dos mil trescientos ochenta y cuatro billones seiscientos veintiséis mil cuatrocientos treinta y tres millones ochocientos treinta y dos mil setecientos noventa y cinco")+ , (dec 36, "un sextillón")+ , (dec 42, "un septillón")+ , (dec 48, "un octillón")+ , (dec 54, "un nonillón")+ , (dec 60, "un decillón")+ , (dec 66, "un undecillón")+ , (dec 72, "un duodecillón")+ , (dec 78, "un tredecillón")+ , (dec 84, "un cuatordecillón")+ , (dec 90, "un quindecillón")+ , (dec 96, "un sexdecillón")+ , (dec 102, "un septendecillón")+ , (dec 108, "un octodecillón")+ , (dec 114, "un novendecillón")+ , (dec 120, "un vigintillón")+ ]+ )+ , ( "feminine"+ , feminine defaultInflection+ , [ (1, "una")+ , (11, "once")+ , (21, "veintiuna")+ , (31, "treinta y una")+ , (41, "cuarenta y una")+ , (51, "cincuenta y una")+ , (61, "sesenta y una")+ , (71, "setenta y una")+ , (81, "ochenta y una")+ , (91, "noventa y una")+ , (100, "cien")+ , (101, "ciento una")+ , (200, "doscientas")+ , (221, "doscientas veintiuna")+ , (300, "trescientas")+ , (400, "cuatrocientas")+ , (500, "quinientas")+ , (600, "seiscientas")+ , (700, "setecientas")+ , (800, "ochocientas")+ , (900, "novecientas")+ , (dec 6, "un millón")+ , (dec 6 + 1, "un millón una")+ , (21 ⋅ dec 6 + 21, "veintiún millones veintiuna")+ ]+ )+ , ( "masculine"+ , masculine defaultInflection+ , [ (1, "un")+ , (11, "once")+ , (21, "veintiún")+ , (31, "treinta y un")+ , (41, "cuarenta y un")+ , (51, "cincuenta y un")+ , (61, "sesenta y un")+ , (71, "setenta y un")+ , (81, "ochenta y un")+ , (91, "noventa y un")+ , (100, "cien")+ , (101, "ciento un")+ , (200, "doscientos")+ , (221, "doscientos veintiún")+ , (dec 6, "un millón")+ , (dec 6 + 1, "un millón un")+ , (21 ⋅ dec 6 + 21, "veintiún millones veintiún")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/ET/TestData.hs view
@@ -0,0 +1,220 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] et++[@ISO639-2@] est++[@ISO639-3@] est++[@Native name@] eesti keel++[@English name@] Estonian+-}++module Text.Numeral.Language.ET.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "null")+ , (1, "üks")+ , (2, "kaks")+ , (3, "kolm")+ , (4, "neli")+ , (5, "viis")+ , (6, "kuus")+ , (7, "seitse")+ , (8, "kaheksa")+ , (9, "üheksa")+ , (10, "kümme")+ , (11, "üksteist")+ , (12, "kaksteist")+ , (13, "kolmteist")+ , (14, "neliteist")+ , (15, "viisteist")+ , (16, "kuusteist")+ , (17, "seitseteist")+ , (18, "kaheksateist")+ , (19, "üheksateist")+ , (20, "kakskümmend")+ , (21, "kakskümmend üks")+ , (22, "kakskümmend kaks")+ , (23, "kakskümmend kolm")+ , (24, "kakskümmend neli")+ , (25, "kakskümmend viis")+ , (26, "kakskümmend kuus")+ , (27, "kakskümmend seitse")+ , (28, "kakskümmend kaheksa")+ , (29, "kakskümmend üheksa")+ , (30, "kolmkümmend")+ , (31, "kolmkümmend üks")+ , (32, "kolmkümmend kaks")+ , (33, "kolmkümmend kolm")+ , (34, "kolmkümmend neli")+ , (35, "kolmkümmend viis")+ , (36, "kolmkümmend kuus")+ , (37, "kolmkümmend seitse")+ , (38, "kolmkümmend kaheksa")+ , (39, "kolmkümmend üheksa")+ , (40, "nelikümmend")+ , (41, "nelikümmend üks")+ , (42, "nelikümmend kaks")+ , (43, "nelikümmend kolm")+ , (44, "nelikümmend neli")+ , (45, "nelikümmend viis")+ , (46, "nelikümmend kuus")+ , (47, "nelikümmend seitse")+ , (48, "nelikümmend kaheksa")+ , (49, "nelikümmend üheksa")+ , (50, "viiskümmend")+ , (51, "viiskümmend üks")+ , (52, "viiskümmend kaks")+ , (53, "viiskümmend kolm")+ , (54, "viiskümmend neli")+ , (55, "viiskümmend viis")+ , (56, "viiskümmend kuus")+ , (57, "viiskümmend seitse")+ , (58, "viiskümmend kaheksa")+ , (59, "viiskümmend üheksa")+ , (61, "kuuskümmend üks")+ , (62, "kuuskümmend kaks")+ , (63, "kuuskümmend kolm")+ , (64, "kuuskümmend neli")+ , (65, "kuuskümmend viis")+ , (66, "kuuskümmend kuus")+ , (67, "kuuskümmend seitse")+ , (68, "kuuskümmend kaheksa")+ , (69, "kuuskümmend üheksa")+ , (71, "seitsekümmend üks")+ , (72, "seitsekümmend kaks")+ , (73, "seitsekümmend kolm")+ , (74, "seitsekümmend neli")+ , (75, "seitsekümmend viis")+ , (76, "seitsekümmend kuus")+ , (77, "seitsekümmend seitse")+ , (78, "seitsekümmend kaheksa")+ , (79, "seitsekümmend üheksa")+ , (81, "kaheksakümmend üks")+ , (82, "kaheksakümmend kaks")+ , (83, "kaheksakümmend kolm")+ , (84, "kaheksakümmend neli")+ , (85, "kaheksakümmend viis")+ , (86, "kaheksakümmend kuus")+ , (87, "kaheksakümmend seitse")+ , (88, "kaheksakümmend kaheksa")+ , (89, "kaheksakümmend üheksa")+ , (91, "üheksakümmend üks")+ , (92, "üheksakümmend kaks")+ , (93, "üheksakümmend kolm")+ , (94, "üheksakümmend neli")+ , (95, "üheksakümmend viis")+ , (96, "üheksakümmend kuus")+ , (97, "üheksakümmend seitse")+ , (98, "üheksakümmend kaheksa")+ , (99, "üheksakümmend üheksa")+ , (100, "sada")+ , (101, "sadaüks")+ , (102, "sadakaks")+ , (103, "sadakolm")+ , (104, "sadaneli")+ , (105, "sadaviis")+ , (106, "sadakuus")+ , (107, "sadaseitse")+ , (108, "sadakaheksa")+ , (109, "sadaüheksa")+ , (110, "sadakümme")+ , (123, "sadakakskümmend kolm")+ , (200, "kakssada")+ , (300, "kolmsada")+ , (321, "kolmsadakakskümmend üks")+ , (400, "nelisada")+ , (500, "viissada")+ , (600, "kuussada")+ , (700, "seitsesada")+ , (800, "kaheksasada")+ , (900, "üheksasada")+ , (909, "üheksasadaüheksa")+ , (990, "üheksasadaüheksakümmend")+ , (999, "üheksasadaüheksakümmend üheksa")+ , (1000, "tuhat")+ , (1001, "tuhatüks")+ , (1008, "tuhatkaheksa")+ , (1234, "tuhatkakssadakolmkümmend neli")+ , (2000, "kaks tuhat")+ , (3000, "kolm tuhat")+ , (4000, "neli tuhat")+ , (4321, "neli tuhatkolmsadakakskümmend üks")+ , (5000, "viis tuhat")+ , (6000, "kuus tuhat")+ , (7000, "seitse tuhat")+ , (8000, "kaheksa tuhat")+ , (9000, "üheksa tuhat")+ , (10000, "kümme tuhat")+ , (12345, "kaksteist tuhatkolmsadanelikümmend viis")+ , (20000, "kakskümmend tuhat")+ , (30000, "kolmkümmend tuhat")+ , (40000, "nelikümmend tuhat")+ , (50000, "viiskümmend tuhat")+ , (54321, "viiskümmend neli tuhatkolmsadakakskümmend üks")+ , (60000, "kuuskümmend tuhat")+ , (70000, "seitsekümmend tuhat")+ , (80000, "kaheksakümmend tuhat")+ , (90000, "üheksakümmend tuhat")+ , (100000, "sada tuhat")+ , (123456, "sadakakskümmend kolm tuhatnelisadaviiskümmend kuus")+ , (200000, "kakssada tuhat")+ , (300000, "kolmsada tuhat")+ , (400000, "nelisada tuhat")+ , (500000, "viissada tuhat")+ , (600000, "kuussada tuhat")+ , (654321, "kuussadaviiskümmend neli tuhatkolmsadakakskümmend üks")+ , (700000, "seitsesada tuhat")+ , (800000, "kaheksasada tuhat")+ , (900000, "üheksasada tuhat")+ , (1000000, "miljon")+ , (1000001, "miljonüks")+ , (1234567, "miljonkakssadakolmkümmend neli tuhatviissadakuuskümmend seitse")+ , (2000000, "kaks miljonit")+ , (3000000, "kolm miljonit")+ , (4000000, "neli miljonit")+ , (5000000, "viis miljonit")+ , (6000000, "kuus miljonit")+ , (7000000, "seitse miljonit")+ , (7654321, "seitse miljonitkuussadaviiskümmend neli tuhatkolmsadakakskümmend üks")+ , (8000000, "kaheksa miljonit")+ , (9000000, "üheksa miljonit")+ , (1000000000, "miljard")+ , (1000000001, "miljardüks")+ , (2000000000, "kaks miljard")+ , (3000000000, "kolm miljard")+ , (4000000000, "neli miljard")+ , (5000000000, "viis miljard")+ , (6000000000, "kuus miljard")+ , (7000000000, "seitse miljard")+ , (8000000000, "kaheksa miljard")+ , (9000000000, "üheksa miljard")+ , (1000000000000, "triljon")+ , (1000000000001, "triljonüks")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/FI/TestData.hs view
@@ -0,0 +1,1827 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] fi++[@ISO639-2@] fin++[@ISO639-3@] fin++[@Native name@] suomi++[@English name@] Finnish+-}++module Text.Numeral.Language.FI.TestData+ ( cardinals+ , ordinals+ , multiplicatives+ , multipliers+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( ($) )+import "base" Prelude ( Integral, (+) )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://www.marijn.org/everything-is-4/counting-0-to-100/finnish+-- http://www.languagesandnumbers.com/how-to-count-in-finnish/en/fin/+-- http://en.wikipedia.org/wiki/Finnish_numerals+-- http://mylanguages.org/finnish_numbers.php+-- http://users.jyu.fi/~pamakine/kieli/suomi/numeraalit/numeroten.html++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "singular nominative"+ , singular $ nominative defaultInflection+ , [ (0, "nolla")+ , (1, "yksi")+ , (2, "kaksi")+ , (3, "kolme")+ , (4, "neljä")+ , (5, "viisi")+ , (6, "kuusi")+ , (7, "seitsemän")+ , (8, "kahdeksan")+ , (9, "yhdeksän")+ , (10, "kymmenen")+ , (11, "yksitoista")+ , (12, "kaksitoista")+ , (13, "kolmetoista")+ , (14, "neljätoista")+ , (15, "viisitoista")+ , (16, "kuusitoista")+ , (17, "seitsemäntoista")+ , (18, "kahdeksantoista")+ , (19, "yhdeksäntoista")+ , (20, "kaksikymmentä")+ , (21, "kaksikymmentäyksi")+ , (22, "kaksikymmentäkaksi")+ , (23, "kaksikymmentäkolme")+ , (24, "kaksikymmentäneljä")+ , (25, "kaksikymmentäviisi")+ , (26, "kaksikymmentäkuusi")+ , (27, "kaksikymmentäseitsemän")+ , (28, "kaksikymmentäkahdeksan")+ , (29, "kaksikymmentäyhdeksän")+ , (30, "kolmekymmentä")+ , (31, "kolmekymmentäyksi")+ , (32, "kolmekymmentäkaksi")+ , (33, "kolmekymmentäkolme")+ , (34, "kolmekymmentäneljä")+ , (35, "kolmekymmentäviisi")+ , (36, "kolmekymmentäkuusi")+ , (37, "kolmekymmentäseitsemän")+ , (38, "kolmekymmentäkahdeksan")+ , (39, "kolmekymmentäyhdeksän")+ , (40, "neljäkymmentä")+ , (41, "neljäkymmentäyksi")+ , (42, "neljäkymmentäkaksi")+ , (43, "neljäkymmentäkolme")+ , (44, "neljäkymmentäneljä")+ , (45, "neljäkymmentäviisi")+ , (46, "neljäkymmentäkuusi")+ , (47, "neljäkymmentäseitsemän")+ , (48, "neljäkymmentäkahdeksan")+ , (49, "neljäkymmentäyhdeksän")+ , (50, "viisikymmentä")+ , (51, "viisikymmentäyksi")+ , (52, "viisikymmentäkaksi")+ , (53, "viisikymmentäkolme")+ , (54, "viisikymmentäneljä")+ , (55, "viisikymmentäviisi")+ , (56, "viisikymmentäkuusi")+ , (57, "viisikymmentäseitsemän")+ , (58, "viisikymmentäkahdeksan")+ , (59, "viisikymmentäyhdeksän")+ , (60, "kuusikymmentä")+ , (61, "kuusikymmentäyksi")+ , (62, "kuusikymmentäkaksi")+ , (63, "kuusikymmentäkolme")+ , (64, "kuusikymmentäneljä")+ , (65, "kuusikymmentäviisi")+ , (66, "kuusikymmentäkuusi")+ , (67, "kuusikymmentäseitsemän")+ , (68, "kuusikymmentäkahdeksan")+ , (69, "kuusikymmentäyhdeksän")+ , (70, "seitsemänkymmentä")+ , (71, "seitsemänkymmentäyksi")+ , (72, "seitsemänkymmentäkaksi")+ , (73, "seitsemänkymmentäkolme")+ , (74, "seitsemänkymmentäneljä")+ , (75, "seitsemänkymmentäviisi")+ , (76, "seitsemänkymmentäkuusi")+ , (77, "seitsemänkymmentäseitsemän")+ , (78, "seitsemänkymmentäkahdeksan")+ , (79, "seitsemänkymmentäyhdeksän")+ , (80, "kahdeksankymmentä")+ , (81, "kahdeksankymmentäyksi")+ , (82, "kahdeksankymmentäkaksi")+ , (83, "kahdeksankymmentäkolme")+ , (84, "kahdeksankymmentäneljä")+ , (85, "kahdeksankymmentäviisi")+ , (86, "kahdeksankymmentäkuusi")+ , (87, "kahdeksankymmentäseitsemän")+ , (88, "kahdeksankymmentäkahdeksan")+ , (89, "kahdeksankymmentäyhdeksän")+ , (90, "yhdeksänkymmentä")+ , (91, "yhdeksänkymmentäyksi")+ , (92, "yhdeksänkymmentäkaksi")+ , (93, "yhdeksänkymmentäkolme")+ , (94, "yhdeksänkymmentäneljä")+ , (95, "yhdeksänkymmentäviisi")+ , (96, "yhdeksänkymmentäkuusi")+ , (97, "yhdeksänkymmentäseitsemän")+ , (98, "yhdeksänkymmentäkahdeksan")+ , (99, "yhdeksänkymmentäyhdeksän")+ , (100, "sata")+ , (101, "satayksi")+ , (123, "satakaksikymmentäkolme")+ , (200, "kaksisataa")+ , (300, "kolmesataa")+ , (357, "kolmesataaviisikymmentäseitsemän")+ , (400, "neljäsataa")+ , (500, "viisisataa")+ , (567, "viisisataakuusikymmentäseitsemän")+ , (600, "kuusisataa")+ , (700, "seitsemänsataa")+ , (800, "kahdeksansataa")+ , (900, "yhdeksänsataa")+ , (999, "yhdeksänsataayhdeksänkymmentäyhdeksän")+ , (1000, "tuhat")+ , (1001, "tuhatyksi")+ , (2000, "kaksituhatta")+ , (3000, "kolmetuhatta")+ , (3456, "kolmetuhattaneljäsataaviisikymmentäkuusi")+ , (3721, "kolmetuhattaseitsemänsataakaksikymmentäyksi")+ , (4000, "neljätuhatta")+ , (5000, "viisituhatta")+ , (6000, "kuusituhatta")+ , (7000, "seitsemäntuhatta")+ , (8000, "kahdeksantuhatta")+ , (9000, "yhdeksäntuhatta")+ , (10000, "kymmenentuhatta")+ , (11000, "toistatuhatta")+ , (12000, "toistakaksituhatta")+ , (13000, "toistakolmetuhatta")+ , (dec 5, "satatuhatta")+ , (2 ⋅ dec 5, "kaksisataatuhatta")+ , (dec 6, "miljoona")+ , (dec 6 + 1, "miljoonayksi")+ , (2 ⋅ dec 6, "kaksimiljoonaa")+ , (32534756, "kolmekymmentäkaksimiljoonaaviisisataakolmekymmentäneljätuhattaseitsemänsataaviisikymmentäkuusi")+ , (dec 9, "miljardi")+ , (2 ⋅ dec 9, "kaksimiljardia")+ , (3 ⋅ dec 9, "kolmemiljardia")+ , (dec 12, "biljoona")+ , (3 ⋅ dec 12, "kolmebiljoonaa")+ ]+ )+ , ( "singular accusative"+ , singular $ accusative defaultInflection+ , [ (0, "nolla")+ , (1, "yksi")+ , (2, "kaksi")+ , (3, "kolme")+ , (4, "neljä")+ , (5, "viisi")+ , (6, "kuusi")+ , (7, "seitsemän")+ , (8, "kahdeksan")+ , (9, "yhdeksän")+ , (10, "kymmenen")+ , (11, "yksitoista")+ , (12, "kaksitoista")+ , (13, "kolmetoista")+ , (14, "neljätoista")+ , (15, "viisitoista")+ , (16, "kuusitoista")+ , (17, "seitsemäntoista")+ , (18, "kahdeksantoista")+ , (19, "yhdeksäntoista")+ , (20, "kaksikymmentä")+ , (21, "kaksikymmentäyksi")+ , (100, "sata")+ , (1000, "tuhat")+ ]+ )+ , ( "singular genitive"+ , singular $ genitive defaultInflection+ , [ (0, "nollan")+ , (1, "yhden")+ , (2, "kahden")+ , (3, "kolmen")+ , (4, "neljän")+ , (5, "viiden")+ , (6, "kuuden")+ , (7, "seitsemän")+ , (8, "kahdeksan")+ , (9, "yhdeksän")+ , (10, "kymmenen")+ , (11, "yhdentoista")+ , (12, "kahdentoista")+ , (13, "kolmentoista")+ , (14, "neljäntoista")+ , (15, "viidentoista")+ , (16, "kuudentoista")+ , (17, "seitsemäntoista")+ , (18, "kahdeksantoista")+ , (19, "yhdeksäntoista")+ , (20, "kahdenkymmenen")+ , (21, "kahdenkymmenenyhden")+ , (100, "sadan")+ , (357, "kolmensadanviidenkymmenenseitsemän")+ , (1000, "tuhannen")+ ]+ )+ , ( "singular partitive"+ , singular $ partitive defaultInflection+ , [ (0, "nollaa")+ , (1, "yhtä")+ , (2, "kahta")+ , (3, "kolmea")+ , (4, "neljää")+ , (5, "viittä")+ , (6, "kuutta")+ , (7, "seitsemää")+ , (8, "kahdeksaa")+ , (9, "yhdeksää")+ , (10, "kymmentä")+ , (11, "yhtätoista")+ , (12, "kahtatoista")+ , (13, "kolmeatoista")+ , (14, "neljäätoista")+ , (15, "viittätoista")+ , (16, "kuuttatoista")+ , (17, "seitsemäätoista")+ , (18, "kahdeksaatoista")+ , (19, "yhdeksäätoista")+ , (20, "kahtakymmentä")+ , (21, "kahtakymmentäyhtä")+ , (100, "sataa")+ , (357, "kolmeasataaviittäkymmentäseitsemää")+ , (1000, "tuhatta")+ ]+ )+ , ( "singular essive"+ , singular $ essive defaultInflection+ , [ (0, "nollana")+ , (1, "yhtenä")+ , (2, "kahtena")+ , (3, "kolmena")+ , (4, "neljänä")+ , (5, "viitenä")+ , (6, "kuutena")+ , (7, "seitsemänä")+ , (8, "kahdeksana")+ , (9, "yhdeksänä")+ , (10, "kymmenenä")+ , (11, "yhtenätoista")+ , (12, "kahtenatoista")+ , (13, "kolmenatoista")+ , (14, "neljänätoista")+ , (15, "viitenätoista")+ , (16, "kuutenatoista")+ , (17, "seitsemänätoista")+ , (18, "kahdeksanatoista")+ , (19, "yhdeksänätoista")+ , (20, "kahtenakymmenenä")+ , (21, "kahdessakymmenessäyhdessä")+ , (100, "satana")+ , (357, "kolmenasatanaviitenäkymmenenäseitsemänä")+ , (1000, "tuhantena")+ ]+ )+ , ( "singular translative"+ , singular $ translative defaultInflection+ , [ (0, "nollaksi")+ , (1, "yhdeksi")+ , (2, "kahdeksi")+ , (3, "kolmeksi")+ , (4, "neljäksi")+ , (5, "viideksi")+ , (6, "kuudeksi")+ , (7, "seitsemäksi")+ , (8, "kahdeksaksi")+ , (9, "yhdeksäksi")+ , (10, "kymmeneksi")+ , (11, "yhdeksitoista")+ , (12, "kahdeksitoista")+ , (13, "kolmeksitoista")+ , (14, "neljäksitoista")+ , (15, "viideksitoista")+ , (16, "kuudeksitoista")+ , (17, "seitsemäksitoista")+ , (18, "kahdeksaksitoista")+ , (19, "yhdeksäksitoista")+ , (20, "kahdeksikymmeneksi")+ , (21, "kahdeksikymmeneksiyhdeksi")+ , (100, "sadaksi")+ , (1000, "tuhanneksi")+ ]+ )+ , ( "singular locative inessive"+ , singular $ locativeInessive defaultInflection+ , [ (0, "nollassa")+ , (1, "yhdessä")+ , (2, "kahdessa")+ , (3, "kolmessa")+ , (4, "neljässä")+ , (5, "viidessä")+ , (6, "kuudessa")+ , (7, "seitsemässä")+ , (8, "kahdeksassa")+ , (9, "yhdeksässä")+ , (10, "kymmenessä")+ , (11, "yhdessätoista")+ , (12, "kahdessatoista")+ , (13, "kolmessatoista")+ , (14, "neljässätoista")+ , (15, "viidessätoista")+ , (16, "kuudessatoista")+ , (17, "seitsemässätoista")+ , (18, "kahdeksassatoista")+ , (19, "yhdeksässätoista")+ , (20, "kahdessakymmenessä")+ , (21, "kahdessakymmenessäyhdessä")+ , (100, "sadassa")+ , (1000, "tuhannessa")+ ]+ )+ , ( "singular locative elative"+ , singular $ locativeElative defaultInflection+ , [ (0, "nollasta")+ , (1, "yhdestä")+ , (2, "kahdesta")+ , (3, "kolmesta")+ , (4, "neljästä")+ , (5, "viidestä")+ , (6, "kuudesta")+ , (7, "seitsemästä")+ , (8, "kahdeksasta")+ , (9, "yhdeksästä")+ , (10, "kymmenestä")+ , (11, "yhdestätoista")+ , (12, "kahdestatoista")+ , (13, "kolmestatoista")+ , (14, "neljästätoista")+ , (15, "viidestätoista")+ , (16, "kuudestatoista")+ , (17, "seitsemästätoista")+ , (18, "kahdeksastatoista")+ , (19, "yhdeksästätoista")+ , (20, "kahdestakymmenestä")+ , (21, "kahdestakymmenestäyhdestä")+ , (100, "sadasta")+ , (1000, "tuhannesta")+ ]+ )+ , ( "singular locative illative"+ , singular $ locativeIllative defaultInflection+ , [ (0, "nollaan")+ , (1, "yhteen")+ , (2, "kahteen")+ , (3, "kolmeen")+ , (4, "neljään")+ , (5, "viiteen")+ , (6, "kuuteen")+ , (7, "seitsemään")+ , (8, "kahdeksaan")+ , (9, "yhdeksään")+ , (10, "kymmeneen")+ , (11, "yhteentoista")+ , (12, "kahteentoista")+ , (13, "kolmeentoista")+ , (14, "neljääntoista")+ , (15, "viiteentoista")+ , (16, "kuuteentoista")+ , (17, "seitsemääntoista")+ , (18, "kahdeksaantoista")+ , (19, "yhdeksääntoista")+ , (20, "kahteenkymmeneen")+ , (21, "kahteenkymmeneenyhteen")+ , (100, "sataan")+ , (1000, "tuhanteen")+ ]+ )+ , ( "singular locative adessive"+ , singular $ locativeAdessive defaultInflection+ , [ (0, "nollalla")+ , (1, "yhdellä")+ , (2, "kahdella")+ , (3, "kolmella")+ , (4, "neljällä")+ , (5, "viidellä")+ , (6, "kuudella")+ , (7, "seitsemällä")+ , (8, "kahdeksalla")+ , (9, "yhdeksällä")+ , (10, "kymmenellä")+ , (11, "yhdellätoista")+ , (12, "kahdellatoista")+ , (13, "kolmellatoista")+ , (14, "neljällätoista")+ , (15, "viidellätoista")+ , (16, "kuudellatoista")+ , (17, "seitsemällätoista")+ , (18, "kahdeksallatoista")+ , (19, "yhdeksällätoista")+ , (20, "kahdellakymmenellä")+ , (21, "kahdellakymmenelläyhdellä")+ , (100, "sadalla")+ , (1000, "tuhannella")+ ]+ )+ , ( "singular locative ablative"+ , singular $ locativeAblative defaultInflection+ , [ (0, "nollalta")+ , (1, "yhdeltä")+ , (2, "kahdelta")+ , (3, "kolmelta")+ , (4, "neljältä")+ , (5, "viideltä")+ , (6, "kuudelta")+ , (7, "seitsemältä")+ , (8, "kahdeksalta")+ , (9, "yhdeksältä")+ , (10, "kymmeneltä")+ , (11, "yhdeltätoista")+ , (12, "kahdeltatoista")+ , (13, "kolmeltatoista")+ , (14, "neljältätoista")+ , (15, "viideltätoista")+ , (16, "kuudeltatoista")+ , (17, "seitsemältätoista")+ , (18, "kahdeksaltatoista")+ , (19, "yhdeksältätoista")+ , (20, "kahdeltakymmeneltä")+ , (21, "kahdeltakymmeneltäyhdeltä")+ , (100, "sadalta")+ , (1000, "tuhannelta")+ ]+ )+ , ( "singular locative allative"+ , singular $ locativeAllative defaultInflection+ , [ (0, "nollalle")+ , (1, "yhdelle")+ , (2, "kahdelle")+ , (3, "kolmelle")+ , (4, "neljälle")+ , (5, "viidelle")+ , (6, "kuudelle")+ , (7, "seitsemälle")+ , (8, "kahdeksalle")+ , (9, "yhdeksälle")+ , (10, "kymmenelle")+ , (11, "yhdelletoista")+ , (12, "kahdelletoista")+ , (13, "kolmelletoista")+ , (14, "neljälletoista")+ , (15, "viidelletoista")+ , (16, "kuudelletoista")+ , (17, "seitsemälletoista")+ , (18, "kahdeksalletoista")+ , (19, "yhdeksälletoista")+ , (20, "kahdellekymmenelle")+ , (21, "kahdellekymmenelleyhdelle")+ , (100, "sadalle")+ , (1000, "tuhannelle")+ ]+ )+ , ( "singular abessive"+ , singular $ abessive defaultInflection+ , [ (0, "nollatta")+ , (1, "yhdettä")+ , (2, "kahdetta")+ , (3, "kolmetta")+ , (4, "neljättä")+ , (5, "viidettä")+ , (6, "kuudetta")+ , (7, "seitsemättä")+ , (8, "kahdeksatta")+ , (9, "yhdeksättä")+ , (10, "kymmenettä")+ , (11, "yhdettätoista")+ , (12, "kahdettatoista")+ , (13, "kolmettatoista")+ , (14, "neljättätoista")+ , (15, "viidettätoista")+ , (16, "kuudettatoista")+ , (17, "seitsemättätoista")+ , (18, "kahdeksattatoista")+ , (19, "yhdeksättätoista")+ , (20, "kahdettakymmenettä")+ , (21, "kahdettakymmenettäyhdettä")+ , (100, "sadatta")+ , (1000, "tuhannetta")+ ]+ )+ , ( "singular super essive"+ , singular $ superEssive defaultInflection+ , [ (1, "yhtäällä")+ , (2, "kahtaalla")+ ]+ )+ , ( "singular delative"+ , singular $ delative defaultInflection+ , [ (1, "yhtäältä")+ , (2, "kahtaalta")+ ]+ )+ , ( "singular sublative"+ , singular $ sublative defaultInflection+ , [ (1, "yhtäälle")+ , (2, "kahtaalle")+ ]+ )+ , ( "singular lative"+ , singular $ lative defaultInflection+ , [ (1, "yhä")+ , (2, "kahtia")+ , (3, "kolmia")+ ]+ )+ , ( "singular multiplicative"+ , singular $ multiplicative defaultInflection+ , [ (1, "yhdesti")+ , (2, "kahdesti")+ , (3, "kolmesti")+ ]+ )+ , ( "plural nominative"+ , plural $ nominative defaultInflection+ , [ (0, "nollat")+ , (1, "yhdet")+ , (2, "kahdet")+ , (3, "kolmet")+ , (4, "neljät")+ , (5, "viidet")+ , (6, "kuudet")+ , (7, "seitsemät")+ , (8, "kahdeksat")+ , (9, "yhdeksät")+ , (10, "kymmenet")+ , (11, "yhdettoista")+ , (12, "kahdettoista")+ , (13, "kolmettoista")+ , (14, "neljättoista")+ , (15, "viidettoista")+ , (16, "kuudettoista")+ , (17, "seitsemättoista")+ , (18, "kahdeksattoista")+ , (19, "yhdeksättoista")+ , (20, "kahdetkymmenet")+ , (21, "kahdetkymmenetyhdet")+ , (100, "sadat")+ , (1000, "tuhannet")+ ]+ )+ , ( "plural accusative"+ , plural $ accusative defaultInflection+ , [ (0, "nollat")+ , (1, "yhdet")+ , (2, "kahdet")+ , (3, "kolmet")+ , (4, "neljät")+ , (5, "viidet")+ , (6, "kuudet")+ , (7, "seitsemät")+ , (8, "kahdeksat")+ , (9, "yhdeksät")+ , (10, "kymmenet")+ , (11, "yhdettoista")+ , (12, "kahdettoista")+ , (13, "kolmettoista")+ , (14, "neljättoista")+ , (15, "viidettoista")+ , (16, "kuudettoista")+ , (17, "seitsemättoista")+ , (18, "kahdeksattoista")+ , (19, "yhdeksättoista")+ , (20, "kahdetkymmenet")+ , (21, "kahdetkymmenetyhdet")+ , (100, "sadat")+ , (1000, "tuhannet")+ ]+ )+ , ( "plural genitive"+ , plural $ genitive defaultInflection+ , [ (0, "nollien")+ , (1, "yksien")+ , (2, "kaksien")+ , (3, "kolmien")+ , (4, "neljien")+ , (5, "viisien")+ , (6, "kuusien")+ , (7, "seitsemien")+ , (8, "kahdeksien")+ , (9, "yhdeksien")+ , (10, "kymmenien")+ , (11, "yksientoista")+ , (12, "kaksientoista")+ , (13, "kolmientoista")+ , (14, "neljientoista")+ , (15, "viisientoista")+ , (16, "kuusientoista")+ , (17, "seitsemientoista")+ , (18, "kahdeksientoista")+ , (19, "yhdeksientoista")+ , (20, "kaksienkymmenien")+ , (21, "kaksienkymmenienyksien")+ , (100, "satojen")+ , (1000, "tuhansien")+ ]+ )+ , ( "plural partitive"+ , plural $ partitive defaultInflection+ , [ (0, "nollia")+ , (1, "yksiä")+ , (2, "kaksia")+ , (3, "kolmia")+ , (4, "neljiä")+ , (5, "viisiä")+ , (6, "kuusia")+ , (7, "seitsemiä")+ , (8, "kahdeksia")+ , (9, "yhdeksiä")+ , (10, "kymmeniä")+ , (11, "yksiätoista")+ , (12, "kaksiatoista")+ , (13, "kolmiatoista")+ , (14, "neljiätoista")+ , (15, "viittätoista")+ , (16, "kuuttatoista")+ , (17, "seitsemiätoista")+ , (18, "kahdeksiatoista")+ , (19, "yhdeksiätoista")+ , (20, "kaksiakymmeniä")+ , (21, "kaksiakymmeniäyksiä")+ , (100, "satoja")+ , (1000, "tuhansia")+ ]+ )+ , ( "plural essive"+ , plural $ essive defaultInflection+ , [ (0, "nollina")+ , (1, "yksinä")+ , (2, "kaksina")+ , (3, "kolmina")+ , (4, "neljinä")+ , (5, "viisinä")+ , (6, "kuusina")+ , (7, "seitseminä")+ , (8, "kahdeksina")+ , (9, "yhdeksinä")+ , (10, "kymmeninä")+ , (11, "yksinätoista")+ , (12, "kaksinatoista")+ , (13, "kolminatoista")+ , (14, "neljinätoista")+ , (15, "viitenätoista")+ , (16, "kuutenatoista")+ , (17, "seitseminätoista")+ , (18, "kahdeksinatoista")+ , (19, "yhdeksinätoista")+ , (20, "kaksinakymmeninä")+ , (21, "kaksinakymmeninäyksinä")+ , (100, "satoina")+ , (1000, "tuhansina")+ ]+ )+ , ( "plural translative"+ , plural $ translative defaultInflection+ , [ (0, "nolliksi")+ , (1, "yksiksi")+ , (2, "kaksiksi")+ , (3, "kolmiksi")+ , (4, "neljiksi")+ , (5, "viisiksi")+ , (6, "kuusiksi")+ , (7, "seitsemiksi")+ , (8, "kahdeksiksi")+ , (9, "yhdeksiksi")+ , (10, "kymmeniksi")+ , (11, "yksiksitoista")+ , (12, "kaksiksitoista")+ , (13, "kolmiksitoista")+ , (14, "neljiksitoista")+ , (15, "viideksitoista")+ , (16, "kuudeksitoista")+ , (17, "seitsemiksitoista")+ , (18, "kahdeksiksitoista")+ , (19, "yhdeksiksitoista")+ , (20, "kaksiksikymmeniksi")+ , (21, "kaksiksikymmeniksiyksiksi")+ , (100, "sadoiksi")+ , (1000, "tuhansiksi")+ ]+ )+ , ( "plural locative inessive"+ , plural $ locativeInessive defaultInflection+ , [ (0, "nollissa")+ , (1, "yksissä")+ , (2, "kaksissa")+ , (3, "kolmissa")+ , (4, "neljissä")+ , (5, "viisissä")+ , (6, "kuusissa")+ , (7, "seitsemissä")+ , (8, "kahdeksissa")+ , (9, "yhdeksissä")+ , (10, "kymmenissä")+ , (11, "yksissätoista")+ , (12, "kaksissatoista")+ , (13, "kolmissatoista")+ , (14, "neljissätoista")+ , (15, "viidessätoista")+ , (16, "kuudessatoista")+ , (17, "seitsemissätoista")+ , (18, "kahdeksissatoista")+ , (19, "yhdeksissätoista")+ , (20, "kaksissakymmenissä")+ , (21, "kaksissakymmenissäyksissä")+ , (100, "sadoissa")+ , (1000, "tuhansissa")+ ]+ )+ , ( "plural locative elative"+ , plural $ locativeElative defaultInflection+ , [ (0, "nollista")+ , (1, "yksistä")+ , (2, "kaksista")+ , (3, "kolmista")+ , (4, "neljistä")+ , (5, "viisistä")+ , (6, "kuusista")+ , (7, "seitsemistä")+ , (8, "kahdeksista")+ , (9, "yhdeksistä")+ , (10, "kymmenistä")+ , (11, "yksistätoista")+ , (12, "kaksistatoista")+ , (13, "kolmistatoista")+ , (14, "neljistätoista")+ , (15, "viidestätoista")+ , (16, "kuudestatoista")+ , (17, "seitsemistätoista")+ , (18, "kahdeksistatoista")+ , (19, "yhdeksistätoista")+ , (20, "kaksistakymmenistä")+ , (21, "kaksistakymmenistäyksistä")+ , (100, "sadoista")+ , (1000, "tuhansista")+ ]+ )+ , ( "plural locative illative"+ , plural $ locativeIllative defaultInflection+ , [ (0, "nolliin")+ , (1, "yksiin")+ , (2, "kaksiin")+ , (3, "kolmiin")+ , (4, "neljiin")+ , (5, "viisiin")+ , (6, "kuusiin")+ , (7, "seitsemiin")+ , (8, "kahdeksiin")+ , (9, "yhdeksiin")+ , (10, "kymmeniin")+ , (11, "yksiintoista")+ , (12, "kaksiintoista")+ , (13, "kolmiintoista")+ , (14, "neljiintoista")+ , (15, "viiteentoista")+ , (16, "kuuteentoista")+ , (17, "seitsemiintoista")+ , (18, "kahdeksiintoista")+ , (19, "yhdeksiintoista")+ , (20, "kaksiinkymmeniin")+ , (21, "kaksiinkymmeniinyksiin")+ , (100, "satoihin")+ , (1000, "tuhansiin")+ ]+ )+ , ( "plural locative adessive"+ , plural $ locativeAdessive defaultInflection+ , [ (0, "nollilla")+ , (1, "yksillä")+ , (2, "kaksilla")+ , (3, "kolmilla")+ , (4, "neljillä")+ , (5, "viisillä")+ , (6, "kuusilla")+ , (7, "seitsemillä")+ , (8, "kahdeksilla")+ , (9, "yhdeksillä")+ , (10, "kymmenillä")+ , (11, "yksillätoista")+ , (12, "kaksillatoista")+ , (13, "kolmillatoista")+ , (14, "neljillätoista")+ , (15, "viidellätoista")+ , (16, "kuudellatoista")+ , (17, "seitsemillätoista")+ , (18, "kahdeksillatoista")+ , (19, "yhdeksillätoista")+ , (20, "kaksillakymmenillä")+ , (21, "kaksillakymmenilläyksillä")+ , (100, "sadoilla")+ , (1000, "tuhansilla")+ ]+ )+ , ( "plural locative ablative"+ , plural $ locativeAblative defaultInflection+ , [ (0, "nollilta")+ , (1, "yksiltä")+ , (2, "kaksilta")+ , (3, "kolmilta")+ , (4, "neljiltä")+ , (5, "viisiltä")+ , (6, "kuusilta")+ , (7, "seitsemiltä")+ , (8, "kahdeksilta")+ , (9, "yhdeksiltä")+ , (10, "kymmeniltä")+ , (11, "yksiltätoista")+ , (12, "kaksiltatoista")+ , (13, "kolmiltatoista")+ , (14, "neljiltätoista")+ , (15, "viideltätoista")+ , (16, "kuudeltatoista")+ , (17, "seitsemiltätoista")+ , (18, "kahdeksiltatoista")+ , (19, "yhdeksiltätoista")+ , (20, "kaksiltakymmeniltä")+ , (21, "kaksiltakymeniltäyksiltä")+ , (100, "sadoilta")+ , (1000, "tuhansilta")+ ]+ )+ , ( "plural locative allative"+ , plural $ locativeAllative defaultInflection+ , [ (0, "nollille")+ , (1, "yksille")+ , (2, "kaksille")+ , (3, "kolmille")+ , (4, "neljille")+ , (5, "viisille")+ , (6, "kuusille")+ , (7, "seitsemille")+ , (8, "kahdeksille")+ , (9, "yhdeksille")+ , (10, "kymmenille")+ , (11, "yksilletoista")+ , (12, "kaksilletoista")+ , (13, "kolmilletoista")+ , (14, "neljilletoista")+ , (15, "viidelletoista")+ , (16, "kuudelletoista")+ , (17, "seitsemilletoista")+ , (18, "kahdeksilletoista")+ , (19, "yhdeksilletoista")+ , (20, "kaksillekymmenille")+ , (21, "kaksillekymmenilleyksille")+ , (100, "sadoille")+ , (1000, "tuhansille")+ ]+ )+ , ( "plural abessive"+ , plural $ abessive defaultInflection+ , [ (0, "nollitta")+ , (1, "yksittä")+ , (2, "kaksitta")+ , (3, "kolmitta")+ , (4, "neljittä")+ , (5, "viisittä")+ , (6, "kuusitta")+ , (7, "seitsemittä")+ , (8, "kahdeksitta")+ , (9, "yhdeksittä")+ , (10, "kymmenittä")+ , (11, "yksittätoista")+ , (12, "kaksittatoista")+ , (13, "kolmittatoista")+ , (14, "neljittätoista")+ , (15, "viidettätoista")+ , (16, "kuudettatoista")+ , (17, "seitsemittätoista")+ , (18, "kahdeksittatoista")+ , (19, "yhdeksittätoista")+ , (20, "kaksittakymmenittä")+ , (21, "kaksittakymmenittäyksittä")+ , (100, "sadoitta")+ , (1000, "tuhansitta")+ ]+ )+ , ( "plural comitative"+ , plural $ comitative defaultInflection+ , [ (0, "nolline")+ , (1, "yksine")+ , (2, "kaksine")+ , (3, "kolmine")+ , (4, "neljine")+ , (5, "viisine")+ , (6, "kuusine")+ , (7, "seitsemine")+ , (8, "kahdeksine")+ , (9, "yhdeksine")+ , (10, "kymmenine")+ , (11, "yksinetoista")+ , (12, "kaksinetoista")+ , (13, "kolminetoista")+ , (14, "neljinetoista")+ , (15, "viisinetoista")+ , (16, "kuusinetoista")+ , (17, "seitseminetoista")+ , (18, "kahdeksinetoista")+ , (19, "yhdeksinetoista")+ , (20, "kaksinekymmenine")+ , (21, "kaksinekymmenineyksine")+ , (100, "satoine")+ , (1000, "tuhansine")+ ]+ )+ , ( "plural instructive"+ , plural $ instructive defaultInflection+ , [ (0, "nollin")+ , (1, "yksin")+ , (2, "kaksin")+ , (3, "kolmin")+ , (4, "neljin")+ , (5, "viisin")+ , (6, "kuusin")+ , (7, "seitsemin")+ , (8, "kahdeksin")+ , (9, "yhdeksin")+ , (10, "kymmenin")+ , (11, "yksintoista")+ , (12, "kaksintoista")+ , (13, "kolmintoista")+ , (14, "neljintoista")+ , (15, "viisintoista")+ , (16, "kuusintoista")+ , (17, "seitsemintoista")+ , (18, "kahdeksintoista")+ , (19, "yhdeksintoista")+ , (20, "kaksinkymmenin")+ , (21, "kaksinkymmeninyksin")+ , (100, "sadoin")+ , (1000, "tuhansin")+ ]+ )+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals =+ [ ( "singular nominative"+ , singular $ nominative defaultInflection+ , [ (0, "nollas")+ , (1, "ensimmäinen")+ , (2, "toinen")+ , (3, "kolmas")+ , (4, "neljäs")+ , (5, "viides")+ , (6, "kuudes")+ , (7, "seitsemäs")+ , (8, "kahdeksas")+ , (9, "yhdeksäs")+ , (10, "kymmenes")+ , (11, "yhdestoista")+ , (12, "kahdestoista")+ , (13, "kolmastoista")+ , (14, "neljästoista")+ , (15, "viidestoista")+ , (16, "kuudestoista")+ , (17, "seitsemästoista")+ , (18, "kahdeksastoista")+ , (19, "yhdeksästoista")+ , (20, "kahdeskymmenes")+ , (21, "kahdeskymmenesensimmäinen") -- also kahdeskymmenesyhdes+ , (22, "kahdeskymmenestoinen") -- also kahdeskymmeneskahdes+ , (23, "kahdeskymmeneskolmas")+ , (24, "kahdeskymmenesneljäs")+ , (25, "kahdeskymmenesviides")+ , (26, "kahdeskymmeneskuudes")+ , (27, "kahdeskymmenesseitsemäs")+ , (28, "kahdeskymmeneskahdeksas")+ , (29, "kahdeskymmenesyhdeksäs")+ , (30, "kolmaskymmenes")+ , (40, "neljäskymmenes")+ , (50, "viideskymmenes")+ , (60, "kuudeskymmenes")+ , (70, "seitsemäskymmenes")+ , (80, "kahdeksaskymmenes")+ , (90, "yhdeksäskymmenes")+ , (100, "sadas")+ , (101, "sadasensimmäinen")+ , (357, "kolmassadasviideskymmenesseitsemäs")+ , (1000, "tuhannes")+ , (1001, "tuhannesensimmäinen")+ , (3721, "kolmastuhannesseitsemässadaskahdeskymmenesensimmäinen")+ ]+ )+ , ( "singular accusative"+ , singular $ accusative defaultInflection+ , [ (0, "nollas")+ , (1, "ensimmäinen")+ , (2, "toinen")+ , (3, "kolmas")+ , (4, "neljäs")+ , (5, "viides")+ , (6, "kuudes")+ , (7, "seitsemäs")+ , (8, "kahdeksas")+ , (9, "yhdeksäs")+ , (10, "kymmenes")+ , (11, "yhdestoista")+ , (12, "kahdestoista")+ , (13, "kolmastoista")+ , (14, "neljästoista")+ , (15, "viidestoista")+ , (16, "kuudestoista")+ , (17, "seitsemästoista")+ , (18, "kahdeksastoista")+ , (19, "yhdeksästoista")+ , (20, "kahdeskymmenes")+ , (21, "kahdeskymmenesensimmäinen")+ , (100, "sadas")+ , (1000, "tuhannes")+ ]+ )+ , ( "singular genitive"+ , singular $ genitive defaultInflection+ , [ (0, "nollannen")+ , (1, "ensimmäisen")+ , (2, "toisen")+ , (3, "kolmannen")+ , (4, "neljännen")+ , (5, "viidennen")+ , (6, "kuudennen")+ , (7, "seitsemännen")+ , (8, "kahdeksannen")+ , (9, "yhdeksännen")+ , (10, "kymmenennen")+ , (11, "yhdennentoista")+ , (12, "kahdennentoista")+ , (13, "kolmannentoista")+ , (14, "neljännentoista")+ , (15, "viidennentoista")+ , (16, "kuudennentoista")+ , (17, "seitsemännentoista")+ , (18, "kahdeksannentoista")+ , (19, "yhdeksännentoista")+ , (20, "kahdennenkymmenennen")+ , (21, "kahdennenkymmenennenensimmäisen")+ , (100, "sadannen")+ , (357, "kolmannensadannenviidennenkymmenennenseitsemännen")+ , (1000, "tuhannennen")+ ]+ )+ , ( "singular partitive"+ , singular $ partitive defaultInflection+ , [ (0, "nollatta")+ , (1, "ensimmäistä")+ , (2, "toista")+ , (3, "kolmatta")+ , (4, "neljättä")+ , (5, "viidettä")+ , (6, "kuudetta")+ , (7, "seitsemättä")+ , (8, "kahdeksatta")+ , (9, "yhdeksättä")+ , (10, "kymmenettä")+ , (11, "yhdettätoista")+ , (12, "kahdettatoista")+ , (13, "kolmattatoista")+ , (14, "neljättätoista")+ , (15, "viidettätoista")+ , (16, "kuudettatoista")+ , (17, "seitsemättätoista")+ , (18, "kahdeksattatoista")+ , (19, "yhdeksättätoista")+ , (20, "kahdettakymmenettä")+ , (21, "kahdettakymmenettäensimmäistä")+ , (100, "sadatta")+ , (357, "kolmattasadattaviidettäkymmenettäseitsemätta")+ , (1000, "tuhannetta")+ ]+ )+ , ( "singular essive"+ , singular $ essive defaultInflection+ , [ (0, "nollantena")+ , (1, "ensimmmäisenä")+ , (2, "toisena")+ , (3, "kolmantena")+ , (4, "neljäntenä")+ , (5, "viidentenä")+ , (6, "kuudentena")+ , (7, "seitsemäntenä")+ , (8, "kahdeksantena")+ , (9, "yhdeksäntenä")+ , (10, "kymmenentenä")+ , (11, "yhdennessätoista")+ , (12, "kahdentenatoista")+ , (13, "kolmantenatoista")+ , (14, "neljäntenätoista")+ , (15, "viidentenätoista")+ , (16, "kuudentenatoista")+ , (17, "seitsemäntenätoista")+ , (18, "kahdeksantenatoista")+ , (19, "yhdeksäntenätoista")+ , (20, "kahdentenakymmenentenä")+ , (21, "kahdentenakymmenentenäensimmäisenä")+ , (100, "sadantena")+ , (357, "kolmantenasadantenaviidentenäkymmenentenäseitsemäntenä")+ , (1000, "tuhannentena")+ ]+ )+ , ( "singular translative"+ , singular $ translative defaultInflection+ , [ (0, "nollanneksi")+ , (1, "ensimmäiseksi")+ , (2, "toiseksi")+ , (3, "kolmanneksi")+ , (4, "neljänneksi")+ , (5, "viidenneksi")+ , (6, "kuudenneksi")+ , (7, "seitsemänneksi")+ , (8, "kahdeksanneksi")+ , (9, "yhdeksänneksi")+ , (10, "kymmenenneksi")+ , (11, "yhdenneksitoista")+ , (12, "kahdenneksitoista")+ , (13, "kolmanneksitoista")+ , (14, "neljänneksitoista")+ , (15, "viidenneksitoista")+ , (16, "kuudenneksitoista")+ , (17, "seitsemänneksitoista")+ , (18, "kahdenksanneksitoista")+ , (19, "yhdeksänneksitoista")+ , (20, "kahdenneksikymmenenneksi")+ , (21, "kahdenneksikymmenenneksiensimmäiseksi")+ , (100, "sadanneksi")+ , (1000, "tuhannenneksi")+ ]+ )+ , ( "singular locative inessive"+ , singular $ locativeInessive defaultInflection+ , [ (0, "nollannessa")+ , (1, "ensimmäisessä")+ , (2, "toisessa")+ , (3, "kolmannessa")+ , (4, "neljännessä")+ , (5, "viidennessä")+ , (6, "kuudennessa")+ , (7, "seitsemännessä")+ , (8, "kahdeksannessa")+ , (9, "yhdeksännessä")+ , (10, "kymmenennessä")+ , (11, "yhdennessätoista")+ , (12, "kahdennessatoista")+ , (13, "kolmannessatoista")+ , (14, "neljännessätoista")+ , (15, "viidennessätoista")+ , (16, "kuudennessatoista")+ , (17, "seitsemännessätoista")+ , (18, "kahdeksannessatoista")+ , (19, "yhdeksännessätoista")+ , (20, "kahdennessakymmenennessä")+ , (21, "kahdennessakymmenennessäensimmäisessä")+ , (100, "sadannessa")+ , (1000, "tuhannennessa")+ ]+ )+ , ( "singular locative elative"+ , singular $ locativeElative defaultInflection+ , [ (0, "nollannesta")+ , (1, "ensimmäisestä")+ , (2, "toisesta")+ , (3, "kolmannesta")+ , (4, "neljännestä")+ , (5, "viidennestä")+ , (6, "kuudennesta")+ , (7, "seitsemännestä")+ , (8, "kahdeksannesta")+ , (9, "yhdeksännestä")+ , (10, "kymmenennestä")+ , (11, "yhdennestätoista")+ , (12, "kahdennestatoista")+ , (13, "kolmannestatoista")+ , (14, "neljännestätoista")+ , (15, "viidennestätoista")+ , (16, "kuudennestatoista")+ , (17, "seitsemännestätoista")+ , (18, "kahdeksannestatoista")+ , (19, "yhdeksännestätoista")+ , (20, "kahdennestakymmenennestä")+ , (21, "kahdennestakymmenennestäensimmäisestä")+ , (100, "sadannesta")+ , (1000, "tuhannennesta")+ ]+ )+ , ( "singular locative illative"+ , singular $ locativeIllative defaultInflection+ , [ (0, "nollanteen")+ , (1, "ensimmäiseen")+ , (2, "toiseen")+ , (3, "kolmanteen")+ , (4, "neljänteen")+ , (5, "viidenteen")+ , (6, "kuudenteen")+ , (7, "seitsemänteen")+ , (8, "kahdeksanteen")+ , (9, "yhdeksänteen")+ , (10, "kymmenenteen")+ , (11, "yhdenteentoista")+ , (12, "kahdenteentoista")+ , (13, "kolmanteentoista")+ , (14, "neljänteentoista")+ , (15, "viidenteentoista")+ , (16, "kuudenteentoista")+ , (17, "seitsemänteentoista")+ , (18, "kahdeksanteentoista")+ , (19, "yhdeksänteentoista")+ , (20, "kahdenteenkymmenenteen")+ , (21, "kahdenteenkymmenenteenensimmäiseen")+ , (100, "sadanteen")+ , (1000, "tuhannenteen")+ ]+ )+ , ( "singular locative adessive"+ , singular $ locativeAdessive defaultInflection+ , [ (0, "nollannella")+ , (1, "ensimmäisellä")+ , (2, "toisella")+ , (3, "kolmannella")+ , (4, "neljännellä")+ , (5, "viidennellä")+ , (6, "kuudennella")+ , (7, "seitsemännellä")+ , (8, "kahdeksannella")+ , (9, "yhdeksännellä")+ , (10, "kymmenennellä")+ , (11, "yhdennellätoista")+ , (12, "kahdennellatoista")+ , (13, "kolmannellatoista")+ , (14, "neljännellätoista")+ , (15, "viidennellätoista")+ , (16, "kuudennellatoista")+ , (17, "seitsemännellätoista")+ , (18, "kahdeksannellatoista")+ , (19, "yhdeksännellätoista")+ , (20, "kahdennellakymmenennellä")+ , (21, "kahdennellakymmenennelläensimmäisellä")+ , (100, "sadannella")+ , (1000, "tuhannennella")+ ]+ )+ , ( "singular locative ablative"+ , singular $ locativeAblative defaultInflection+ , [ (0, "nollannelta")+ , (1, "ensimmäiseltä")+ , (2, "toiselta")+ , (3, "kolmannelta")+ , (4, "neljänneltä")+ , (5, "viidenneltä")+ , (6, "kuudennelta")+ , (7, "seitsemänneltä")+ , (8, "kahdeksannelta")+ , (9, "yhdeksänneltä")+ , (10, "kymmenenneltä")+ , (11, "yhdenneltätoista")+ , (12, "kahdenneltatoista")+ , (13, "kolmanneltatoista")+ , (14, "neljänneltätoista")+ , (15, "viidenneltätoista")+ , (16, "kuudenneltatoista")+ , (17, "seitsemänneltätoista")+ , (18, "kahdeksanneltatoista")+ , (19, "yhdeksänneltätoista")+ , (20, "kahdenneltakymmenenneltä")+ , (21, "kahdenneltakymmenenneltäensimmäiseltä")+ , (100, "sadannelta")+ , (1000, "tuhannennelta")+ ]+ )+ , ( "singular locative allative"+ , singular $ locativeAllative defaultInflection+ , [ (0, "nollannelle")+ , (1, "ensimmäiselle")+ , (2, "toiselle")+ , (3, "kolmannelle")+ , (4, "neljännelle")+ , (5, "viidennelle")+ , (6, "kuudennelle")+ , (7, "seitsemännelle")+ , (8, "kahdeksannelle")+ , (9, "yhdeksännelle")+ , (10, "kymmenennelle")+ , (11, "yhdennelletoista")+ , (12, "kahdennelletoista")+ , (13, "kolmannelletoista")+ , (14, "neljännelletoista")+ , (15, "viidennelletoista")+ , (16, "kuudennelletoista")+ , (17, "seitsemännelletoista")+ , (18, "kahdeksannelletoista")+ , (19, "yhdeksännelletoista")+ , (20, "kahdennellekymmenennelle")+ , (21, "kahdennellekymmenennelleensimmäiselle")+ , (100, "sadannelle")+ , (1000, "tuhannennelle")+ ]+ )+ , ( "singular abessive"+ , singular $ abessive defaultInflection+ , [ (0, "nollannetta")+ , (1, "ensimmäisettä")+ , (2, "toisetta")+ , (3, "kolmannetta")+ , (4, "neljännettä")+ , (5, "viidennettä")+ , (6, "kuudennetta")+ , (7, "seitsemännettä")+ , (8, "kahdeksannetta")+ , (9, "yhdeksännettä")+ , (10, "kymmenennettä")+ , (11, "yhdennettätoista")+ , (12, "kahdennettatoista")+ , (13, "kolmannettatoista")+ , (14, "neljännettätoista")+ , (15, "viidennettätoista")+ , (16, "kuudennettatoista")+ , (17, "seitsemännettätoista")+ , (18, "kahdeksannettatoista")+ , (19, "yhdeksännettätoista")+ , (20, "kahdennettakymmenennettä")+ , (21, "kahdennettakymmenennettäensimmäisettä")+ , (100, "sadannetta")+ , (1000, "tuhannennetta")+ ]+ )+ , ( "singular comitative"+ , singular $ comitative defaultInflection+ , [ (4, "neljänsine") ]+ )+ , ( "singular instructive"+ , singular $ instructive defaultInflection+ , [ (4, "neljänsin") ]+ )+ , ( "plural nominative"+ , plural $ nominative defaultInflection+ , [ (0, "nollannet")+ , (1, "ensimmäiset")+ , (2, "toiset")+ , (3, "kolmannet")+ , (4, "neljännet")+ , (5, "viidennet")+ , (6, "kuudennet")+ , (7, "seitsemännet")+ , (8, "kahdeksannet")+ , (9, "yhdeksännet")+ , (10, "kymmenennet")+ , (11, "yhdennettoista")+ , (12, "kahdennettoista")+ , (13, "kolmannettoista")+ , (14, "neljännettoista")+ , (15, "viidennettoista")+ , (16, "kuudennettoista")+ , (17, "seitsemännettoista")+ , (18, "kahdeksannettoista")+ , (19, "yhdeksännettoista")+ , (20, "kahdennetkymmenennet")+ , (21, "kahdennetkymmenennetensimmäiset")+ , (100, "sadannet")+ , (1000, "tuhannennet")+ ]+ )+ , ( "plural accusative"+ , plural $ accusative defaultInflection+ , [ (0, "nollannet")+ , (1, "ensimmäiset")+ , (2, "toiset")+ , (3, "kolmannet")+ , (4, "neljännet")+ , (5, "viidennet")+ , (6, "kuudennet")+ , (7, "seitsemännet")+ , (8, "kahdeksannet")+ , (9, "yhdeksännet")+ , (10, "kymmenennet")+ , (11, "yhdennettoista")+ , (12, "kahdennettoista")+ , (13, "kolmannettoista")+ , (14, "neljännettoista")+ , (15, "viidennettoista")+ , (16, "kuudennettoista")+ , (17, "seitsemännettoista")+ , (18, "kahdeksannettoista")+ , (19, "yhdeksännettoista")+ , (20, "kahdennetkymmenennet")+ , (21, "kahdennetkymmenennetensimmäiset")+ , (100, "sadannet")+ , (1000, "tuhannennet")+ ]+ )+ , ( "plural genitive"+ , plural $ genitive defaultInflection+ , [ (0, "nollansien")+ , (1, "ensimmäisten")+ , (2, "toisten")+ , (3, "kolmansien")+ , (4, "neljänsien")+ , (5, "viidensien")+ , (6, "kuudensien")+ , (7, "seitsemänsien")+ , (8, "kahdeksansien")+ , (9, "yhdeksänsien")+ , (10, "kymmenensien")+ , (11, "yhdensientoista")+ , (12, "kahdensientoista")+ , (13, "kolmansientoista")+ , (14, "neljänsientoista")+ , (15, "viidensientoista")+ , (16, "kuudensientoista")+ , (17, "seitsemänsientoista")+ , (18, "kahdeksansientoista")+ , (19, "yhdeksänsientoista")+ , (20, "kahdensienkymmenensien")+ , (21, "kahdensienkymmenensienensimmäisten")+ , (100, "sadansien")+ , (1000, "tuhannensien")+ ]+ )+ , ( "plural partitive"+ , plural $ partitive defaultInflection+ , [ (0, "nollansia")+ , (1, "ensimmäisiä")+ , (2, "toisia")+ , (3, "kolmansia")+ , (4, "neljänsiä")+ , (5, "viidensiä")+ , (6, "kuudensia")+ , (7, "seitsemänsiä")+ , (8, "kahdeksansia")+ , (9, "yhdeksänsiä")+ , (10, "kymmenensiä")+ , (11, "yhdensiätoista")+ , (12, "kahdensiatoista")+ , (13, "kolmansiatoista")+ , (14, "neljänsiätoista")+ , (15, "viidensiätoista")+ , (16, "kuudensiatoista")+ , (17, "seitsemänsiätoista")+ , (18, "kahdeksansiatoista")+ , (19, "yhdeksänsiätoista")+ , (20, "kahdensiakymmenensiä")+ , (21, "kahdensiakymmenensiäensimmäisiä")+ , (100, "sadansia")+ , (1000, "tuhannensia")+ ]+ )+ , ( "plural essive"+ , plural $ essive defaultInflection+ , [ (0, "nollansina")+ , (1, "ensimmäisinä")+ , (2, "toisina")+ , (3, "kolmansina")+ , (4, "neljänsinä")+ , (5, "viidensinä")+ , (6, "kuudensina")+ , (7, "seitsemänsinä")+ , (8, "kahdeksansina")+ , (9, "yhdeksänsinä")+ , (10, "kymmenensinä")+ , (11, "yhdensinätoista")+ , (12, "kahdensinatoista")+ , (13, "kolmansinatoista")+ , (14, "neljänsinätoista")+ , (15, "viidensinätoista")+ , (16, "kuudensinatoista")+ , (17, "seitsemänsinätoista")+ , (18, "kahdeksansinatoista")+ , (19, "yhdeksänsinätoista")+ , (20, "kahdensinakymmenensinä")+ , (21, "kahdensinakymmenensinäensimmäisinä")+ , (100, "sadansina")+ , (1000, "tuhannensina")+ ]+ )+ , ( "plural translative"+ , plural $ translative defaultInflection+ , [ (0, "nollansiksi")+ , (1, "ensimmäisiksi")+ , (2, "toisiksi")+ , (3, "kolmansiksi")+ , (4, "neljänsiksi")+ , (5, "viidensiksi")+ , (6, "kuudensiksi")+ , (7, "seitsemänsiksi")+ , (8, "kahdeksansiksi")+ , (9, "yhdeksänsiksi")+ , (10, "kymmenensiksi")+ , (11, "yhdensiksitoista")+ , (12, "kahdensiksitoista")+ , (13, "kolmansiksitoista")+ , (14, "neljänsiksitoista")+ , (15, "viidensiksitoista")+ , (16, "kuudensiksitoista")+ , (17, "seitsemänsiksitoista")+ , (18, "kahdeksansiksitoista")+ , (19, "yhdeksänsissätoista")+ , (20, "kahdensiksikymmenensiksi")+ , (21, "kahdensiksikymmenensiksiensimmäisiksi")+ , (100, "sadansiksi")+ , (1000, "tuhannensiksi")+ ]+ )+ , ( "plural locative inessive"+ , plural $ locativeInessive defaultInflection+ , [ (0, "nollansissa")+ , (1, "ensimmäisissä")+ , (2, "toisissa")+ , (3, "kolmansissa")+ , (4, "neljänsissä")+ , (5, "viidensissä")+ , (6, "kuudensissa")+ , (7, "seitsemänsissä")+ , (8, "kahdeksansissa")+ , (9, "yhdeksänsissä")+ , (10, "kymmenensissä")+ , (11, "yhdensissätoista")+ , (12, "kahdensissatoista")+ , (13, "kolmansissatoista")+ , (14, "neljänsissätoista")+ , (15, "viidensissätoista")+ , (16, "kuudensissatoista")+ , (17, "seitsemänsissätoista")+ , (18, "kahdeksansissatoista")+ , (19, "yhdeksänsissätoista")+ , (20, "kahdensissakymmenensissä")+ , (21, "kahdensissakymmenensissäensimmäisissä")+ , (100, "sadansissa")+ , (1000, "tuhannensissa")+ ]+ )+ , ( "plural locative elative"+ , plural $ locativeElative defaultInflection+ , [ (0, "nollansista")+ , (1, "ensimmäisistä")+ , (2, "toisista")+ , (3, "kolmansista")+ , (4, "neljänsistä")+ , (5, "viidensistä")+ , (6, "kuudensista")+ , (7, "seitsemänsistä")+ , (8, "kahdeksansista")+ , (9, "yhdeksänsistä")+ , (10, "kymmenensistä")+ , (11, "yhdensistätoista")+ , (12, "kahdensistatoista")+ , (13, "kolmansistatoista")+ , (14, "neljänsistätoista")+ , (15, "viidensistätoista")+ , (16, "kuudensistatoista")+ , (17, "seitsemänsistätoista")+ , (18, "kahdeksansistatoista")+ , (19, "yhdeksänsistätoista")+ , (20, "kahdensistakymmenensistä")+ , (21, "kahdensistakymmenensistäensimmäisistä")+ , (100, "sadansista")+ , (1000, "tuhannensista")+ ]+ )+ , ( "plural locative illative"+ , plural $ locativeIllative defaultInflection+ , [ (0, "nollansiin")+ , (1, "ensimmäisiin")+ , (2, "toisiin")+ , (3, "kolmansiin")+ , (4, "neljänsiin")+ , (5, "viidensiin")+ , (6, "kuudensiin")+ , (7, "seitsemänsiin")+ , (8, "kahdeksansiin")+ , (9, "yhdeksänsiin")+ , (10, "kymmenensiin")+ , (11, "yhdensiintoista")+ , (12, "kahdensiintoista")+ , (13, "kolmansiintoista")+ , (14, "neljänsiintoista")+ , (15, "viidensiintoista")+ , (16, "kuudensiintoista")+ , (17, "seitsemänsiintoista")+ , (18, "kahdeksansiintoista")+ , (19, "yhdeksänsiintoista")+ , (20, "kahdensiinkymmenensiin")+ , (21, "kahdensiinkymmenensiinensimmäisiin")+ , (100, "sadansiin")+ , (1000, "tuhannensiin")+ ]+ )+ , ( "plural locative adessive"+ , plural $ locativeAdessive defaultInflection+ , [ (0, "nollansilla")+ , (1, "ensimmäisillä")+ , (2, "toisilla")+ , (3, "kolmansilla")+ , (4, "neljänsillä")+ , (5, "viidensillä")+ , (6, "kuudensilla")+ , (7, "seitsemänsillä")+ , (8, "kahdeksansilla")+ , (9, "yhdeksänsillä")+ , (10, "kymmenensillä")+ , (11, "yhdensillätoista")+ , (12, "kahdensillatoista")+ , (13, "kolmansillatoista")+ , (14, "neljänsillätoista")+ , (15, "viidensillätoista")+ , (16, "kuudensillatoista")+ , (17, "seitsemänsillätoista")+ , (18, "kahdeksansillatoista")+ , (19, "yhdeksänsillätoista")+ , (20, "kahdensillakymmenensillä")+ , (21, "kahdensillakymmenensilläensimmäisillä")+ , (100, "sadansilla")+ , (1000, "tuhannensilla")+ ]+ )+ , ( "plural locative ablative"+ , plural $ locativeAblative defaultInflection+ , [ (0, "nollansilta")+ , (1, "ensimmäisiltä")+ , (2, "toisilta")+ , (3, "kolmansilta")+ , (4, "neljänsiltä")+ , (5, "viidensiltä")+ , (6, "kuudensilta")+ , (7, "seitsemänsiltä")+ , (8, "kahdeksansilta")+ , (9, "yhdeksänsiltä")+ , (10, "kymmenensiltä")+ , (11, "yhdensitlätoista")+ , (12, "kahdensiltatoista")+ , (13, "kolmansiltatoista")+ , (14, "neljänsiltätoista")+ , (15, "viidensiltätoista")+ , (16, "kuudensiltatoista")+ , (17, "seitsemänsiltätoista")+ , (18, "kahdeksansiltatoista")+ , (19, "yhdeksänsiltätoista")+ , (20, "kahdensiltakymmenensiltä")+ , (21, "kahdensiltakymmenensiltäensimmäisiltä")+ , (100, "sadansilta")+ , (1000, "tuhannensilta")+ ]+ )+ , ( "plural locative allative"+ , plural $ locativeAllative defaultInflection+ , [ (0, "nollansille")+ , (1, "ensimmäisille")+ , (2, "toisille")+ , (3, "kolmansille")+ , (4, "neljänsille")+ , (5, "viidensille")+ , (6, "kuudensille")+ , (7, "seitsemänsille")+ , (8, "kahdeksansille")+ , (9, "yhdeksänsille")+ , (10, "kymmenensille")+ , (11, "yhdensiintoista")+ , (12, "kahdensilletoista")+ , (13, "kolmansilletoista")+ , (14, "neljänsilletoista")+ , (15, "viidensilletoista")+ , (16, "kuudensilletoista")+ , (17, "seitsemänsilletoista")+ , (18, "kahdeksansilletoista")+ , (19, "yhdeksänsilletoista")+ , (20, "kahdensillekymmenensille")+ , (21, "kahdensillekymmenensilleensimmäisille")+ , (100, "sadansille")+ , (1000, "tuhannensille")+ ]+ )+ , ( "plural abessive"+ , plural $ abessive defaultInflection+ , [ (0, "nollansitta")+ , (1, "ensimmäisittä")+ , (2, "toisitta")+ , (3, "kolmansitta")+ , (4, "neljänsittä")+ , (5, "viidensittä")+ , (6, "kuudensitta")+ , (7, "seitsemänsittä")+ , (8, "kahdeksansitta")+ , (9, "yhdeksänsittä")+ , (10, "kymmenensittä")+ , (11, "yhdensittätoista")+ , (12, "kahdensittatoista")+ , (13, "kolmansittatoista")+ , (14, "neljänsittätoista")+ , (15, "viidensittätoista")+ , (16, "kuudensittatoista")+ , (17, "seitsemänsittätoista")+ , (18, "kahdeksansittatoista")+ , (19, "yhdeksänsittätoista")+ , (20, "kahdensittakymmenensittä")+ , (21, "kahdensittakymmenensittäensimmäisittä")+ , (100, "sadansitta")+ , (1000, "tuhannensitta")+ ]+ )+ , ( "plural comitative"+ , plural $ comitative defaultInflection+ , [ (0, "nollansine")+ , (1, "ensimmäisine")+ , (2, "toisine")+ , (3, "kolmansine")+ , (4, "neljänsine")+ , (5, "viidensine")+ , (6, "kuudensine")+ , (7, "seitsemänsine")+ , (8, "kahdeksansine")+ , (9, "yhdeksänsine")+ , (10, "kymmenensine")+ , (11, "yhdensinetoista")+ , (12, "kahdensinetoista")+ , (13, "kolmansinetoista")+ , (14, "neljänsinetoista")+ , (15, "viidensinetoista")+ , (16, "kuudensinetoista")+ , (17, "seitsemänsinetoista")+ , (18, "kahdeksansinetoista")+ , (19, "yhdeksänsinetoista")+ , (20, "kahdensinekymmenensine")+ , (21, "kahdensinekymmenensineensimmäisine")+ , (100, "sadansine")+ , (1000, "tuhannensine")+ ]+ )+ , ( "plural instructive"+ , plural $ instructive defaultInflection+ , [ (0, "nollansin")+ , (1, "ensimmäisin")+ , (2, "toisin")+ , (3, "kolmansin")+ , (4, "neljänsin")+ , (5, "viidensin")+ , (6, "kuudensin")+ , (7, "seitsemänsin")+ , (8, "kahdeksansin")+ , (9, "yhdeksänsin")+ , (10, "kymmenensin")+ , (11, "yhdensintoista")+ , (12, "kahdensintoista")+ , (13, "kolmansintoista")+ , (14, "neljänsintoista")+ , (15, "viidensintoista")+ , (16, "kuudensintoista")+ , (17, "seitsemänsintoista")+ , (18, "kahdeksansintoista")+ , (19, "yhdeksänsintoista")+ , (20, "kahdensinkymmenensin")+ , (21, "kahdensinkymmenensinensimmäisin")+ , (100, "sadansin")+ , (1000, "tuhannensin")+ ]+ )+ ]++multiplicatives ∷ (Integral i) ⇒ TestData i+multiplicatives =+ [ ( "default"+ , defaultInflection+ , [ (1, "kerran")+ , (2, "kahdesti")+ , (6, "kuudesti")+ ]+ )+ ]++multipliers ∷ (Integral i) ⇒ TestData i+multipliers =+ [ ( "default"+ , defaultInflection+ , [ (6, "kuusinkertainen")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/FO/TestData.hs view
@@ -0,0 +1,225 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] fo++[@ISO639-2@] fao++[@ISO639-3@] fao++[@Native name@] føroyskt++[@English name@] Faroese+-}+module Text.Numeral.Language.FO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-faroese/en/fao/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "null")+ , (1, "ein")+ , (2, "tveir")+ , (3, "tríggir")+ , (4, "fýra")+ , (5, "fimm")+ , (6, "seks")+ , (7, "sjey")+ , (8, "átta")+ , (9, "níggju")+ , (10, "tíggju")+ , (11, "ellivu")+ , (12, "tólv")+ , (13, "trettan")+ , (14, "fjúrtan")+ , (15, "fimtan")+ , (16, "sekstan")+ , (17, "seytjan")+ , (18, "átjan")+ , (19, "nítjan")+ , (20, "tjúgu")+ , (21, "ein og tjúgu")+ , (22, "tveir og tjúgu")+ , (23, "tríggir og tjúgu")+ , (24, "fýra og tjúgu")+ , (25, "fimm og tjúgu")+ , (26, "seks og tjúgu")+ , (27, "sjey og tjúgu")+ , (28, "átta og tjúgu")+ , (29, "níggju og tjúgu")+ , (30, "tríati")+ , (31, "ein og tríati")+ , (32, "tveir og tríati")+ , (33, "tríggir og tríati")+ , (34, "fýra og tríati")+ , (35, "fimm og tríati")+ , (36, "seks og tríati")+ , (37, "sjey og tríati")+ , (38, "átta og tríati")+ , (39, "níggju og tríati")+ , (40, "fýrati")+ , (41, "ein og fýrati")+ , (42, "tveir og fýrati")+ , (43, "tríggir og fýrati")+ , (44, "fýra og fýrati")+ , (45, "fimm og fýrati")+ , (46, "seks og fýrati")+ , (47, "sjey og fýrati")+ , (48, "átta og fýrati")+ , (49, "níggju og fýrati")+ , (50, "fimmti")+ , (51, "ein og fimmti")+ , (52, "tveir og fimmti")+ , (53, "tríggir og fimmti")+ , (54, "fýra og fimmti")+ , (55, "fimm og fimmti")+ , (56, "seks og fimmti")+ , (57, "sjey og fimmti")+ , (58, "átta og fimmti")+ , (59, "níggju og fimmti")+ , (60, "seksti")+ , (61, "ein og seksti")+ , (62, "tveir og seksti")+ , (63, "tríggir og seksti")+ , (64, "fýra og seksti")+ , (65, "fimm og seksti")+ , (66, "seks og seksti")+ , (67, "sjey og seksti")+ , (68, "átta og seksti")+ , (69, "níggju og seksti")+ , (70, "sjeyti")+ , (71, "ein og sjeyti")+ , (72, "tveir og sjeyti")+ , (73, "tríggir og sjeyti")+ , (74, "fýra og sjeyti")+ , (75, "fimm og sjeyti")+ , (76, "seks og sjeyti")+ , (77, "sjey og sjeyti")+ , (78, "átta og sjeyti")+ , (79, "níggju og sjeyti")+ , (80, "áttati")+ , (81, "ein og áttati")+ , (82, "tveir og áttati")+ , (83, "tríggir og áttati")+ , (84, "fýra og áttati")+ , (85, "fimm og áttati")+ , (86, "seks og áttati")+ , (87, "sjey og áttati")+ , (88, "átta og áttati")+ , (89, "níggju og áttati")+ , (90, "níti")+ , (91, "ein og níti")+ , (92, "tveir og níti")+ , (93, "tríggir og níti")+ , (94, "fýra og níti")+ , (95, "fimm og níti")+ , (96, "seks og níti")+ , (97, "sjey og níti")+ , (98, "átta og níti")+ , (99, "níggju og níti")+ , (100, "hundrað")+ , (101, "hundrað og ein")+ , (102, "hundrað og tveir")+ , (103, "hundrað og tríggir")+ , (104, "hundrað og fýra")+ , (105, "hundrað og fimm")+ , (106, "hundrað og seks")+ , (107, "hundrað og sjey")+ , (108, "hundrað og átta")+ , (109, "hundrað og níggju")+ , (110, "hundrað og tíggju")+ , (123, "hundrað og tríggir og tjúgu")+ , (200, "tvey hundrað")+ , (300, "trý hundrað")+ , (321, "trý hundrað og ein og tjúgu")+ , (400, "fýra hundrað")+ , (500, "fimm hundrað")+ , (600, "seks hundrað")+ , (700, "sjey hundrað")+ , (800, "átta hundrað")+ , (900, "níggju hundrað")+ , (909, "níggju hundrað og níggju")+ , (990, "níggju hundrað og níti")+ , (999, "níggju hundrað og níggju og níti")+ , (1000, "túsund")+ , (1001, "eitt túsund og ein")+ , (1008, "eitt túsund og átta")+ , (1234, "eitt túsund tvey hundrað og fýra og tríati")+ , (2000, "tvey túsund")+ , (3000, "trý túsund")+ , (4000, "fýra túsund")+ , (4321, "fýra túsund trý hundrað og ein og tjúgu")+ , (5000, "fimm túsund")+ , (6000, "seks túsund")+ , (7000, "sjey túsund")+ , (8000, "átta túsund")+ , (9000, "níggju túsund")+ , (10000, "tíggju túsund")+ , (12345, "tólv túsund trý hundrað og fimm og fýrati")+ , (20000, "tjúgu túsund")+ , (30000, "tríati túsund")+ , (40000, "fýrati túsund")+ , (50000, "fimmti túsund")+ , (54321, "fýra og fimmti túsund trý hundrað og ein og tjúgu")+ , (60000, "seksti túsund")+ , (70000, "sjeyti túsund")+ , (80000, "áttati túsund")+ , (90000, "níti túsund")+ , (100000, "hundrað túsund")+ , (123456, "hundrað og tríggir og tjúgu túsund og fýra hundrað og seks og fimmti")+ , (200000, "tvey hundrað túsund")+ , (300000, "trý hundrað túsund")+ , (400000, "fýra hundrað túsund")+ , (500000, "fimm hundrað túsund")+ , (600000, "seks hundrað túsund")+ , (654321, "seks hundrað og fýra og fimmti túsund trý hundrað og ein og tjúgu")+ , (700000, "sjey hundrað túsund")+ , (800000, "átta hundrað túsund")+ , (900000, "níggju hundrað túsund")+ , (1000000, "ein millión")+ , (1000001, "ein millión og ein")+ , (1234567, "ein millión tvey hundrað og fýra og tríati túsund og fimm hundrað og sjey og seksti")+ , (2000000, "tvær milliónir")+ , (3000000, "tríggjar milliónir")+ , (4000000, "fýra milliónir")+ , (5000000, "fimm milliónir")+ , (6000000, "seks milliónir")+ , (7000000, "sjey milliónir")+ , (7654321, "sjey milliónir og seks hundrað og fýra og fimmti túsund trý hundrað og ein og tjúgu")+ , (8000000, "átta milliónir")+ , (9000000, "níggju milliónir")+ , (1000000000, "ein milliard")+ , (1000000001, "ein milliard og ein")+ , (2000000000, "tveir milliardir")+ , (3000000000, "tríggir milliardir")+ , (4000000000, "fýra milliardir")+ , (5000000000, "fimm milliardir")+ , (6000000000, "seks milliardir")+ , (7000000000, "sjey milliardir")+ , (8000000000, "átta milliardir")+ , (9000000000, "níggju milliardir")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/FR/TestData.hs view
@@ -0,0 +1,371 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] fr++[@ISO639-2B@] fre++[@ISO639-3@] fra++[@Native name@] Français++[@English name@] French+-}++module Text.Numeral.Language.FR.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.sf.airnet.ne.jp/~ts/language/number/french.html+ http://www.french-linguistics.co.uk/tutorials/numbers/+ http://www.parisbypod.com/2007/10/23/french-ordinal-numbers/+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "masculine"+ , masculine defaultInflection+ , [ (0, "zéro")+ , (1, "un")+ , (2, "deux")+ , (3, "trois")+ , (4, "quatre")+ , (5, "cinq")+ , (6, "six")+ , (7, "sept")+ , (8, "huit")+ , (9, "neuf")+ , (10, "dix")+ , (11, "onze")+ , (12, "douze")+ , (13, "treize")+ , (14, "quatorze")+ , (15, "quinze")+ , (16, "seize")+ , (17, "dix-sept")+ , (18, "dix-huit")+ , (19, "dix-neuf")+ , (20, "vingt")+ , (21, "vingt et un")+ , (22, "vingt-deux")+ , (23, "vingt-trois")+ , (24, "vingt-quatre")+ , (25, "vingt-cinq")+ , (26, "vingt-six")+ , (27, "vingt-sept")+ , (28, "vingt-huit")+ , (29, "vingt-neuf")+ , (30, "trente")+ , (31, "trente et un")+ , (32, "trente-deux")+ , (33, "trente-trois")+ , (34, "trente-quatre")+ , (35, "trente-cinq")+ , (36, "trente-six")+ , (37, "trente-sept")+ , (38, "trente-huit")+ , (39, "trente-neuf")+ , (40, "quarante")+ , (41, "quarante et un")+ , (42, "quarante-deux")+ , (43, "quarante-trois")+ , (44, "quarante-quatre")+ , (45, "quarante-cinq")+ , (46, "quarante-six")+ , (47, "quarante-sept")+ , (48, "quarante-huit")+ , (49, "quarante-neuf")+ , (50, "cinquante")+ , (51, "cinquante et un")+ , (52, "cinquante-deux")+ , (53, "cinquante-trois")+ , (54, "cinquante-quatre")+ , (55, "cinquante-cinq")+ , (56, "cinquante-six")+ , (57, "cinquante-sept")+ , (58, "cinquante-huit")+ , (59, "cinquante-neuf")+ , (60, "soixante")+ , (61, "soixante et un")+ , (62, "soixante-deux")+ , (63, "soixante-trois")+ , (64, "soixante-quatre")+ , (65, "soixante-cinq")+ , (66, "soixante-six")+ , (67, "soixante-sept")+ , (68, "soixante-huit")+ , (69, "soixante-neuf")+ , (70, "soixante-dix")+ , (71, "soixante et onze")+ , (72, "soixante-douze")+ , (73, "soixante-treize")+ , (74, "soixante-quatorze")+ , (75, "soixante-quinze")+ , (76, "soixante-seize")+ , (77, "soixante-dix-sept")+ , (78, "soixante-dix-huit")+ , (79, "soixante-dix-neuf")+ , (80, "quatre-vingts")+ , (81, "quatre-vingt-un")+ , (82, "quatre-vingt-deux")+ , (83, "quatre-vingt-trois")+ , (84, "quatre-vingt-quatre")+ , (85, "quatre-vingt-cinq")+ , (86, "quatre-vingt-six")+ , (87, "quatre-vingt-sept")+ , (88, "quatre-vingt-huit")+ , (89, "quatre-vingt-neuf")+ , (90, "quatre-vingt-dix")+ , (91, "quatre-vingt-onze")+ , (92, "quatre-vingt-douze")+ , (93, "quatre-vingt-treize")+ , (94, "quatre-vingt-quatorze")+ , (95, "quatre-vingt-quinze")+ , (96, "quatre-vingt-seize")+ , (97, "quatre-vingt-dix-sept")+ , (98, "quatre-vingt-dix-huit")+ , (99, "quatre-vingt-dix-neuf")+ , (100, "cent")+ , (101, "cent et un")+ , (102, "cent deux")+ , (103, "cent trois")+ , (104, "cent quatre")+ , (105, "cent cinq")+ , (111, "cent et onze")+ , (122, "cent vingt-deux")+ , (123, "cent vingt-trois")+ , (144, "cent quarante-quatre")+ , (196, "cent quatre-vingt-seize")+ , (199, "cent quatre-vingt-dix-neuf")+ , (200, "deux cents")+ , (300, "trois cents")+ , (400, "quatre cents")+ , (500, "cinq cents")+ , (600, "six cents")+ , (700, "sept cents")+ , (800, "huit cents")+ , (900, "neuf cents")+ , (1000, "mille")+ , (1999, "mille neuf cent quatre-vingt-dix-neuf")+ , (2000, "deux mille")+ , (2999, "deux mille neuf cent quatre-vingt-dix-neuf")+ , (dec 4, "dix mille")+ , (dec 5, "cent mille")+ , (dec 6, "un million")+ , (dec 9, "un milliard")+ , (dec 12, "un billion")+ , (dec 15, "un billiard")+ , (dec 18, "un trillion")+ , (dec 21, "un trilliard")+ , (dec 24, "un quadrillion")+ , (dec 27, "un quadrilliard")+ , (dec 30, "un quintillion")+ , (dec 33, "un quintilliard")+ , (dec 36, "un sextillion")+ , (dec 39, "un sextilliard")+ , (dec 42, "un septillion")+ , (dec 45, "un septilliard")+ , (dec 48, "un octillion")+ , (dec 51, "un octilliard")+ , (dec 54, "un nonillion")+ , (dec 57, "un nonilliard")+ , (dec 60, "un décillion")+ , (dec 63, "un décilliard")+ , (dec 66, "un unodécillion")+ , (dec 69, "un unodécilliard")+ , (dec 72, "un duodécillion")+ , (dec 75, "un duodécilliard")+ , (dec 78, "un trédécillion")+ , (dec 81, "un trédécilliard")+ , (dec 84, "un quattuordécillion")+ , (dec 87, "un quattuordécilliard")+ , (dec 90, "un quindécillion")+ , (dec 93, "un quindécilliard")+ , (dec 96, "un sexdécillion")+ , (dec 99, "un sexdécilliard")+ , (dec 102, "un septendécillion")+ , (dec 105, "un septendécilliard")+ , (dec 108, "un octodécillion")+ , (dec 111, "un octodécilliard")+ , (dec 114, "un novemdécillion")+ , (dec 117, "un novemdécilliard")+ , (dec 120, "un vigintillion")+ , (dec 123, "un vigintilliard")+ , (dec 150, "un quinquavigintillion")+ , (dec 153, "un quinquavigintilliard")+ , (dec 180, "un trigintillion")+ , (dec 183, "un trigintilliard")+ , (dec 210, "un quinquatrigintillion")+ , (dec 213, "un quinquatrigintilliard")+ , (dec 240, "un quadragintillion")+ , (dec 243, "un quadragintilliard")+ , (dec 270, "un quinquaquadragintillion")+ , (dec 273, "un quinquaquadragintilliard")+ , (dec 300, "un quinquagintillion")+ , (dec 303, "un quinquagintilliard")+ , (dec 306, "un unoquinquagintillion")+ , (dec 309, "un unoquinquagintilliard")+ , (dec 360, "un sexagintillion")+ , (dec 363, "un sexagintilliard")+ , (dec 420, "un septuagintillion")+ , (dec 423, "un septuagintilliard")+ , (dec 480, "un octogintillion")+ , (dec 483, "un octogintilliard")+ , (dec 540, "un nonagintillion")+ , (dec 543, "un nonagintilliard")+ , (dec 600, "un centillion")+ , (dec 603, "un centilliard")+ ]+ )+ , ( "feminine"+ , feminine defaultInflection+ , [ (1, "une")+ ]+ )+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals =+ [ ( "masculine"+ , masculine defaultInflection+ , [ (0, "zéroth")+ , (1, "premier")+ , (2, "deuxième")+ , (3, "troisième")+ , (4, "quatrième")+ , (5, "cinquième")+ , (6, "sixième")+ , (7, "septième")+ , (8, "huitième")+ , (9, "neuvième")+ , (10, "dixième")+ , (11, "onzième")+ , (12, "douzième")+ , (13, "treizième")+ , (14, "quatorzième")+ , (15, "quinzième")+ , (16, "seizième")+ , (17, "dix-septième")+ , (18, "dix-huitième")+ , (19, "dix-neuvième")+ , (20, "vingtième")+ , (21, "vingt et unième")+ , (22, "vingt-deuxième")+ , (23, "vingt-troisième")+ , (24, "vingt-quatrième")+ , (25, "vingt-cinquième")+ , (26, "vingt-sixième")+ , (27, "vingt-septième")+ , (28, "vingt-huitième")+ , (29, "vingt-neuvième")+ , (30, "trentième")+ , (31, "trente et unième")+ , (32, "trente-deuxième")+ , (33, "trente-troisième")+ , (34, "trente-quatrième")+ , (35, "trente-cinquième")+ , (36, "trente-sixième")+ , (37, "trente-septième")+ , (38, "trente-huitième")+ , (39, "trente-neuvième")+ , (40, "quarantième")+ , (41, "quarante et unième")+ , (42, "quarante-deuxième")+ , (43, "quarante-troisième")+ , (44, "quarante-quatrième")+ , (45, "quarante-cinquième")+ , (46, "quarante-sixième")+ , (47, "quarante-septième")+ , (48, "quarante-huitième")+ , (49, "quarante-neuvième")+ , (50, "cinquantième")+ , (51, "cinquante et unième")+ , (52, "cinquante-deuxième")+ , (53, "cinquante-troisième")+ , (54, "cinquante-quatrième")+ , (55, "cinquante-cinquième")+ , (56, "cinquante-sixième")+ , (57, "cinquante-septième")+ , (58, "cinquante-huitième")+ , (59, "cinquante-neuvième")+ , (60, "soixantième")+ , (61, "soixante et unième")+ , (62, "soixante-deuxième")+ , (63, "soixante-troisième")+ , (64, "soixante-quatrième")+ , (65, "soixante-cinquième")+ , (66, "soixante-sixième")+ , (67, "soixante-septième")+ , (68, "soixante-huitième")+ , (69, "soixante-neuvième")+ , (70, "soixante-dixième")+ , (71, "soixante et onzième")+ , (72, "soixante-douzième")+ , (73, "soixante-treizième")+ , (74, "soixante-quatorzième")+ , (75, "soixante-quinzième")+ , (76, "soixante-seizième")+ , (77, "soixante-dix-septième")+ , (78, "soixante-dix-huitième")+ , (79, "soixante-dix-neuvième")+ , (80, "quatre-vingtième")+ , (81, "quatre-vingt-unième")+ , (82, "quatre-vingt-deuxième")+ , (83, "quatre-vingt-troisième")+ , (84, "quatre-vingt-quatrième")+ , (85, "quatre-vingt-cinquième")+ , (86, "quatre-vingt-sixième")+ , (87, "quatre-vingt-septième")+ , (88, "quatre-vingt-huitième")+ , (89, "quatre-vingt-neuvième")+ , (90, "quatre-vingt-dixième")+ , (91, "quatre-vingt-onzième")+ , (92, "quatre-vingt-douzième")+ , (93, "quatre-vingt-treizième")+ , (94, "quatre-vingt-quatorzième")+ , (95, "quatre-vingt-quinzième")+ , (96, "quatre-vingt-seizième")+ , (97, "quatre-vingt-dix-septième")+ , (98, "quatre-vingt-dix-huitième")+ , (99, "quatre-vingt-dix-neuvième")+ , (100, "centième")+ , (200, "deux centième")+ , (300, "trois centième")+ , (400, "quatre centième")+ , (500, "cinq centième")+ , (600, "six centième")+ , (700, "sept centième")+ , (800, "huit centième")+ , (900, "neuf centième")+ , (1000, "millième")+ , (dec 6, "millionième")+ , (dec 9, "milliardième")+ ]+ )+ , ( "feminine"+ , feminine defaultInflection+ , [ (1, "première")+ , (41, "quarante et uneième")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/FUR/TestData.hs view
@@ -0,0 +1,199 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] fur++[@ISO639-3@] fur++[@Native name@] Furlan++[@English name@] Friulan+-}++module Text.Numeral.Language.FUR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://www.languagesandnumbers.com/how-to-count-in-friulian/en/fur/+cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "masculine"+ , masculine defaultInflection+ , [ (0, "zero")+ , (1, "un")+ , (2, "doi")+ , (3, "trê")+ , (4, "cuatri")+ , (5, "cinc")+ , (6, "sîs")+ , (7, "siet")+ , (8, "vot")+ , (9, "nûf")+ , (10, "dîs")+ , (11, "undis")+ , (12, "dodis")+ , (13, "tredis")+ , (14, "cutuardis")+ , (15, "cuindis")+ , (16, "sedis")+ , (17, "disesiet")+ , (18, "disevot")+ , (19, "disenûf")+ , (20, "vincj")+ , (21, "vincjeun")+ , (22, "vincjedoi")+ , (23, "vincjetrê")+ , (24, "vincjecuatri")+ , (25, "vincjecinc")+ , (26, "vincjesîs")+ , (27, "vincjesiet")+ , (28, "vincjevot")+ , (29, "vincjenûf")+ , (30, "trente")+ , (31, "trenteun")+ , (32, "trentedoi")+ , (33, "trentetrê")+ , (34, "trentecuatri")+ , (35, "trentecinc")+ , (36, "trentesîs")+ , (37, "trentesiet")+ , (38, "trentevot")+ , (39, "trentenûf")+ , (40, "cuarante")+ , (41, "cuaranteun")+ , (42, "cuarantedoi")+ , (43, "cuarantetrê")+ , (44, "cuarantecuatri")+ , (45, "cuarantecinc")+ , (46, "cuarantesîs")+ , (47, "cuarantesiet")+ , (48, "cuarantevot")+ , (49, "cuarantenûf")+ , (50, "cincuante")+ , (51, "cincuanteun")+ , (52, "cincuantedoi")+ , (53, "cincuantetrê")+ , (54, "cincuantecuatri")+ , (55, "cincuantecinc")+ , (56, "cincuantesîs")+ , (57, "cincuantesiet")+ , (58, "cincuantevot")+ , (59, "cincuantenûf")+ , (60, "sessante")+ , (61, "sessanteun")+ , (62, "sessantedoi")+ , (63, "sessantetrê")+ , (64, "sessantecuatri")+ , (65, "sessantecinc")+ , (66, "sessantesîs")+ , (67, "sessantesiet")+ , (68, "sessantevot")+ , (69, "sessantenûf")+ , (70, "setante")+ , (71, "setanteun")+ , (72, "setantedoi")+ , (73, "setantetrê")+ , (74, "setantecuatri")+ , (75, "setantecinc")+ , (76, "setantesîs")+ , (77, "setantesiet")+ , (78, "setantevot")+ , (79, "setantenûf")+ , (80, "otante")+ , (81, "otanteun")+ , (82, "otantedoi")+ , (83, "otantetrê")+ , (84, "otantecuatri")+ , (85, "otantecinc")+ , (86, "otantesîs")+ , (87, "otantesiet")+ , (88, "otantevot")+ , (89, "otantenûf")+ , (90, "novante")+ , (91, "novanteun")+ , (92, "novantedoi")+ , (93, "novantetrê")+ , (94, "novantecuatri")+ , (95, "novantecinc")+ , (96, "novantesîs")+ , (97, "novantesiet")+ , (98, "novantevot")+ , (99, "novantenûf")+ , (100, "cent")+ , (109, "cent e nûf")+ , (110, "cent e dîs")+ , (123, "cent e vincjetrê")+ , (200, "dusinte")+ , (230, "dusinte e trente")+ , (234, "dusinte e trentecuatri")+ , (300, "tresinte")+ , (400, "cuatricent")+ , (500, "cinccent")+ , (600, "sîscent")+ , (700, "sietcent")+ , (800, "votcent")+ , (900, "nûfcent")+ , (999, "nûfcent e novantenûf")+ , (1000, "mil")+ , (1001, "mil e un")+ , (1005, "mil e cinc")+ , (1050, "mil e cincuante")+ , (1100, "mil e cent")+ , (1110, "mil cent e dîs")+ , (1500, "mil e cinccent")+ , (1550, "mil cinccent e cincuante")+ , (2000, "doi mil")+ , (2005, "doi mil e cinc")+ , (2050, "doi mil e cincuante")+ , (2500, "doi mil e cinccent")+ , (2550, "doi mil cinccent e cincuante")+ , (3000, "trê mil")+ , (4000, "cuatri mil")+ , (10000, "dîs mil")+ , (12000, "dodis mil")+ , (12005, "dodis mil e cinc")+ , (12345, "dodis mil tresinte e cuarantecinc")+ , (100000, "cent mil")+ , (110000, "cent e dîs mil")+ , (110010, "cent e dîs mil e dîs")+ , (123456, "cent e vincjetrê mil cuatricent e cincuantesîs")+ , (dec 6, "un milion")+ , (2 ⋅ dec 6, "doi milions")+ , (3 ⋅ dec 6, "trê milions")+ , (10 ⋅ dec 6, "dîs milions")+ , (dec 9, "un miliart")+ , (2 ⋅ dec 9, "doi miliarts")+ , (3 ⋅ dec 9, "trê miliarts")+ ]+ )+ , ( "feminine"+ , feminine defaultInflection+ , [ (1, "une")+ , (2, "dôs")+ , (2 ⋅ dec 6, "dôs milions")+ , (2 ⋅ dec 9, "dôs miliarts")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/GCF_MTQ/TestData.hs view
@@ -0,0 +1,205 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] gcf++[@Native name@] -++[@English name@] Antillean Creole of Martinique+-}+module Text.Numeral.Language.GCF_MTQ.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-antillean-creole-of-martinique/en/gcf-mtq/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "zéwo")+ , (1, "yonn")+ , (2, "dé")+ , (3, "twa")+ , (4, "kat")+ , (5, "senk")+ , (6, "sis")+ , (7, "sèt")+ , (8, "uit")+ , (9, "nèf")+ , (10, "dis")+ , (11, "wonz")+ , (12, "douz")+ , (13, "trèz")+ , (14, "katòz")+ , (15, "tjenz")+ , (16, "sèz")+ , (17, "disèt")+ , (18, "dizuit")+ , (19, "diznèf")+ , (20, "ven")+ , (21, "ventéen")+ , (22, "venndé")+ , (23, "venntwa")+ , (24, "vennkat")+ , (25, "vennsenk")+ , (26, "vennsis")+ , (27, "vennsèt")+ , (28, "vennuit")+ , (29, "vennèf")+ , (30, "trant")+ , (31, "trantéen")+ , (32, "tranndé")+ , (33, "tranntwa")+ , (34, "trannkat")+ , (35, "trannsenk")+ , (36, "trannsis")+ , (37, "trannsèt")+ , (38, "trantuit")+ , (39, "trantnèf")+ , (40, "karant")+ , (41, "karantéen")+ , (42, "karanndé")+ , (43, "karanntwa")+ , (44, "karannkat")+ , (45, "karannsenk")+ , (46, "karannsis")+ , (47, "karannsèt")+ , (48, "karantuit")+ , (49, "karantnèf")+ , (50, "senkant")+ , (51, "senkantéen")+ , (52, "senkanndé")+ , (53, "senkanntwa")+ , (54, "senkannkat")+ , (55, "senkannsenk")+ , (56, "senkannsis")+ , (57, "senkannsèt")+ , (58, "senkantuit")+ , (59, "senkantnèf")+ , (60, "swasant")+ , (61, "swasantéen")+ , (62, "swasanndé")+ , (63, "swasanntwa")+ , (64, "swasannkat")+ , (65, "swasannsenk")+ , (66, "swasannsis")+ , (67, "swasannsèt")+ , (68, "swasantuit")+ , (69, "swasantnèf")+ , (70, "swasanndis")+ , (71, "swasannwonz")+ , (72, "swasanndouz")+ , (73, "swasanntrèz")+ , (74, "swasannkatòz")+ , (75, "swasanntjenz")+ , (76, "swasannsèz")+ , (77, "swasanndisèt")+ , (78, "swasanndizuit")+ , (79, "swasanndiznèf")+ , (80, "katrèven")+ , (81, "katrèventéen")+ , (82, "katrèvenndé")+ , (83, "katrèvenntwa")+ , (84, "katrèvennkat")+ , (85, "katrèvennsenk")+ , (86, "katrèvennsis")+ , (87, "katrèvennsèt")+ , (88, "katrèvennuit")+ , (89, "katrèvennèf")+ , (90, "katrèvendis")+ , (91, "katrèvenwonz")+ , (92, "katrèvendouz")+ , (93, "katrèventrèz")+ , (94, "katrèvenkatòz")+ , (95, "katrèventjenz")+ , (96, "katrèvensèz")+ , (97, "katrèvendisèt")+ , (98, "katrèvendizuit")+ , (99, "katrèvendiznèf")+ , (100, "san")+ , (101, "san-en")+ , (102, "sandé")+ , (103, "santwa")+ , (104, "sankat")+ , (105, "sansenk")+ , (106, "sansis")+ , (107, "sansèt")+ , (108, "sanuit")+ , (109, "sannèf")+ , (110, "sandis")+ , (123, "sanvenntwa")+ , (200, "désan")+ , (300, "twasan")+ , (321, "twasanventéen")+ , (400, "katsan")+ , (500, "sensan")+ , (600, "sisan")+ , (700, "sètsan")+ , (800, "uisan")+ , (900, "nèfsan")+ , (909, "nèfsannèf")+ , (990, "nèfsankatrèvendis")+ , (999, "nèfsankatrèvendiznèf")+ , (1000, "mil")+ , (1001, "mil yonn")+ , (1008, "mil uit")+ , (1234, "mil désantrannkat")+ , (2000, "dé mil")+ , (3000, "twa mil")+ , (4000, "kat mil")+ , (4321, "kat mil twasanventéen")+ , (5000, "senk mil")+ , (6000, "sis mil")+ , (7000, "sèt mil")+ , (8000, "uit mil")+ , (9000, "nèf mil")+ , (10000, "dimil")+ , (12345, "douz mil twasankarannsenk")+ , (20000, "ven mil")+ , (30000, "trant mil")+ , (40000, "karant mil")+ , (50000, "senkant mil")+ , (54321, "senkannkat mil twasanventéen")+ , (60000, "swasant mil")+ , (70000, "swasanndimil")+ , (80000, "katrèven mil")+ , (90000, "katrèvendimil")+ , (100000, "san mil")+ , (123456, "sanvenntwa mil katsansenkannsis")+ , (200000, "désan mil")+ , (300000, "twasan mil")+ , (400000, "katsan mil")+ , (500000, "sensan mil")+ , (600000, "sisan mil")+ , (654321, "sisansenkannkat mil twasanventéen")+ , (700000, "sètsan mil")+ , (800000, "uisan mil")+ , (900000, "nèfsan mil")+ , (1000000, "an milyon")+ , (1000000000, "an milya")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/GIL/TestData.hs view
@@ -0,0 +1,225 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] gil++[@ISO639-3@] gil++[@Native name@] Taetae ni Kiribati++[@English name@] Gilbertese+-}+module Text.Numeral.Language.GIL.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-gilbertese/en/gil/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "akea")+ , (1, "teuana")+ , (2, "uoua")+ , (3, "tenua")+ , (4, "aua")+ , (5, "nimaua")+ , (6, "onoua")+ , (7, "itua")+ , (8, "wanua")+ , (9, "ruaiwa")+ , (10, "tebwina")+ , (11, "tebwi ma teuana")+ , (12, "tebwi ma uoua")+ , (13, "tebwi ma tenua")+ , (14, "tebwi ma aua")+ , (15, "tebwi ma nimaua")+ , (16, "tebwi ma onoua")+ , (17, "tebwi ma itua")+ , (18, "tebwi ma wanua")+ , (19, "tebwi ma ruaiwa")+ , (20, "uabwi")+ , (21, "uabwi ma teuana")+ , (22, "uabwi ma uoua")+ , (23, "uabwi ma tenua")+ , (24, "uabwi ma aua")+ , (25, "uabwi ma nimaua")+ , (26, "uabwi ma onoua")+ , (27, "uabwi ma itua")+ , (28, "uabwi ma wanua")+ , (29, "uabwi ma ruaiwa")+ , (30, "tenibwi")+ , (31, "tenibwi ma teuana")+ , (32, "tenibwi ma uoua")+ , (33, "tenibwi ma tenua")+ , (34, "tenibwi ma aua")+ , (35, "tenibwi ma nimaua")+ , (36, "tenibwi ma onoua")+ , (37, "tenibwi ma itua")+ , (38, "tenibwi ma wanua")+ , (39, "tenibwi ma ruaiwa")+ , (40, "abwi")+ , (41, "abwi ma teuana")+ , (42, "abwi ma uoua")+ , (43, "abwi ma tenua")+ , (44, "abwi ma aua")+ , (45, "abwi ma nimaua")+ , (46, "abwi ma onoua")+ , (47, "abwi ma itua")+ , (48, "abwi ma wanua")+ , (49, "abwi ma ruaiwa")+ , (50, "nimabwi")+ , (51, "nimabwi ma teuana")+ , (52, "nimabwi ma uoua")+ , (53, "nimabwi ma tenua")+ , (54, "nimabwi ma aua")+ , (55, "nimabwi ma nimaua")+ , (56, "nimabwi ma onoua")+ , (57, "nimabwi ma itua")+ , (58, "nimabwi ma wanua")+ , (59, "nimabwi ma ruaiwa")+ , (60, "onobwi")+ , (61, "onobwi ma teuana")+ , (62, "onobwi ma uoua")+ , (63, "onobwi ma tenua")+ , (64, "onobwi ma aua")+ , (65, "onobwi ma nimaua")+ , (66, "onobwi ma onoua")+ , (67, "onobwi ma itua")+ , (68, "onobwi ma wanua")+ , (69, "onobwi ma ruaiwa")+ , (70, "itibwi")+ , (71, "itibwi ma teuana")+ , (72, "itibwi ma uoua")+ , (73, "itibwi ma tenua")+ , (74, "itibwi ma aua")+ , (75, "itibwi ma nimaua")+ , (76, "itibwi ma onoua")+ , (77, "itibwi ma itua")+ , (78, "itibwi ma wanua")+ , (79, "itibwi ma ruaiwa")+ , (80, "wanibwi")+ , (81, "wanibwi ma teuana")+ , (82, "wanibwi ma uoua")+ , (83, "wanibwi ma tenua")+ , (84, "wanibwi ma aua")+ , (85, "wanibwi ma nimaua")+ , (86, "wanibwi ma onoua")+ , (87, "wanibwi ma itua")+ , (88, "wanibwi ma wanua")+ , (89, "wanibwi ma ruaiwa")+ , (90, "ruabwi")+ , (91, "ruabwi ma teuana")+ , (92, "ruabwi ma uoua")+ , (93, "ruabwi ma tenua")+ , (94, "ruabwi ma aua")+ , (95, "ruabwi ma nimaua")+ , (96, "ruabwi ma onoua")+ , (97, "ruabwi ma itua")+ , (98, "ruabwi ma wanua")+ , (99, "ruabwi ma ruaiwa")+ , (100, "tebubua")+ , (101, "tebubua ao teuana")+ , (102, "tebubua ao uoua")+ , (103, "tebubua ao tenua")+ , (104, "tebubua ao aua")+ , (105, "tebubua ao nimaua")+ , (106, "tebubua ao onoua")+ , (107, "tebubua ao itua")+ , (108, "tebubua ao wanua")+ , (109, "tebubua ao ruaiwa")+ , (110, "tebubua tebwina")+ , (123, "tebubua uabwi ma tenua")+ , (200, "uabubua")+ , (300, "tenibubua")+ , (321, "tenibubua uabwi ma teuana")+ , (400, "abubua")+ , (500, "nimabubua")+ , (600, "onobubua")+ , (700, "itibubua")+ , (800, "wanibubua")+ , (900, "ruabubua")+ , (909, "ruabubua ao ruaiwa")+ , (990, "ruabubua ruabwi")+ , (999, "ruabubua ruabwi ma ruaiwa")+ , (1000, "tengaa")+ , (1001, "tengaa ao teuana")+ , (1008, "tengaa ao wanua")+ , (1234, "tengaa uabubua tenibwi ma aua")+ , (2000, "uangaa")+ , (3000, "teningaa")+ , (4000, "angaa")+ , (4321, "angaa tenibubua uabwi ma teuana")+ , (5000, "nimangaa")+ , (6000, "onongaa")+ , (7000, "itingaa")+ , (8000, "waniengaa")+ , (9000, "ruangaa")+ , (10000, "tebwina tengaa")+ , (12345, "tebwi ma uoua tengaa tenibubua abwi ma nimaua")+ , (20000, "uabwi tengaa")+ , (30000, "tenibwi tengaa")+ , (40000, "abwi tengaa")+ , (50000, "nimabwi tengaa")+ , (54321, "nimabwi ma aua tengaa tenibubua uabwi ma teuana")+ , (60000, "onobwi tengaa")+ , (70000, "itibwi tengaa")+ , (80000, "wanibwi tengaa")+ , (90000, "ruabwi tengaa")+ , (100000, "tebubua tengaa")+ , (123456, "tebubua uabwi ma tenua tengaa abubua nimabwi ma onoua")+ , (200000, "uabubua tengaa")+ , (300000, "tenibubua tengaa")+ , (400000, "abubua tengaa")+ , (500000, "nimabubua tengaa")+ , (600000, "onobubua tengaa")+ , (654321, "onobubua nimabwi ma aua tengaa tenibubua uabwi ma teuana")+ , (700000, "itibubua tengaa")+ , (800000, "wanibubua tengaa")+ , (900000, "ruabubua tengaa")+ , (1000000, "te mirion")+ , (1000001, "te mirion, teuana")+ , (1234567, "te mirion, uabubua tenibwi ma aua tengaa nimabubua onobwi ma itua")+ , (2000000, "uoua te mirion")+ , (3000000, "tenua te mirion")+ , (4000000, "aua te mirion")+ , (5000000, "nimaua te mirion")+ , (6000000, "onoua te mirion")+ , (7000000, "itua te mirion")+ , (7654321, "itua te mirion, onobubua nimabwi ma aua tengaa tenibubua uabwi ma teuana")+ , (8000000, "wanua te mirion")+ , (9000000, "ruaiwa te mirion")+ , (1000000000, "te birian")+ , (1000000001, "te birian, teuana")+ , (2000000000, "uoua te birian")+ , (3000000000, "tenua te birian")+ , (4000000000, "aua te birian")+ , (5000000000, "nimaua te birian")+ , (6000000000, "onoua te birian")+ , (7000000000, "itua te birian")+ , (8000000000, "wanua te birian")+ , (9000000000, "ruaiwa te birian")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/GL/TestData.hs view
@@ -0,0 +1,235 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] gl++[@ISO639-2@] glg++[@ISO639-3@] glg++[@Native name@] Galego++[@English name@] Galician+-}+module Text.Numeral.Language.GL.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-galician/en/glg/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "cero")+ , (1, "un")+ , (2, "dous")+ , (3, "tres")+ , (4, "catro")+ , (5, "cinco")+ , (6, "seis")+ , (7, "sete")+ , (8, "oito")+ , (9, "nove")+ , (10, "dez")+ , (11, "once")+ , (12, "doce")+ , (13, "trece")+ , (14, "catorce")+ , (15, "quince")+ , (16, "dezaseis")+ , (17, "dezasete")+ , (18, "dezoito")+ , (19, "dezanove")+ , (20, "vinte")+ , (21, "vinte e un")+ , (22, "vinte e dous")+ , (23, "vinte e tres")+ , (24, "vinte e catro")+ , (25, "vinte e cinco")+ , (26, "vinte e seis")+ , (27, "vinte e sete")+ , (28, "vinte e oito")+ , (29, "vinte e nove")+ , (30, "trinta")+ , (31, "trinta e un")+ , (32, "trinta e dous")+ , (33, "trinta e tres")+ , (34, "trinta e catro")+ , (35, "trinta e cinco")+ , (36, "trinta e seis")+ , (37, "trinta e sete")+ , (38, "trinta e oito")+ , (39, "trinta e nove")+ , (40, "corenta")+ , (41, "corenta e un")+ , (42, "corenta e dous")+ , (43, "corenta e tres")+ , (44, "corenta e catro")+ , (45, "corenta e cinco")+ , (46, "corenta e seis")+ , (47, "corenta e sete")+ , (48, "corenta e oito")+ , (49, "corenta e nove")+ , (50, "cincuenta")+ , (51, "cincuenta e un")+ , (52, "cincuenta e dous")+ , (53, "cincuenta e tres")+ , (54, "cincuenta e catro")+ , (55, "cincuenta e cinco")+ , (56, "cincuenta e seis")+ , (57, "cincuenta e sete")+ , (58, "cincuenta e oito")+ , (59, "cincuenta e nove")+ , (60, "sesenta")+ , (61, "sesenta e un")+ , (62, "sesenta e dous")+ , (63, "sesenta e tres")+ , (64, "sesenta e catro")+ , (65, "sesenta e cinco")+ , (66, "sesenta e seis")+ , (67, "sesenta e sete")+ , (68, "sesenta e oito")+ , (69, "sesenta e nove")+ , (70, "setenta")+ , (71, "setenta e un")+ , (72, "setenta e dous")+ , (73, "setenta e tres")+ , (74, "setenta e catro")+ , (75, "setenta e cinco")+ , (76, "setenta e seis")+ , (77, "setenta e sete")+ , (78, "setenta e oito")+ , (79, "setenta e nove")+ , (80, "oitenta")+ , (81, "oitenta e un")+ , (82, "oitenta e dous")+ , (83, "oitenta e tres")+ , (84, "oitenta e catro")+ , (85, "oitenta e cinco")+ , (86, "oitenta e seis")+ , (87, "oitenta e sete")+ , (88, "oitenta e oito")+ , (89, "oitenta e nove")+ , (90, "noventa")+ , (91, "noventa e un")+ , (92, "noventa e dous")+ , (93, "noventa e tres")+ , (94, "noventa e catro")+ , (95, "noventa e cinco")+ , (96, "noventa e seis")+ , (97, "noventa e sete")+ , (98, "noventa e oito")+ , (99, "noventa e nove")+ , (100, "cen")+ , (101, "cento un")+ , (102, "cento dous")+ , (103, "cento tres")+ , (104, "cento catro")+ , (105, "cento cinco")+ , (106, "cento seis")+ , (107, "cento sete")+ , (108, "cento oito")+ , (109, "cento nove")+ , (110, "cento dez")+ , (123, "cento vinte e tres")+ , (200, "douscentos")+ , (300, "trescentos")+ , (321, "trescentos e vinte e un")+ , (400, "catrocentos")+ , (500, "cincocentos")+ , (600, "seiscentos")+ , (700, "setecentos")+ , (800, "oitocentos")+ , (900, "novecentos")+ , (909, "novecentos e nove")+ , (990, "novecentos e noventa")+ , (999, "novecentos e noventa e nove")+ , (1000, "mil")+ , (1001, "mil e un")+ , (1008, "mil e oito")+ , (1234, "mil douscentos e trinta e catro")+ , (2000, "dous mil")+ , (3000, "tres mil")+ , (4000, "catro mil")+ , (4321, "catro mil trescentos e vinte e un")+ , (5000, "cinco mil")+ , (6000, "seis mil")+ , (7000, "sete mil")+ , (8000, "oito mil")+ , (9000, "nove mil")+ , (10000, "dez mil")+ , (12345, "doce mil trescentos e corenta e cinco")+ , (20000, "vinte mil")+ , (30000, "trinta mil")+ , (40000, "corenta mil")+ , (50000, "cincuenta mil")+ , (54321, "cincuenta e catro mil trescentos e vinte e un")+ , (60000, "sesenta mil")+ , (70000, "setenta mil")+ , (80000, "oitenta mil")+ , (90000, "noventa mil")+ , (100000, "cen mil")+ , (123456, "cento vinte e tres mil catrocentos e cincuenta e seis")+ , (200000, "douscentos mil")+ , (300000, "trescentos mil")+ , (400000, "catrocentos mil")+ , (500000, "cincocentos mil")+ , (600000, "seiscentos mil")+ , (654321, "seiscentos e cincuenta e catro mil trescentos e vinte e un")+ , (700000, "setecentos mil")+ , (800000, "oitocentos mil")+ , (900000, "novecentos mil")+ , (1000000, "un milhom")+ , (1000001, "un milhom e un")+ , (1234567, "un milhom douscentos e trinta e catro mil cincocentos e sesenta e sete")+ , (2000000, "dous milhom")+ , (3000000, "tres milhom")+ , (4000000, "catro milhom")+ , (5000000, "cinco milhom")+ , (6000000, "seis milhom")+ , (7000000, "sete milhom")+ , (7654321, "sete milhom seiscentos e cincuenta e catro mil trescentos e vinte e un")+ , (8000000, "oito milhom")+ , (9000000, "nove milhom")+ , (1000000000, "un bilhom")+ , (1000000001, "un bilhom e un")+ , (2000000000, "dous bilhom")+ , (3000000000, "tres bilhom")+ , (4000000000, "catro bilhom")+ , (5000000000, "cinco bilhom")+ , (6000000000, "seis bilhom")+ , (7000000000, "sete bilhom")+ , (8000000000, "oito bilhom")+ , (9000000000, "nove bilhom")+ , (1000000000000, "un trilhom")+ , (1000000000001, "un trilhom e un")+ , (2000000000000, "dous trilhom")+ , (3000000000000, "tres trilhom")+ , (4000000000000, "catro trilhom")+ , (5000000000000, "cinco trilhom")+ , (6000000000000, "seis trilhom")+ , (7000000000000, "sete trilhom")+ , (8000000000000, "oito trilhom")+ , (9000000000000, "nove trilhom")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/GSW/TestData.hs view
@@ -0,0 +1,148 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] gse++[@ISO639-3@] gse++[@Native name@] Schwyzerdütsch++[@English name@] Swiss German+-}++module Text.Numeral.Language.GSW.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-swiss-german/en/gsw-che/+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "eis")+ , (2, "zwöi")+ , (3, "drü")+ , (4, "vier")+ , (5, "füf")+ , (6, "sächs")+ , (7, "sibe")+ , (8, "acht")+ , (9, "nüün")+ , (10, "zäh")+ , (11, "euf")+ , (12, "zwüof")+ , (13, "dryzäh")+ , (14, "vierzäh")+ , (15, "füfzäh")+ , (16, "sächszäh")+ , (17, "sibezäh")+ , (18, "achtzäh")+ , (19, "nüünzäh")+ , (20, "zwänzg")+ , (21, "einezwänzg")+ , (22, "zwöiezwänzg")+ , (23, "drüezwänzg")+ , (24, "vierezwänzg")+ , (25, "füfezwänzg")+ , (26, "sächsezwänzg")+ , (27, "sibenezwänzg")+ , (28, "achtezwänzg")+ , (29, "nünezwänzg")+ , (30, "dryssg")+ -- , (31, "")+ -- , (32, "")+ -- , (33, "")+ -- , (34, "")+ , (35, "füfedryssg")+ -- , (36, "")+ -- , (37, "")+ -- , (38, "")+ -- , (39, "")+ , (40, "vierzg")+ -- , (41, "")+ -- , (42, "")+ -- , (43, "")+ -- , (44, "")+ -- , (45, "")+ -- , (46, "")+ -- , (47, "")+ -- , (48, "")+ -- , (49, "")+ , (50, "füfzg")+ , (51, "einefüfzg")+ -- , (52, "")+ -- , (53, "")+ -- , (54, "")+ -- , (55, "")+ -- , (56, "")+ -- , (57, "")+ -- , (58, "")+ -- , (59, "")+ , (60, "sëchzg")+ -- , (61, "")+ -- , (62, "")+ -- , (63, "")+ -- , (64, "")+ -- , (65, "")+ -- , (66, "")+ -- , (67, "")+ -- , (68, "")+ -- , (69, "")+ , (70, "sibezg")+ -- , (71, "")+ , (72, "zwöiesibezg")+ -- , (73, "")+ -- , (74, "")+ -- , (75, "")+ -- , (76, "")+ -- , (77, "")+ -- , (78, "")+ -- , (79, "")+ , (80, "achzg")+ -- , (81, "")+ -- , (82, "")+ -- , (83, "")+ -- , (84, "")+ -- , (85, "")+ -- , (86, "")+ -- , (87, "")+ -- , (88, "")+ -- , (89, "")+ , (90, "nüünzg")+ -- , (91, "")+ -- , (92, "")+ -- , (93, "")+ -- , (94, "")+ -- , (95, "")+ -- , (96, "")+ , (97, "sibenenüünzg")+ -- , (98, "")+ -- , (99, "")+ , (100, "hundert")+ , (101, "hundertundäis")+ , (102, "hundertzwöi")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/GV/TestData.hs view
@@ -0,0 +1,158 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] gv++[@ISO639-2@] glv++[@ISO639-3@] glv++[@Native name@] Gaelg++[@English name@] Manx+-}++module Text.Numeral.Language.GV.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.sf.airnet.ne.jp/~ts/language/number/manx.html+ http://www.gaelg.iofm.net/LESSONS/P/P19.html+ http://www.gaelg.iofm.net/LESSONS/mona/Lessons.pdf+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "nane")+ , (2, "jees")+ , (3, "tree")+ , (4, "kiare")+ , (5, "queig")+ , (6, "shey")+ , (7, "shiaght")+ , (8, "hoght")+ , (9, "nuy")+ , (10, "jeih")+ , (11, "nane-jeig")+ , (12, "daa-yeig")+ , (13, "tree-jeig")+ , (14, "kiare-jeig")+ , (15, "queig-jeig")+ , (16, "shey-jeig")+ , (17, "shiaght-jeig")+ , (18, "hoght-jeig")+ , (19, "nuy-jeig")+ , (20, "feed")+ , (21, "nane as feed")+ , (22, "jees as feed")+ , (23, "tree as feed")+ , (24, "kiare as feed")+ , (25, "queig as feed")+ , (26, "shey as feed")+ , (27, "shiaght as feed")+ , (28, "hoght as feed")+ , (29, "nuy as feed")+ , (30, "jeih as feed")+ , (31, "nane-jeig as feed")+ , (32, "daa-yeig as feed")+ , (33, "tree-jeig as feed")+ , (34, "kiare-jeig as feed")+ , (35, "queig-jeig as feed")+ , (36, "shey-jeig as feed")+ , (37, "shiaght-jeig as feed")+ , (38, "hoght-jeig as feed")+ , (39, "nuy-jeig as feed")+ , (40, "daeed")+ , (41, "nane as daeed")+ , (42, "jees as daeed")+ , (43, "tree as daeed")+ , (44, "kiare as daeed")+ , (45, "queig as daeed")+ , (46, "shey as daeed")+ , (47, "shiaght as daeed")+ , (48, "hoght as daeed")+ , (49, "nuy as daeed")+ , (50, "jeih as daeed")+ , (51, "nane-jeig as daeed")+ , (52, "daa-yeig as daeed")+ , (53, "tree-jeig as daeed")+ , (54, "kiare-jeig as daeed")+ , (55, "queig-jeig as daeed")+ , (56, "shey-jeig as daeed")+ , (57, "shiaght-jeig as daeed")+ , (58, "hoght-jeig as daeed")+ , (59, "nuy-jeig as daeed")+ , (60, "tree feed")+ , (61, "tree feed as nane")+ , (62, "tree feed as jees")+ , (63, "tree feed as tree")+ , (64, "tree feed as kiare")+ , (65, "tree feed as queig")+ , (66, "tree feed as shey")+ , (67, "tree feed as shiaght")+ , (68, "tree feed as hoght")+ , (69, "tree feed as nuy")+ , (70, "tree feed as jeih")+ , (71, "tree feed as nane-jeig")+ , (72, "tree feed as daa-yeig")+ , (73, "tree feed as tree-jeig")+ , (74, "tree feed as kiare-jeig")+ , (75, "tree feed as queig-jeig")+ , (76, "tree feed as shey-jeig")+ , (77, "tree feed as shiaght-jeig")+ , (78, "tree feed as hoght-jeig")+ , (79, "tree feed as nuy-jeig")+ , (80, "kiare feed")+ , (81, "kiare feed as nane")+ , (82, "kiare feed as jees")+ , (83, "kiare feed as tree")+ , (84, "kiare feed as kiare")+ , (85, "kiare feed as queig")+ , (86, "kiare feed as shey")+ , (87, "kiare feed as shiaght")+ , (88, "kiare feed as hoght")+ , (89, "kiare feed as nuy")+ , (90, "kiare feed as jeih")+ , (91, "kiare feed as nane-jeig")+ , (92, "kiare feed as daa-yeig")+ , (93, "kiare feed as tree-jeig")+ , (94, "kiare feed as kiare-jeig")+ , (95, "kiare feed as queig-jeig")+ , (96, "kiare feed as shey-jeig")+ , (97, "kiare feed as shiaght-jeig")+ , (98, "kiare feed as hoght-jeig")+ , (99, "kiare feed as nuy-jeig")+ , (100, "keead")+ , (200, "daa cheead")+ , (300, "tree cheead")+ , (400, "kiare cheead")+ , (500, "queig cheead")+ , (600, "shey cheead")+ , (700, "shiaght cheead")+ , (800, "hoght cheead")+ , (900, "nuy cheead")+ , (1000, "thousane")+ -- , (dec 6, "jeih cheead thousane")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/HAI/TestData.hs view
@@ -0,0 +1,228 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] hai++[@ISO639-3@] hai++[@Native name@] X̲aat Kíl++[@English name@] Haida+-}+module Text.Numeral.Language.HAI.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-haida/en/hai/+ http://www.haidalanguage.org/phrases/numbers.html++'guu' means 'less'+'waak' means 'add on'+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "sgwáansang")+ , (2, "sdáng")+ , (3, "hlgúnahl")+ , (4, "stánsang")+ , (5, "tléihl")+ , (6, "tla’únhl")+ , (7, "jagwaa")+ , (8, "sdáansaangaa")+ , (9, "tláahlsgwáansangguu") -- ten minus one+ , (10, "tláahl")+ , (11, "tláahl wáak sgwáansang")+ , (12, "tláahl wáak sdáng")+ , (13, "tláahl wáak hlgúnahl")+ , (14, "tláahl wáak stánsang")+ , (15, "tláahl wáak tléihl")+ , (16, "tláahl wáak tla’únhl")+ , (17, "tláahl wáak jagwaa")+ , (18, "tláahl wáak sdáansaangaa")+ , (19, "tláahl wáak tláahlsgwáansangguu")+ , (20, "lagwa uu sgwáansang")+ , (21, "lagwa uu sgwáansang wáak sgwáansang")+ , (22, "lagwa uu sgwáansang wáak sdáng")+ , (23, "lagwa uu sgwáansang wáak hlgúnahl")+ , (24, "lagwa uu sgwáansang wáak stánsang")+ , (25, "lagwa uu sgwáansang wáak tléihl")+ , (26, "lagwa uu sgwáansang wáak tla’únhl")+ , (27, "lagwa uu sgwáansang wáak jagwaa")+ , (28, "lagwa uu sgwáansang wáak sdáansaangaa")+ , (29, "lagwa uu sgwáansang wáak tláahlsgwáansangguu")+ , (30, "tlaalee hlgúnahl")+ , (31, "tlaalee hlgúnahl wáak sgwáansang")+ , (32, "tlaalee hlgúnahl wáak sdáng")+ , (33, "tlaalee hlgúnahl wáak hlgúnahl")+ , (34, "tlaalee hlgúnahl wáak stánsang")+ , (35, "tlaalee hlgúnahl wáak tléihl")+ , (36, "tlaalee hlgúnahl wáak tla’únhl")+ , (37, "tlaalee hlgúnahl wáak jagwaa")+ , (38, "tlaalee hlgúnahl wáak sdáansaangaa")+ , (39, "tlaalee hlgúnahl wáak tláahlsgwáansangguu")+ , (40, "lagwa uu sdáng")+ , (41, "lagwa uu sdáng wáak sgwáansang")+ , (42, "lagwa uu sdáng wáak sdáng")+ , (43, "lagwa uu sdáng wáak hlgúnahl")+ , (44, "lagwa uu sdáng wáak stánsang")+ , (45, "lagwa uu sdáng wáak tléihl")+ , (46, "lagwa uu sdáng wáak tla’únhl")+ , (47, "lagwa uu sdáng wáak jagwaa")+ , (48, "lagwa uu sdáng wáak sdáansaangaa")+ , (49, "lagwa uu sdáng wáak tláahlsgwáansangguu")+ , (50, "tlaalee tléihl")+ , (51, "tlaalee tléihl wáak sgwáansang")+ , (52, "tlaalee tléihl wáak sdáng")+ , (53, "tlaalee tléihl wáak hlgúnahl")+ , (54, "tlaalee tléihl wáak stánsang")+ , (55, "tlaalee tléihl wáak tléihl")+ , (56, "tlaalee tléihl wáak tla’únhl")+ , (57, "tlaalee tléihl wáak jagwaa")+ , (58, "tlaalee tléihl wáak sdáansaangaa")+ , (59, "tlaalee tléihl wáak tláahlsgwáansangguu")+ , (60, "lagwa uu hlgúnahl")+ , (61, "lagwa uu hlgúnahl wáak sgwáansang")+ , (62, "lagwa uu hlgúnahl wáak sdáng")+ , (63, "lagwa uu hlgúnahl wáak hlgúnahl")+ , (64, "lagwa uu hlgúnahl wáak stánsang")+ , (65, "lagwa uu hlgúnahl wáak tléihl")+ , (66, "lagwa uu hlgúnahl wáak tla’únhl")+ , (67, "lagwa uu hlgúnahl wáak jagwaa")+ , (68, "lagwa uu hlgúnahl wáak sdáansaangaa")+ , (69, "lagwa uu hlgúnahl wáak tláahlsgwáansangguu")+ , (70, "tlaalee jagwaa")+ , (71, "tlaalee jagwaa wáak sgwáansang")+ , (72, "tlaalee jagwaa wáak sdáng")+ , (73, "tlaalee jagwaa wáak hlgúnahl")+ , (74, "tlaalee jagwaa wáak stánsang")+ , (75, "tlaalee jagwaa wáak tléihl")+ , (76, "tlaalee jagwaa wáak tla’únhl")+ , (77, "tlaalee jagwaa wáak jagwaa")+ , (78, "tlaalee jagwaa wáak sdáansaangaa")+ , (79, "tlaalee jagwaa wáak tláahlsgwáansangguu")+ , (80, "lagwa uu sdáansaangaa")+ , (81, "lagwa uu sdáansaangaa wáak sgwáansang")+ , (82, "lagwa uu sdáansaangaa wáak sdáng")+ , (83, "lagwa uu sdáansaangaa wáak hlgúnahl")+ , (84, "lagwa uu sdáansaangaa wáak stánsang")+ , (85, "lagwa uu sdáansaangaa wáak tléihl")+ , (86, "lagwa uu sdáansaangaa wáak tla’únhl")+ , (87, "lagwa uu sdáansaangaa wáak jagwaa")+ , (88, "lagwa uu sdáansaangaa wáak sdáansaangaa")+ , (89, "lagwa uu sdáansaangaa wáak tláahlsgwáansangguu")+ , (90, "tlaalee tláahlsgwáansangguu")+ , (91, "tlaalee tláahlsgwáansangguu wáak sgwáansang")+ , (92, "tlaalee tláahlsgwáansangguu wáak sdáng")+ , (93, "tlaalee tláahlsgwáansangguu wáak hlgúnahl")+ , (94, "tlaalee tláahlsgwáansangguu wáak stánsang")+ , (95, "tlaalee tláahlsgwáansangguu wáak tléihl")+ , (96, "tlaalee tláahlsgwáansangguu wáak tla’únhl")+ , (97, "tlaalee tláahlsgwáansangguu wáak jagwaa")+ , (98, "tlaalee tláahlsgwáansangguu wáak sdáansaangaa")+ , (99, "tlaalee tláahlsgwáansangguu wáak tláahlsgwáansangguu")+ , (100, "lagwa uu tléihl")+ , (101, "lagwa uu tléihl sgwáansang")+ , (102, "lagwa uu tléihl sdáng")+ , (103, "lagwa uu tléihl hlgúnahl")+ , (104, "lagwa uu tléihl stánsang")+ , (105, "lagwa uu tléihl tléihl")+ , (106, "lagwa uu tléihl tla’únhl")+ , (107, "lagwa uu tléihl jagwaa")+ , (108, "lagwa uu tléihl sdáansaangaa")+ , (109, "lagwa uu tléihl tláahlsgwáansangguu")+ , (110, "lagwa uu tléihl tláahl")+ , (123, "lagwa uu tléihl lagwa uu sgwáansang wáak hlgúnahl")+ , (200, "lagwa uu tláahl")+ , (300, "lagwa uu tláahl wáak lagwa uu tléihl")+ , (321, "lagwa uu tláahl wáak lagwa uu tléihl lagwa uu sgwáansang wáak sgwáansang")+ , (400, "lagwa uu tlaalee sdáng")+ , (500, "lagwa uu tlaalee sdáng wáak lagwa uu tléihl")+ , (600, "lagwa uu tlaalee tléihl")+ , (700, "lagwa uu tlaalee wáak lagwa uu tléihl")+ , (800, "lagwa uu tlaalee sdáansaangaa")+ , (900, "lagwa uu tlaalee sdáansaangaa wáak lagwa uu tléihl")+ , (909, "lagwa uu tlaalee sdáansaangaa wáak lagwa uu tléihl tláahlsgwáansangguu")+ , (990, "lagwa uu tlaalee sdáansaangaa wáak lagwa uu tléihl tlaalee tláahlsgwáansangguu")+ , (999, "lagwa uu tlaalee sdáansaangaa wáak lagwa uu tléihl tlaalee tláahlsgwáansangguu wáak tláahlsgwáansangguu")+ , (1000, "lagwa uu tlaalee tléihl")+ , (1001, "lagwa uu tlaalee tléihl sgwáansang")+ , (1008, "lagwa uu tlaalee tléihl sdáansaangaa")+ , (1234, "lagwa uu tlaalee tléihl lagwa uu tláahl tlaalee hlgúnahl wáak stánsang")+ , (2000, "lagwa uu tlaalee tléihl wáak sdáng")+ , (3000, "lagwa uu tlaalee tléihl wáak hlgúnahl")+ , (4000, "lagwa uu tlaalee tléihl wáak stánsang")+ , (4321, "lagwa uu tlaalee tléihl wáak stánsang lagwa uu tláahl wáak lagwa uu tléihl lagwa uu sgwáansang wáak sgwáansang")+ , (5000, "lagwa uu tlaalee tléihl wáak tléihl")+ , (6000, "lagwa uu tlaalee tléihl wáak tla’únhl")+ , (7000, "lagwa uu tlaalee tléihl wáak jagwaa")+ , (8000, "lagwa uu tlaalee tléihl wáak sdáansaangaa")+ , (9000, "lagwa uu tlaalee tléihl wáak tláahlsgwáansangguu")+ , (10000, "lagwa uu tlaalee tléihl wáak tláahl")+ , (12345, "tláahl wáak lagwa uu tlaalee tléihl wáak sdáng lagwa uu tláahl wáak lagwa uu tléihl lagwa uu sdáng wáak tléihl")+ , (20000, "lagwa uu lagwa uu tlaalee tléihl")+ , (30000, "tlaalee lagwa uu tlaalee tléihl wáak hlgúnahl")+ , (40000, "lagwa uu lagwa uu tlaalee tléihl wáak sdáng")+ , (50000, "tlaalee lagwa uu tlaalee tléihl wáak tléihl")+ , (54321, "tlaalee tléihl wáak lagwa uu tlaalee tléihl wáak stánsang lagwa uu tláahl wáak lagwa uu tléihl lagwa uu sgwáansang wáak sgwáansang")+ , (60000, "lagwa uu lagwa uu tlaalee tléihl wáak hlgúnahl")+ , (70000, "tlaalee lagwa uu tlaalee tléihl wáak jagwaa")+ , (80000, "lagwa uu lagwa uu tlaalee tléihl wáak sdáansaangaa")+ , (90000, "tlaalee lagwa uu tlaalee tléihl wáak tláahlsgwáansangguu")+ , (100000, "lagwa uu taalee kwan tláahl wáak lagwa uu tléihl")+ , (123456, "lagwa uu tléihl lagwa uu sgwáansang wáak lagwa uu tlaalee tléihl wáak hlgúnahl lagwa uu tlaalee sdáng tlaalee tléihl wáak tla’únhl")+ , (200000, "lagwa uu lagwa uu tlaalee tléihl wáak tláahl")+ , (300000, "lagwa uu tláahl wáak lagwa uu taalee kwan tláahl wáak lagwa uu tléihl")+ , (400000, "lagwa uu tlaalee lagwa uu tlaalee tléihl wáak sdáng")+ , (500000, "lagwa uu tlaalee sdáng wáak lagwa uu taalee kwan tláahl wáak lagwa uu tléihl")+ , (600000, "lagwa uu tlaalee lagwa uu tlaalee tléihl wáak tléihl")+ , (654321, "lagwa uu tlaalee tléihl tlaalee tléihl wáak lagwa uu tlaalee tléihl wáak stánsang lagwa uu tláahl wáak lagwa uu tléihl lagwa uu sgwáansang wáak sgwáansang")+ , (700000, "lagwa uu tlaalee wáak lagwa uu taalee kwan tláahl wáak lagwa uu tléihl")+ , (800000, "lagwa uu tlaalee lagwa uu tlaalee tléihl wáak sdáansaangaa")+ , (900000, "lagwa uu tlaalee sdáansaangaa wáak lagwa uu taalee kwan tláahl wáak lagwa uu tléihl")+ , (1000000, "lagwa uu tlaalee kwan")+ , (1000001, "lagwa uu tlaalee kwan sgwáansang")+ , (1234567, "lagwa uu tlaalee kwan lagwa uu tláahl tlaalee hlgúnahl wáak lagwa uu tlaalee tléihl wáak stánsang lagwa uu tlaalee sdáng wáak lagwa uu tléihl lagwa uu hlgúnahl wáak jagwaa")+ , (2000000, "sdáng lagwa uu tlaalee kwan")+ , (3000000, "hlgúnahl lagwa uu tlaalee kwan")+ , (4000000, "stánsang lagwa uu tlaalee kwan")+ , (5000000, "tléihl lagwa uu tlaalee kwan")+ , (6000000, "tla’únhl lagwa uu tlaalee kwan")+ , (7000000, "jagwaa lagwa uu tlaalee kwan")+ , (7654321, "jagwaa lagwa uu tlaalee kwan lagwa uu tlaalee tléihl tlaalee tléihl wáak lagwa uu tlaalee tléihl wáak stánsang lagwa uu tláahl wáak lagwa uu tléihl lagwa uu sgwáansang wáak sgwáansang")+ , (8000000, "sdáansaangaa lagwa uu tlaalee kwan")+ , (9000000, "tláahlsgwáansangguu lagwa uu tlaalee kwan")+ , (1000000000, "lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl")+ , (1000000001, "lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl sgwáansang")+ , (2000000000, "sdáng lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl")+ , (3000000000, "hlgúnahl lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl")+ , (4000000000, "stánsang lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl")+ , (5000000000, "tléihl lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl")+ , (6000000000, "tla’únhl lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl")+ , (7000000000, "jagwaa lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl")+ , (8000000000, "sdáansaangaa lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl")+ , (9000000000, "tláahlsgwáansangguu lagwa uu tlaalee kwan wáak lagwa uu tlaalee tléihl")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/HE/TestData.hs view
@@ -0,0 +1,315 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] he++[@ISO639-2@] heb++[@ISO639-3@] heb++[@Native name@] עִבְרִית++[@English name@] Modern Hebrew+-}++module Text.Numeral.Language.HE.TestData+ ( cardinals+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ E-mail by Yitzchak Gale.+ http://www.hebrew4christians.com/Grammar/Unit_Eight/Cardinal_Numbers/cardinal_numbers.html+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "feminine"+ , feminine defaultInflection+ , [ (0, "אפס")+ , (1, "אחת")+ , (2, "שתיים") -- Connecting form: "שתי"+ , (3, "שלוש")+ , (4, "ארבע")+ , (5, "חמש")+ , (6, "שש")+ , (7, "שבע")+ , (8, "שמונה")+ , (9, "תשע")+ , (10, "עשר")+ , (11, "אחת עשרה")+ , (12, "שתים עשרה")+ , (13, "שלוש עשרה")+ , (14, "ארבע עשרה")+ , (15, "חמש עשרה")+ , (16, "שש עשרה")+ , (17, "שבע עשרה")+ , (18, "שמונה עשרה")+ , (19, "תשע עשרה")+ , (20, "עשרים")+ , (21, "עשרים ואחת")+ , (22, "עשרים ושתיים")+ , (23, "עשרים ושלוש")+ , (24, "עשרים וארבע")+ , (25, "עשרים וחמש")+ , (26, "עשרים ושש")+ , (27, "עשרים ושבע")+ , (28, "עשרים ושמונה")+ , (29, "עשרים ותשע")+ , (30, "שלושים")+ , (31, "שלושים ואחת")+ , (32, "שלושים ושתיים")+ , (33, "שלושים ושלוש")+ , (34, "שלושים וארבע")+ , (35, "שלושים וחמש")+ , (36, "שלושים ושש")+ , (37, "שלושים ושבע")+ , (38, "שלושים ושמונה")+ , (39, "שלושים ותשע")+ , (40, "ארבעים")+ , (41, "ארבעים ואחת")+ , (42, "ארבעים ושתיים")+ , (43, "ארבעים ושלוש")+ , (44, "ארבעים וארבע")+ , (45, "ארבעים וחמש")+ , (46, "ארבעים ושש")+ , (47, "ארבעים ושבע")+ , (48, "ארבעים ושמונה")+ , (49, "ארבעים ותשע")+ , (50, "חמישים")+ , (51, "חמישים ואחת")+ , (52, "חמישים ושתיים")+ , (53, "חמישים ושלוש")+ , (54, "חמישים וארבע")+ , (55, "חמישים וחמש")+ , (56, "חמישים ושש")+ , (57, "חמישים ושבע")+ , (58, "חמישים ושמונה")+ , (59, "חמישים ותשע")+ , (60, "ששים")+ , (61, "ששים ואחת")+ , (62, "ששים ושתיים")+ , (63, "ששים ושלוש")+ , (64, "ששים וארבע")+ , (65, "ששים וחמש")+ , (66, "ששים ושש")+ , (67, "ששים ושבע")+ , (68, "ששים ושמונה")+ , (69, "ששים ותשע")+ , (70, "שבעים")+ , (71, "שבעים ואחת")+ , (72, "שבעים ושתיים")+ , (73, "שבעים ושלוש")+ , (74, "שבעים וארבע")+ , (75, "שבעים וחמש")+ , (76, "שבעים ושש")+ , (77, "שבעים ושבע")+ , (78, "שבעים ושמונה")+ , (79, "שבעים ותשע")+ , (80, "שמונים")+ , (81, "שמונים ואחת")+ , (82, "שמונים ושתיים")+ , (83, "שמונים ושלוש")+ , (84, "שמונים וארבע")+ , (85, "שמונים וחמש")+ , (86, "שמונים ושש")+ , (87, "שמונים ושבע")+ , (88, "שמונים ושמונה")+ , (89, "שמונים ותשע")+ , (90, "תשעים")+ , (91, "תשעים ואחת")+ , (92, "תשעים ושתיים")+ , (93, "תשעים ושלוש")+ , (94, "תשעים וארבע")+ , (95, "תשעים וחמש")+ , (96, "תשעים ושש")+ , (97, "תשעים ושבע")+ , (98, "תשעים ושמונה")+ , (99, "תשעים ותשע")+ , (100, "מאה")+ , (101, "מאה ואחת")+ , (110, "מאה ועשר")+ , (111, "מאה אחת עשרה")+ , (123, "מאה עשרים ושלוש")+ , (144, "מאה ארבעים וארבע")+ , (199, "מאה תשעים ותשע")+ , (200, "מאתיים")+ , (299, "מאתיים תשעים ותשע")+ , (300, "שלוש מאות")+ , (400, "ארבע מאות")+ , (900, "תשע מאות")+ , (1000, "אלף")+ , (1999, "אלף תשע מאות תשעים ותשע")+ , (2000, "אלפיים")+ , (2999, "אלפיים תשע מאות תשעים ותשע")+ , (3000, "שלושת אלפים")+ , (3110, "שלושת אלפים מאה ועשר")+ , (4000, "ארבעת אלפים")+ , (5000, "חמשת אלפים")+ , (6000, "ששת אלפים")+ , (7000, "שבעת אלפים")+ , (8000, "שמונת אלפים")+ , (9000, "תשעת אלפים")+ , (10000, "עשרת אלפים")+ , (11000, "אחד עשר אלף")+ , (12000, "שנים עשר אלף")+ , (dec 5, "מאה אלף")+ , (dec 6, "מיליון")+ , (dec 9, "מיליארד")+ ]+ )+ , ( "masculine"+ , masculine defaultInflection+ , [ (0, "אפס")+ , (1, "אחד")+ , (2, "שניים") -- Connecting form: "שני"+ , (3, "שלושה")+ , (4, "ארבעה")+ , (5, "חמישה")+ , (6, "שישה")+ , (7, "שבעה")+ , (8, "שמונה")+ , (9, "תשעה")+ , (10, "עשרה")+ , (11, "אחד עשר")+ , (12, "שנים עשר")+ , (13, "שלושה עשר")+ , (14, "ארבעה עשר")+ , (15, "חמישה עשר")+ , (16, "שישה עשר")+ , (17, "שבעה עשר")+ , (18, "שמונה עשר")+ , (19, "תשעה עשר")+ , (20, "עשרים")+ , (21, "עשרים ואחד")+ , (22, "עשרים ושניים")+ , (23, "עשרים ושלושה")+ , (24, "עשרים וארבעה")+ , (25, "עשרים וחמישה")+ , (26, "עשרים ושישה")+ , (27, "עשרים ושבעה")+ , (28, "עשרים ושמונה")+ , (29, "עשרים ותשעה")+ , (30, "שלושים")+ , (31, "שלושים ואחד")+ , (32, "שלושים ושניים")+ , (33, "שלושים ושלושה")+ , (34, "שלושים וארבעה")+ , (35, "שלושים וחמישה")+ , (36, "שלושים ושישה")+ , (37, "שלושים ושבעה")+ , (38, "שלושים ושמונה")+ , (39, "שלושים ותשעה")+ , (40, "ארבעים")+ , (41, "ארבעים ואחד")+ , (42, "ארבעים ושניים")+ , (43, "ארבעים ושלושה")+ , (44, "ארבעים וארבעה")+ , (45, "ארבעים וחמישה")+ , (46, "ארבעים ושישה")+ , (47, "ארבעים ושבעה")+ , (48, "ארבעים ושמונה")+ , (49, "ארבעים ותשעה")+ , (50, "חמישים")+ , (51, "חמישים ואחד")+ , (52, "חמישים ושניים")+ , (53, "חמישים ושלושה")+ , (54, "חמישים וארבעה")+ , (55, "חמישים וחמישה")+ , (56, "חמישים ושישה")+ , (57, "חמישים ושבעה")+ , (58, "חמישים ושמונה")+ , (59, "חמישים ותשעה")+ , (60, "ששים")+ , (61, "ששים ואחד")+ , (62, "ששים ושניים")+ , (63, "ששים ושלושה")+ , (64, "ששים וארבעה")+ , (65, "ששים וחמישה")+ , (66, "ששים ושישה")+ , (67, "ששים ושבעה")+ , (68, "ששים ושמונה")+ , (69, "ששים ותשעה")+ , (70, "שבעים")+ , (71, "שבעים ואחד")+ , (72, "שבעים ושניים")+ , (73, "שבעים ושלושה")+ , (74, "שבעים וארבעה")+ , (75, "שבעים וחמישה")+ , (76, "שבעים ושישה")+ , (77, "שבעים ושבעה")+ , (78, "שבעים ושמונה")+ , (79, "שבעים ותשעה")+ , (80, "שמונים")+ , (81, "שמונים ואחד")+ , (82, "שמונים ושניים")+ , (83, "שמונים ושלושה")+ , (84, "שמונים וארבעה")+ , (85, "שמונים וחמישה")+ , (86, "שמונים ושישה")+ , (87, "שמונים ושבעה")+ , (88, "שמונים ושמונה")+ , (89, "שמונים ותשעה")+ , (90, "תשעים")+ , (91, "תשעים ואחד")+ , (92, "תשעים ושניים")+ , (93, "תשעים ושלושה")+ , (94, "תשעים וארבעה")+ , (95, "תשעים וחמישה")+ , (96, "תשעים ושישה")+ , (97, "תשעים ושבעה")+ , (98, "תשעים ושמונה")+ , (99, "תשעים ותשעה")+ , (100, "מאה")+ , (101, "מאה ואחד")+ , (110, "מאה ועשרה")+ , (111, "מאה אחד עשרה")+ , (123, "מאה עשרים ושלושה")+ , (144, "מאה ארבעים וארבעה")+ , (199, "מאה תשעים ותשעה")+ , (200, "מאתיים")+ , (299, "מאתיים תשעים ותשעה")+ , (300, "שלוש מאות")+ , (400, "ארבע מאות")+ , (900, "תשע מאות")+ , (1000, "אלף")+ , (1999, "אלף תשע מאות תשעים ותשעה")+ , (2000, "אלפיים")+ , (2999, "אלפיים תשע מאות תשעים ותשעה")+ , (3000, "שלושת אלפים")+ , (3110, "שלושת אלפים מאה ועשרה")+ , (4000, "ארבעת אלפים")+ , (5000, "חמשת אלפים")+ , (6000, "ששת אלפים")+ , (7000, "שבעת אלפים")+ , (8000, "שמונת אלפים")+ , (9000, "תשעת אלפים")+ , (10000, "עשרת אלפים")+ , (11000, "אחד עשר אלף")+ , (12000, "שנים עשר אלף")+ , (dec 5, "מאה אלף")+ , (dec 6, "מיליון")+ , (dec 9, "מיליארד")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/HOP/TestData.hs view
@@ -0,0 +1,143 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] hop++[@Native name@] Hopilàvayi++[@English name@] Hopi+-}++module Text.Numeral.Language.HOP.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral, (+) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://www.languagesandnumbers.com/how-to-count-in-hopi/en/hop/+cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "suukya’")+ , (2, "lööyöm")+ , (3, "pàayom")+ , (4, "naalöyöm")+ , (5, "tsivot")+ , (6, "navay")+ , (7, "tsange’")+ , (8, "nanalt")+ , (9, "pevt")+ , (10, "pakwt")+ , (11, "pakwt niikyang suk siikya’ta")+ , (12, "pakwt niikyang löqmuy siikya’ta")+ , (13, "pakwt niikyang paykomuy siikya’ta")+ , (14, "pakwt niikyang naalöqmuy siikya’ta")+ , (15, "pakwt niikyang tsivot siikya’ta")+ , (16, "pakwt niikyang navay siikya’ta")+ , (17, "pakwt niikyang tsange’ siikya’ta")+ , (18, "pakwt niikyang nanalt siikya’ta")+ , (19, "pakwt niikyang pevt siikya’ta")+ , (20, "sunat")+ , (21, "sunat niikyang suk siikya’ta")+ , (22, "sunat niikyang löqmuy siikya’ta")+ , (23, "sunat niikyang paykomuy siikya’ta")+ , (24, "sunat niikyang naalöqmuy siikya’ta")+ , (25, "sunat niikyang tsivot siikya’ta")+ , (26, "sunat niikyang navay siikya’ta")+ , (27, "sunat niikyang tsange’ siikya’ta")+ , (28, "sunat niikyang nanalt siikya’ta")+ , (29, "sunat niikyang pevt siikya’ta")+ , (30, "payiv pakwt")+ , (31, "payiv pakwt niikyang suk siikya’ta")+ , (32, "payiv pakwt niikyang löqmuy siikya’ta")+ , (33, "payiv pakwt niikyang paykomuy siikya’ta")+ , (34, "payiv pakwt niikyang naalöqmuy siikya’ta")+ , (35, "payiv pakwt niikyang tsivot siikya’ta")+ , (36, "payiv pakwt niikyang navay siikya’ta")+ , (37, "payiv pakwt niikyang tsange’ siikya’ta")+ , (38, "payiv pakwt niikyang nanalt siikya’ta")+ , (39, "payiv pakwt niikyang pevt siikya’ta")+ , (40, "naalöv pakwt")+ , (41, "naalöv pakwt niikyang suk siikya’ta")+ , (42, "naalöv pakwt niikyang löqmuy siikya’ta")+ , (43, "naalöv pakwt niikyang paykomuy siikya’ta")+ , (44, "naalöv pakwt niikyang naalöqmuy siikya’ta")+ , (45, "naalöv pakwt niikyang tsivot siikya’ta")+ , (46, "naalöv pakwt niikyang navay siikya’ta")+ , (47, "naalöv pakwt niikyang tsange’ siikya’ta")+ , (48, "naalöv pakwt niikyang nanalt siikya’ta")+ , (49, "naalöv pakwt niikyang pevt siikya’ta")+ , (50, "tsivotsikiv pakwt")+ , (51, "tsivotsikiv pakwt niikyang suk siikya’ta")+ , (52, "tsivotsikiv pakwt niikyang löqmuy siikya’ta")+ , (53, "tsivotsikiv pakwt niikyang paykomuy siikya’ta")+ , (54, "tsivotsikiv pakwt niikyang naalöqmuy siikya’ta")+ , (55, "tsivotsikiv pakwt niikyang tsivot siikya’ta")+ , (56, "tsivotsikiv pakwt niikyang navay siikya’ta")+ , (57, "tsivotsikiv pakwt niikyang tsange’ siikya’ta")+ , (58, "tsivotsikiv pakwt niikyang nanalt siikya’ta")+ , (59, "tsivotsikiv pakwt niikyang pevt siikya’ta")+ , (60, "navaysikiv pakwt")+ , (61, "navaysikiv pakwt niikyang suk siikya’ta")+ , (62, "navaysikiv pakwt niikyang löqmuy siikya’ta")+ , (63, "navaysikiv pakwt niikyang paykomuy siikya’ta")+ , (64, "navaysikiv pakwt niikyang naalöqmuy siikya’ta")+ , (65, "navaysikiv pakwt niikyang tsivot siikya’ta")+ , (66, "navaysikiv pakwt niikyang navay siikya’ta")+ , (67, "navaysikiv pakwt niikyang tsange’ siikya’ta")+ , (68, "navaysikiv pakwt niikyang nanalt siikya’ta")+ , (69, "navaysikiv pakwt niikyang pevt siikya’ta")+ , (70, "tsange’sikiv pakwt")+ , (71, "tsange’sikiv pakwt niikyang suk siikya’ta")+ , (72, "tsange’sikiv pakwt niikyang löqmuy siikya’ta")+ , (73, "tsange’sikiv pakwt niikyang paykomuy siikya’ta")+ , (74, "tsange’sikiv pakwt niikyang naalöqmuy siikya’ta")+ , (75, "tsange’sikiv pakwt niikyang tsivot siikya’ta")+ , (76, "tsange’sikiv pakwt niikyang navay siikya’ta")+ , (77, "tsange’sikiv pakwt niikyang tsange’ siikya’ta")+ , (78, "tsange’sikiv pakwt niikyang nanalt siikya’ta")+ , (79, "tsange’sikiv pakwt niikyang pevt siikya’ta")+ , (80, "nanalsikiv pakwt")+ , (81, "nanalsikiv pakwt niikyang suk siikya’ta")+ , (82, "nanalsikiv pakwt niikyang löqmuy siikya’ta")+ , (83, "nanalsikiv pakwt niikyang paykomuy siikya’ta")+ , (84, "nanalsikiv pakwt niikyang naalöqmuy siikya’ta")+ , (85, "nanalsikiv pakwt niikyang tsivot siikya’ta")+ , (86, "nanalsikiv pakwt niikyang navay siikya’ta")+ , (87, "nanalsikiv pakwt niikyang tsange’ siikya’ta")+ , (88, "nanalsikiv pakwt niikyang nanalt siikya’ta")+ , (89, "nanalsikiv pakwt niikyang pevt siikya’ta")+ , (90, "peve’sikiv pakwt")+ , (91, "peve’sikiv pakwt niikyang suk siikya’ta")+ , (92, "peve’sikiv pakwt niikyang löqmuy siikya’ta")+ , (93, "peve’sikiv pakwt niikyang paykomuy siikya’ta")+ , (94, "peve’sikiv pakwt niikyang naalöqmuy siikya’ta")+ , (95, "peve’sikiv pakwt niikyang tsivot siikya’ta")+ , (96, "peve’sikiv pakwt niikyang navay siikya’ta")+ , (97, "peve’sikiv pakwt niikyang tsange’ siikya’ta")+ , (98, "peve’sikiv pakwt niikyang nanalt siikya’ta")+ , (99, "peve’sikiv pakwt niikyang pevt siikya’ta")+ , (100, "palotsikiv pakwt")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/HR/TestData.hs view
@@ -0,0 +1,142 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] hr++[@ISO639-2@] hrv++[@ISO639-3@] hrv++[@Native name@] Hrvatski++[@English name@] Croatian+-}++module Text.Numeral.Language.HR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- HR - Croatian+--------------------------------------------------------------------------------++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "nula")+ , (1, "jedan")+ , (2, "dva")+ , (3, "tri")+ , (4, "cetiri")+ , (5, "pet")+ , (6, "šest")+ , (7, "sedam")+ , (8, "osam")+ , (9, "devet")+ , (10, "deset")+ , (11, "jedanaest")+ , (12, "dvanaest")+ , (13, "trinaest")+ , (14, "cetrnaest")+ , (15, "petnaest")+ , (16, "šesnaest")+ , (17, "sedamnaest")+ , (18, "osamnaest")+ , (19, "devetnaest")+ , (20, "dvadeset")+ , (21, "dvadeseti jedan")+ , (22, "dvadeseti dva")+ , (23, "dvadeseti tri")+ , (24, "dvadeseti cetiri")+ , (25, "dvadeseti pet")+ , (26, "dvadeseti šest")+ , (27, "dvadeseti sedam")+ , (28, "dvadeseti osam")+ , (29, "dvadeseti devet")+ , (30, "drideset")+ , (31, "drideseti jedan")+ , (32, "drideseti dva")+ , (33, "drideseti tri")+ , (34, "drideseti cetiri")+ , (35, "drideseti pet")+ , (36, "drideseti šest")+ , (37, "drideseti sedam")+ , (38, "drideseti osam")+ , (39, "drideseti devet")+ , (40, "cetrdeset")+ , (41, "cetrdeseti jedan")+ , (42, "cetrdeseti dva")+ , (43, "cetrdeseti tri")+ , (44, "cetrdeseti cetiri")+ , (45, "cetrdeseti pet")+ , (46, "cetrdeseti šest")+ , (47, "cetrdeseti sedam")+ , (48, "cetrdeseti osam")+ , (49, "cetrdeseti devet")+ , (50, "pedeset")+ , (51, "pedeseti jedan")+ , (52, "pedeseti dva")+ , (53, "pedeseti tri")+ , (54, "pedeseti cetiri")+ , (55, "pedeseti pet")+ , (56, "pedeseti šest")+ , (57, "pedeseti sedam")+ , (58, "pedeseti osam")+ , (59, "pedeseti devet")+ , (60, "šezdezet")+ , (61, "šezdezeti jedan")+ , (62, "šezdezeti dva")+ , (63, "šezdezeti tri")+ , (64, "šezdezeti cetiri")+ , (65, "šezdezeti pet")+ , (66, "šezdezeti šest")+ , (67, "šezdezeti sedam")+ , (68, "šezdezeti osam")+ , (69, "šezdezeti devet")+ , (70, "sedamdezet")+ , (71, "sedamdezeti jedan")+ , (72, "sedamdezeti dva")+ , (73, "sedamdezeti tri")+ , (74, "sedamdezeti cetiri")+ , (75, "sedamdezeti pet")+ , (76, "sedamdezeti šest")+ , (77, "sedamdezeti sedam")+ , (78, "sedamdezeti osam")+ , (79, "sedamdezeti devet")+ , (80, "osamdeset")+ , (81, "osamdeseti jedan")+ , (82, "osamdeseti dva")+ , (83, "osamdeseti tri")+ , (84, "osamdeseti cetiri")+ , (85, "osamdeseti pet")+ , (86, "osamdeseti šest")+ , (87, "osamdeseti sedam")+ , (88, "osamdeseti osam")+ , (89, "osamdeseti devet")+ , (90, "deveteset")+ , (91, "deveteseti jedan")+ , (92, "deveteseti dva")+ , (93, "deveteseti tri")+ , (94, "deveteseti cetiri")+ , (95, "deveteseti pet")+ , (96, "deveteseti šest")+ , (97, "deveteseti sedam")+ , (98, "deveteseti osam")+ , (99, "deveteseti devet")+ , (100, "sto")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/HU/TestData.hs view
@@ -0,0 +1,142 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] hu++[@ISO639-2@] hun++[@ISO639-3@] hun++[@Native name@] magyar++[@English name@] Hungarian+-}++module Text.Numeral.Language.HU.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "nulla")+ , (1, "egy")+ , (2, "kettö")+ , (3, "három")+ , (4, "négy")+ , (5, "öt")+ , (6, "hat")+ , (7, "hét")+ , (8, "nyolc")+ , (9, "kilenc")+ , (10, "tíz")+ , (11, "tízenegy")+ , (12, "tízenkettö")+ , (13, "tízenhárom")+ , (14, "tízennégy")+ , (15, "tízenöt")+ , (16, "tízenhat")+ , (17, "tízenhét")+ , (18, "tízennyolc")+ , (19, "tízenkilenc")+ , (20, "húsz")+ , (21, "húszonegy")+ , (22, "húszonkettö")+ , (23, "húszonhárom")+ , (24, "húszonnégy")+ , (25, "húszonöt")+ , (26, "húszonhat")+ , (27, "húszonhét")+ , (28, "húszonnyolc")+ , (29, "húszonkilenc")+ , (30, "harminc")+ , (31, "harmincegy")+ , (32, "harminckettö")+ , (33, "harminchárom")+ , (34, "harmincnégy")+ , (35, "harmincöt")+ , (36, "harminchat")+ , (37, "harminchét")+ , (38, "harmincnyolc")+ , (39, "harminckilenc")+ , (40, "negyven")+ , (41, "negyvenegy")+ , (42, "negyvenkettö")+ , (43, "negyvenhárom")+ , (44, "negyvennégy")+ , (45, "negyvenöt")+ , (46, "negyvenhat")+ , (47, "negyvenhét")+ , (48, "negyvennyolc")+ , (49, "negyvenkilenc")+ , (50, "ötven")+ , (51, "ötvenegy")+ , (52, "ötvenkettö")+ , (53, "ötvenhárom")+ , (54, "ötvennégy")+ , (55, "ötvenöt")+ , (56, "ötvenhat")+ , (57, "ötvenhét")+ , (58, "ötvennyolc")+ , (59, "ötvenkilenc")+ , (60, "hatvan")+ , (61, "hatvanegy")+ , (62, "hatvankettö")+ , (63, "hatvanhárom")+ , (64, "hatvannégy")+ , (65, "hatvanöt")+ , (66, "hatvanhat")+ , (67, "hatvanhét")+ , (68, "hatvannyolc")+ , (69, "hatvankilenc")+ , (70, "hetven")+ , (71, "hetvenegy")+ , (72, "hetvenkettö")+ , (73, "hetvenhárom")+ , (74, "hetvennégy")+ , (75, "hetvenöt")+ , (76, "hetvenhat")+ , (77, "hetvenhét")+ , (78, "hetvennyolc")+ , (79, "hetvenkilenc")+ , (80, "nyolcvan")+ , (81, "nyolcvanegy")+ , (82, "nyolcvankettö")+ , (83, "nyolcvanhárom")+ , (84, "nyolcvannégy")+ , (85, "nyolcvanöt")+ , (86, "nyolcvanhat")+ , (87, "nyolcvanhét")+ , (88, "nyolcvannyolc")+ , (89, "nyolcvankilenc")+ , (90, "kilencven")+ , (91, "kilencvenegy")+ , (92, "kilencvenkettö")+ , (93, "kilencvenhárom")+ , (94, "kilencvennégy")+ , (95, "kilencvenöt")+ , (96, "kilencvenhat")+ , (97, "kilencvenhét")+ , (98, "kilencvennyolc")+ , (99, "kilencvenkilenc")+ , (100, "száz")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/HY/TestData.hs view
@@ -0,0 +1,208 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] hy++[@ISO639-2B@] arm++[@ISO639-2T@] hye++[@ISO639-3@] hye++[@Native name@] հայերեն++[@English name@] Armenian+-}+module Text.Numeral.Language.HY.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-armenian/en/hye/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "զրո")+ , (1, "մեկ")+ , (2, "երկու")+ , (3, "երեք")+ , (4, "չորս")+ , (5, "հինգ")+ , (6, "վեց")+ , (7, "յոթ")+ , (8, "ութ")+ , (9, "ինը")+ , (10, "տաս")+ , (11, "տասնմեկ")+ , (12, "տասներկու")+ , (13, "տասներեք")+ , (14, "տասնչորս")+ , (15, "տասնհինգ")+ , (16, "տասնվեց")+ , (17, "տասնյոթ")+ , (18, "տասնութ")+ , (19, "տասնինը")+ , (20, "քսան")+ , (21, "քսան մեկ")+ , (22, "քսան երկու")+ , (23, "քսան երեք")+ , (24, "քսան չորս")+ , (25, "քսան հինգ")+ , (26, "քսան վեց")+ , (27, "քսան յոթ")+ , (28, "քսան ութ")+ , (29, "քսան ինը")+ , (30, "երեսուն")+ , (31, "երեսուն մեկ")+ , (32, "երեսուն երկու")+ , (33, "երեսուն երեք")+ , (34, "երեսուն չորս")+ , (35, "երեսուն հինգ")+ , (36, "երեսուն վեց")+ , (37, "երեսուն յոթ")+ , (38, "երեսուն ութ")+ , (39, "երեսուն ինը")+ , (40, "քառասուն")+ , (41, "քառասուն մեկ")+ , (42, "քառասուն երկու")+ , (43, "քառասուն երեք")+ , (44, "քառասուն չորս")+ , (45, "քառասուն հինգ")+ , (46, "քառասուն վեց")+ , (47, "քառասուն յոթ")+ , (48, "քառասուն ութ")+ , (49, "քառասուն ինը")+ , (50, "հիսուն")+ , (51, "հիսուն մեկ")+ , (52, "հիսուն երկու")+ , (53, "հիսուն երեք")+ , (54, "հիսուն չորս")+ , (55, "հիսուն հինգ")+ , (56, "հիսուն վեց")+ , (57, "հիսուն յոթ")+ , (58, "հիսուն ութ")+ , (59, "հիսուն ինը")+ , (60, "վաթսուն")+ , (61, "վաթսուն մեկ")+ , (62, "վաթսուն երկու")+ , (63, "վաթսուն երեք")+ , (64, "վաթսուն չորս")+ , (65, "վաթսուն հինգ")+ , (66, "վաթսուն վեց")+ , (67, "վաթսուն յոթ")+ , (68, "վաթսուն ութ")+ , (69, "վաթսուն ինը")+ , (70, "յոթանասուն")+ , (71, "յոթանասուն մեկ")+ , (72, "յոթանասուն երկու")+ , (73, "յոթանասուն երեք")+ , (74, "յոթանասուն չորս")+ , (75, "յոթանասուն հինգ")+ , (76, "յոթանասուն վեց")+ , (77, "յոթանասուն յոթ")+ , (78, "յոթանասուն ութ")+ , (79, "յոթանասուն ինը")+ , (80, "ութսուն")+ , (81, "ութսուն մեկ")+ , (82, "ութսուն երկու")+ , (83, "ութսուն երեք")+ , (84, "ութսուն չորս")+ , (85, "ութսուն հինգ")+ , (86, "ութսուն վեց")+ , (87, "ութսուն յոթ")+ , (88, "ութսուն ութ")+ , (89, "ութսուն ինը")+ , (90, "իննսուն")+ , (91, "իննսուն մեկ")+ , (92, "իննսուն երկու")+ , (93, "իննսուն երեք")+ , (94, "իննսուն չորս")+ , (95, "իննսուն հինգ")+ , (96, "իննսուն վեց")+ , (97, "իննսուն յոթ")+ , (98, "իննսուն ութ")+ , (99, "իննսուն ինը")+ , (100, "հարյուր")+ , (101, "հարյուր մեկ")+ , (102, "հարյուր երկու")+ , (103, "հարյուր երեք")+ , (104, "հարյուր չորս")+ , (105, "հարյուր հինգ")+ , (106, "հարյուր վեց")+ , (107, "հարյուր յոթ")+ , (108, "հարյուր ութ")+ , (109, "հարյուր ինը")+ , (110, "հարյուր տաս")+ , (123, "հարյուր քսան երեք")+ , (200, "երկու հարյուր")+ , (300, "երեք հարյուր")+ , (321, "երեք հարյուր քսան մեկ")+ , (400, "չորս հարյուր")+ , (500, "հինգ հարյուր")+ , (600, "վեց հարյուր")+ , (700, "յոթ հարյուր")+ , (800, "ութ հարյուր")+ , (900, "ինը հարյուր")+ , (909, "ինը հարյուր ինը")+ , (990, "ինը հարյուր իննսուն")+ , (999, "ինը հարյուր իննսուն ինը")+ , (1000, "հազար")+ , (1001, "հազար մեկ")+ , (1008, "հազար ութ")+ , (1234, "հազար երկու հարյուր երեսուն չորս")+ , (2000, "երկու հազար")+ , (3000, "երեք հազար")+ , (4000, "չորս հազար")+ , (4321, "չորս հազար երեք հարյուր քսան մեկ")+ , (5000, "հինգ հազար")+ , (6000, "վեց հազար")+ , (7000, "յոթ հազար")+ , (8000, "ութ հազար")+ , (9000, "ինը հազար")+ , (10000, "տաս հազար")+ , (12345, "տասներկու հազար երեք հարյուր քառասուն հինգ")+ , (20000, "քսան հազար")+ , (30000, "երեսուն հազար")+ , (40000, "քառասուն հազար")+ , (50000, "հիսուն հազար")+ , (54321, "հիսուն չորս հազար երեք հարյուր քսան մեկ")+ , (60000, "վաթսուն հազար")+ , (70000, "յոթանասուն հազար")+ , (80000, "ութսուն հազար")+ , (90000, "իննսուն հազար")+ , (100000, "հարյուր հազար")+ , (123456, "հարյուր քսան երեք հազար չորս հարյուր հիսուն վեց")+ , (200000, "երկու հարյուր հազար")+ , (300000, "երեք հարյուր հազար")+ , (400000, "չորս հարյուր հազար")+ , (500000, "հինգ հարյուր հազար")+ , (600000, "վեց հարյուր հազար")+ , (654321, "վեց հարյուր հիսուն չորս հազար երեք հարյուր քսան մեկ")+ , (700000, "յոթ հարյուր հազար")+ , (800000, "ութ հարյուր հազար")+ , (900000, "ինը հարյուր հազար")+ , (1000000, "միլիոն")+ , (1000000000, "միլիարդ")+ , (1000000000000, "տրիլիոն")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/IT/TestData.hs view
@@ -0,0 +1,295 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] it++[@ISO639-2B@] ita++[@ISO639-3@] ita++[@Native name@] Italiano++[@English name@] Italian+-}++module Text.Numeral.Language.IT.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://www.sf.airnet.ne.jp/~ts/language/number/italian.html+-- http://www.orbilat.com/Languages/Italian/Grammar/Italian-Numerals.html+-- http://italian.about.com/library/weekly/aa042600a.htm+-- http://www.suite101.com/content/how-to-count-in-italian-a146487++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "neuter"+ , neuter defaultInflection+ , [ (0, "zero")+ , (1, "uno")+ , (2, "due")+ , (3, "tre")+ , (4, "quattro")+ , (5, "cinque")+ , (6, "sei")+ , (7, "sette")+ , (8, "otto")+ , (9, "nove")+ , (10, "dieci")+ , (11, "undici")+ , (12, "dodici")+ , (13, "tredici")+ , (14, "quattordici")+ , (15, "quindici")+ , (16, "sedici")+ , (17, "diciassette")+ , (18, "diciotto")+ , (19, "diciannove")+ , (20, "venti")+ , (21, "ventuno")+ , (22, "ventidue")+ , (23, "ventitré")+ , (24, "ventiquattro")+ , (25, "venticinque")+ , (26, "ventisei")+ , (27, "ventisette")+ , (28, "ventotto")+ , (29, "ventinove")+ , (30, "trenta")+ , (31, "trentuno")+ , (32, "trentadue")+ , (33, "trentatré")+ , (34, "trentaquattro")+ , (35, "trentacinque")+ , (36, "trentasei")+ , (37, "trentasette")+ , (38, "trentotto")+ , (39, "trentanove")+ , (40, "quaranta")+ , (41, "quarantuno")+ , (42, "quarantadue")+ , (43, "quarantatré")+ , (44, "quarantaquattro")+ , (45, "quarantacinque")+ , (46, "quarantasei")+ , (47, "quarantasette")+ , (48, "quarantotto")+ , (49, "quarantanove")+ , (50, "cinquanta")+ , (51, "cinquantuno")+ , (52, "cinquantadue")+ , (53, "cinquantatré")+ , (54, "cinquantaquattro")+ , (55, "cinquantacinque")+ , (56, "cinquantasei")+ , (57, "cinquantasette")+ , (58, "cinquantotto")+ , (59, "cinquantanove")+ , (60, "sessanta")+ , (61, "sessantuno")+ , (62, "sessantadue")+ , (63, "sessantatré")+ , (64, "sessantaquattro")+ , (65, "sessantacinque")+ , (66, "sessantasei")+ , (67, "sessantasette")+ , (68, "sessantotto")+ , (69, "sessantanove")+ , (70, "settanta")+ , (71, "settantuno")+ , (72, "settantadue")+ , (73, "settantatré")+ , (74, "settantaquattro")+ , (75, "settantacinque")+ , (76, "settantasei")+ , (77, "settantasette")+ , (78, "settantotto")+ , (79, "settantanove")+ , (80, "ottanta")+ , (81, "ottantuno")+ , (82, "ottantadue")+ , (83, "ottantatré")+ , (84, "ottantaquattro")+ , (85, "ottantacinque")+ , (86, "ottantasei")+ , (87, "ottantasette")+ , (88, "ottantotto")+ , (89, "ottantanove")+ , (90, "novanta")+ , (91, "novantuno")+ , (92, "novantadue")+ , (93, "novantatré")+ , (94, "novantaquattro")+ , (95, "novantacinque")+ , (96, "novantasei")+ , (97, "novantasette")+ , (98, "novantotto")+ , (99, "novantanove")+ , (100, "cento")+ , (108, "centotto")+ , (101, "centouno")+ , (150, "centocinquanta")+ , (180, "centottanta")+ , (188, "centottantotto")+ , (200, "duecento")+ , (208, "duecentotto")+ , (280, "duecentottanta")+ , (288, "duecentottantotto")+ , (300, "trecento")+ , (400, "quattrocento")+ , (456, "quattrocentocinquantasei")+ , (500, "cinquecento")+ , (600, "seicento")+ , (700, "settecento")+ , (800, "ottocento")+ , (900, "novecento")+ , (1000, "mille")+ , (1001, "milleuno")+ , (1002, "milledue")+ , (1100, "millecento")+ , (1200, "milleduecento")+ , (2000, "duemila")+ , (3000, "tremila")+ , (6827, "seimilaottocentoventisette")+ , (10000, "diecimila")+ , (11000, "undicimila")+ , (100000, "centomila")+ , (1 ⋅ dec 6, "milione")+ , (2 ⋅ dec 6, "due milioni")+ , (125 ⋅ dec 5, "dodici milioni cinquecentomila")+ , (43152 ⋅ dec 3, "quarantatré milioni centocinquantaduemila")+ , (132 ⋅ dec 6, "centotrentadue milioni")+ , (28375 ⋅ dec 4, "duecentottantatré milioni settecentocinquantamila")+ , (680 ⋅ dec 6, "seicentottanta milioni")+ , (1 ⋅ dec 9, "miliardo")+ , (2 ⋅ dec 9, "due miliardi")+ , (dec 12, "bilione")+ , (dec 15, "biliardo")+ , (dec 18, "trilione")+ , (dec 21, "triliardo")+ , (dec 24, "quadrilione")+ , (dec 27, "quadriliardo")+ , (dec 30, "quintilione")+ , (dec 33, "quintiliardo")+ , (dec 36, "sestilione")+ , (dec 39, "sestiliardo")+ , (dec 42, "settilione")+ , (dec 45, "settiliardo")+ , (dec 48, "ottilione")+ , (dec 51, "ottiliardo")+ , (dec 54, "nonilione")+ , (dec 57, "noniliardo")+ , (dec 60, "decilione")+ , (dec 63, "deciliardo")+ ]+ )+ , ( "masculine"+ , masculine defaultInflection+ , [ (1, "un")+ ]+ )+ , ( "feminine"+ , feminine defaultInflection+ , [ (1, "una")+ ]+ )+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "primo")+ , (2, "secondo")+ , (3, "terzo")+ , (4, "quarto")+ , (5, "quinto")+ , (6, "sesto")+ , (7, "settimo")+ , (8, "ottavo")+ , (9, "nono")+ , (10, "decimo")+ , (11, "undicesimo")+ , (12, "dodicesimo")+ , (13, "tredicesimo")+ , (14, "quattordicesimo")+ , (15, "quindicesimo")+ , (16, "sedicesimo")+ , (17, "diciassettesimo")+ , (18, "diciottesimo")+ , (19, "diciannovesimo")+ , (20, "ventesimo")+ , (21, "ventunesimo")+ , (22, "ventiduesimo")+ , (23, "ventitreesimo")+ , (24, "ventiquattresimo")+ , (25, "venticinquesimo")+ , (26, "ventiseiesimo")+ , (27, "ventisettesimo")+ , (28, "ventottesimo")+ , (29, "ventinovesimo")+ , (30, "trentesimo")+ , (31, "trentunesimo")+ , (32, "trentaduesimo")+ , (33, "trentatreesimo")+ , (34, "trentaquattresimo")+ , (35, "trentacinquesimo")+ , (36, "trentaseiesimo")+ , (37, "trentasettesimo")+ , (38, "trentottesimo")+ , (39, "trentanovesimo")+ , (40, "quarantesimo")+ , (43, "quarantatreesimo")+ , (50, "cinquantesimo")+ , (60, "sessantesimo")+ , (70, "settantesimo")+ , (80, "ottantesimo")+ , (89, "ottantanovesimo")+ , (90, "novantesimo")+ , (100, "centesimo")+ , (200, "duecentesimo")+ , (278, "duecentosettantottesimo")+ , (300, "trecentesimo")+ , (400, "quattrocentesimo")+ , (500, "cinquecentesimo")+ , (600, "seicentesimo")+ , (700, "settecentesimo")+ , (800, "ottocentesimo")+ , (900, "novecentesimo")+ , (1000, "millesimo")+ , (2000, "duemillesimo")+ , (dec 6, "milionesimo")+ , (dec 12, "bilionesimo")+ ]+ )+ , ( "feminine"+ , feminine defaultInflection+ , [ (1, "prima")+ , (2, "seconda")+ , (3, "terza")+ , (4, "quarta")+ , (5, "quinta")+ , (6, "sesta")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/JA/TestData.hs view
@@ -0,0 +1,217 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] ja++[@ISO639-2B@] jpn++[@ISO639-3@] jpn++[@Native name@] 日本語++[@English name@] Japanese+-}++module Text.Numeral.Language.JA.TestData+ ( preferred_cardinals+ , kanji_cardinals+ , daiji_cardinals+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num, Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- JA+--------------------------------------------------------------------------------++{-+Sources:+ http://en.wikipedia.org/wiki/Japanese_numerals+ http://www.guidetojapanese.org/numbers.html+-}++preferred_cardinals ∷ (Num i) ⇒ TestData i+preferred_cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "rei")+ , (1, "ichi")+ , (2, "ni")+ , (3, "san")+ , (4, "yon")+ , (5, "go")+ , (6, "roku")+ , (7, "nana")+ , (8, "hachi")+ , (9, "kyū")+ , (10, "jū")+ , (11, "jū ichi")+ , (12, "jū ni")+ , (13, "jū san")+ , (14, "jū yon")+ , (15, "jū go")+ , (16, "jū roku")+ , (17, "jū nana")+ , (18, "jū hachi")+ , (19, "jū kyū")+ , (20, "nijū")+ , (21, "nijū ichi")+ , (22, "nijū ni")+ , (23, "nijū san")+ , (24, "nijū yon")+ , (25, "nijū go")+ , (26, "nijū roku")+ , (27, "nijū nana")+ , (28, "nijū hachi")+ , (29, "nijū kyū")+ , (30, "sanjū")+ , (31, "sanjū ichi")+ , (32, "sanjū ni")+ , (33, "sanjū san")+ , (34, "sanjū yon")+ , (35, "sanjū go")+ , (36, "sanjū roku")+ , (37, "sanjū nana")+ , (38, "sanjū hachi")+ , (39, "sanjū kyū")+ , (40, "yonjū")+ , (41, "yonjū ichi")+ , (42, "yonjū ni")+ , (43, "yonjū san")+ , (44, "yonjū yon")+ , (45, "yonjū go")+ , (46, "yonjū roku")+ , (47, "yonjū nana")+ , (48, "yonjū hachi")+ , (49, "yonjū kyū")+ , (50, "gojū")+ , (51, "gojū ichi")+ , (52, "gojū ni")+ , (53, "gojū san")+ , (54, "gojū yon")+ , (55, "gojū go")+ , (56, "gojū roku")+ , (57, "gojū nana")+ , (58, "gojū hachi")+ , (59, "gojū kyū")+ , (60, "rokujū")+ , (61, "rokujū ichi")+ , (62, "rokujū ni")+ , (63, "rokujū san")+ , (64, "rokujū yon")+ , (65, "rokujū go")+ , (66, "rokujū roku")+ , (67, "rokujū nana")+ , (68, "rokujū hachi")+ , (69, "rokujū kyū")+ , (70, "nanajū")+ , (71, "nanajū ichi")+ , (72, "nanajū ni")+ , (73, "nanajū san")+ , (74, "nanajū yon")+ , (75, "nanajū go")+ , (76, "nanajū roku")+ , (77, "nanajū nana")+ , (78, "nanajū hachi")+ , (79, "nanajū kyū")+ , (80, "hachijū")+ , (81, "hachijū ichi")+ , (82, "hachijū ni")+ , (83, "hachijū san")+ , (84, "hachijū yon")+ , (85, "hachijū go")+ , (86, "hachijū roku")+ , (87, "hachijū nana")+ , (88, "hachijū hachi")+ , (89, "hachijū kyū")+ , (90, "kyūjū")+ , (91, "kyūjū ichi")+ , (92, "kyūjū ni")+ , (93, "kyūjū san")+ , (94, "kyūjū yon")+ , (95, "kyūjū go")+ , (96, "kyūjū roku")+ , (97, "kyūjū nana")+ , (98, "kyūjū hachi")+ , (99, "kyūjū kyū")+ , (100, "hyaku")+ , (208, "nihyaku hachi")+ , (280, "nihyaku hachijū")+ , (2008, "nisen hachi")+ , (2080, "nisen hachijū")+ , (2800, "nisen hachihyaku")+ ]+ )+ ]++kanji_cardinals ∷ (Integral i) ⇒ TestData i+kanji_cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "零")+ , (1, "一")+ , (2, "二")+ , (3, "三")+ , (4, "四")+ , (5, "五")+ , (6, "六")+ , (7, "七")+ , (8, "八")+ , (9, "九")+ , (10, "十")+ , (11, "十一")+ , (12, "十二")+ , (13, "十三")+ , (14, "十四")+ , (21, "二十一")+ , (28, "二十八")+ , (100, "百")+ , (208, "二百八")+ , (280, "二百八十")+ , (321, "三百二十一")+ , (1000, "千")+ , (2008, "二千八")+ , (2080, "二千八十")+ , (2800, "二千八百")+ , (4321, "四千三百二十一")+ , (10000, "一万")+ , (654321, "六十五万四千三百二十一")+ , (87654321, "八千七百六十五万四千三百二十一")+ , (100000000, "一億")+ , (987654321, "九億八千七百六十五万四千三百二十一")+ , (dec 12, "一兆")+ ]+ )+ ]++daiji_cardinals ∷ (Integral i) ⇒ TestData i+daiji_cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "零")+ , (1, "壱")+ , (2, "弐")+ , (3, "参")+ , (4, "四")+ , (5, "五")+ , (6, "六")+ , (7, "七")+ , (8, "八")+ , (9, "九")+ , (10, "拾")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/KAP/TestData.hs view
@@ -0,0 +1,169 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] kap++[@Native name@] бежкьалас миц++[@English name@] Bezhta+-}+module Text.Numeral.Language.KAP.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-bezhta/en/kap/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "nol")+ , (1, "hõs")+ , (2, "q’ona")+ , (3, "łana")+ , (4, "ṏq’önä")+ , (5, "łina")+ , (6, "iłna")+ , (7, "aƛna")+ , (8, "beƛna")+ , (9, "äč’ena")+ , (10, "ac’ona")+ , (11, "ac’ona hõs")+ , (12, "ac’ona q’ona")+ , (13, "ac’ona łana")+ , (14, "ac’ona ṏq’önä")+ , (15, "ac’ona łina")+ , (16, "ac’ona iłna")+ , (17, "ac’ona aƛna")+ , (18, "ac’ona beƛna")+ , (19, "ac’ona äč’ena")+ , (20, "qona")+ , (21, "qona hõs")+ , (22, "qona q’ona")+ , (23, "qona łana")+ , (24, "qona ṏq’önä")+ , (25, "qona łina")+ , (26, "qona iłna")+ , (27, "qona aƛna")+ , (28, "qona beƛna")+ , (29, "qona äč’ena")+ , (30, "łanayig")+ , (31, "łanayig hõs")+ , (32, "łanayig q’ona")+ , (33, "łanayig łana")+ , (34, "łanayig ṏq’önä")+ , (35, "łanayig łina")+ , (36, "łanayig iłna")+ , (37, "łanayig aƛna")+ , (38, "łanayig beƛna")+ , (39, "łanayig äč’ena")+ , (40, "ṏq’önäyig")+ , (41, "ṏq’önäyig hõs")+ , (42, "ṏq’önäyig q’ona")+ , (43, "ṏq’önäyig łana")+ , (44, "ṏq’önäyig ṏq’önä")+ , (45, "ṏq’önäyig łina")+ , (46, "ṏq’önäyig iłna")+ , (47, "ṏq’önäyig aƛna")+ , (48, "ṏq’önäyig beƛna")+ , (49, "ṏq’önäyig äč’ena")+ , (50, "łinayig")+ , (51, "łinayig hõs")+ , (52, "łinayig q’ona")+ , (53, "łinayig łana")+ , (54, "łinayig ṏq’önä")+ , (55, "łinayig łina")+ , (56, "łinayig iłna")+ , (57, "łinayig aƛna")+ , (58, "łinayig beƛna")+ , (59, "łinayig äč’ena")+ , (60, "iłnayig")+ , (61, "iłnayig hõs")+ , (62, "iłnayig q’ona")+ , (63, "iłnayig łana")+ , (64, "iłnayig ṏq’önä")+ , (65, "iłnayig łina")+ , (66, "iłnayig iłna")+ , (67, "iłnayig aƛna")+ , (68, "iłnayig beƛna")+ , (69, "iłnayig äč’ena")+ , (70, "aƛnayig")+ , (71, "aƛnayig hõs")+ , (72, "aƛnayig q’ona")+ , (73, "aƛnayig łana")+ , (74, "aƛnayig ṏq’önä")+ , (75, "aƛnayig łina")+ , (76, "aƛnayig iłna")+ , (77, "aƛnayig aƛna")+ , (78, "aƛnayig beƛna")+ , (79, "aƛnayig äč’ena")+ , (80, "beƛnayig")+ , (81, "beƛnayig hõs")+ , (82, "beƛnayig q’ona")+ , (83, "beƛnayig łana")+ , (84, "beƛnayig ṏq’önä")+ , (85, "beƛnayig łina")+ , (86, "beƛnayig iłna")+ , (87, "beƛnayig aƛna")+ , (88, "beƛnayig beƛna")+ , (89, "beƛnayig äč’ena")+ , (90, "äč’enayig")+ , (91, "äč’enayig hõs")+ , (92, "äč’enayig q’ona")+ , (93, "äč’enayig łana")+ , (94, "äč’enayig ṏq’önä")+ , (95, "äč’enayig łina")+ , (96, "äč’enayig iłna")+ , (97, "äč’enayig aƛna")+ , (98, "äč’enayig beƛna")+ , (99, "äč’enayig äč’ena")+ , (100, "hõsč’it’")+ , (101, "hõsč’it’ hõs")+ , (102, "hõsč’it’ q’ona")+ , (103, "hõsč’it’ łana")+ , (104, "hõsč’it’ ṏq’önä")+ , (105, "hõsč’it’ łina")+ , (106, "hõsč’it’ iłna")+ , (107, "hõsč’it’ aƛna")+ , (108, "hõsč’it’ beƛna")+ , (109, "hõsč’it’ äč’ena")+ , (110, "hõsč’it’ ac’ona")+ , (123, "hõsč’it’ qona łana")+ , (200, "q’onač’it’")+ , (300, "łanač’it’")+ , (321, "łanač’it’ qona hõs")+ , (400, "ṏq’önäč’it’")+ , (500, "łinač’it’")+ , (600, "iłnač’it’")+ , (700, "aƛnač’it’")+ , (800, "beƛnač’it’")+ , (900, "äč’enač’it’")+ , (909, "äč’enač’it’ äč’ena")+ , (990, "äč’enač’it’ äč’enayig")+ , (999, "äč’enač’it’ äč’enayig äč’ena")+ , (1000, "hazay")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/KEA/TestData.hs view
@@ -0,0 +1,207 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] kea++[@Native name@] Kriolu++[@English name@] Cape Verdean Creole+-}+module Text.Numeral.Language.KEA.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-cape-verdean-creole/en/kea/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "zéru")+ , (1, "um")+ , (2, "dós")+ , (3, "trés")+ , (4, "kuátu")+ , (5, "sinku")+ , (6, "sax")+ , (7, "séti")+ , (8, "oitu")+ , (9, "nóvi")+ , (10, "dés")+ , (11, "ónzi")+ , (12, "duzi")+ , (13, "treizi")+ , (14, "katorzi")+ , (15, "kinzi")+ , (16, "dizasax")+ , (17, "dizaséti")+ , (18, "dizoitu")+ , (19, "dizanóvi")+ , (20, "vinti")+ , (21, "vinti-um")+ , (22, "vinti-dós")+ , (23, "vinti-trés")+ , (24, "vinti-kuátu")+ , (25, "vinti-sinku")+ , (26, "vinti-sax")+ , (27, "vinti-séti")+ , (28, "vinti-oitu")+ , (29, "vinti-nóvi")+ , (30, "trinta")+ , (31, "trinti-um")+ , (32, "trinti-dós")+ , (33, "trinti-trés")+ , (34, "trinti-kuátu")+ , (35, "trinti-sinku")+ , (36, "trinti-sax")+ , (37, "trinti-séti")+ , (38, "trinti-oitu")+ , (39, "trinti-nóvi")+ , (40, "korénta")+ , (41, "korénti-um")+ , (42, "korénti-dós")+ , (43, "korénti-trés")+ , (44, "korénti-kuátu")+ , (45, "korénti-sinku")+ , (46, "korénti-sax")+ , (47, "korénti-séti")+ , (48, "korénti-oitu")+ , (49, "korénti-nóvi")+ , (50, "sunkuénta")+ , (51, "sunkuénti-um")+ , (52, "sunkuénti-dós")+ , (53, "sunkuénti-trés")+ , (54, "sunkuénti-kuátu")+ , (55, "sunkuénti-sinku")+ , (56, "sunkuénti-sax")+ , (57, "sunkuénti-séti")+ , (58, "sunkuénti-oitu")+ , (59, "sunkuénti-nóvi")+ , (60, "sasénta")+ , (61, "sasénti-um")+ , (62, "sasénti-dós")+ , (63, "sasénti-trés")+ , (64, "sasénti-kuátu")+ , (65, "sasénti-sinku")+ , (66, "sasénti-sax")+ , (67, "sasénti-séti")+ , (68, "sasénti-oitu")+ , (69, "sasénti-nóvi")+ , (70, "saténta")+ , (71, "saténti-um")+ , (72, "saténti-dós")+ , (73, "saténti-trés")+ , (74, "saténti-kuátu")+ , (75, "saténti-sinku")+ , (76, "saténti-sax")+ , (77, "saténti-séti")+ , (78, "saténti-oitu")+ , (79, "saténti-nóvi")+ , (80, "oiténta")+ , (81, "oiténti-um")+ , (82, "oiténti-dós")+ , (83, "oiténti-trés")+ , (84, "oiténti-kuátu")+ , (85, "oiténti-sinku")+ , (86, "oiténti-sax")+ , (87, "oiténti-séti")+ , (88, "oiténti-oitu")+ , (89, "oiténti-nóvi")+ , (90, "novénta")+ , (91, "novénti-um")+ , (92, "novénti-dós")+ , (93, "novénti-trés")+ , (94, "novénti-kuátu")+ , (95, "novénti-sinku")+ , (96, "novénti-sax")+ , (97, "novénti-séti")+ , (98, "novénti-oitu")+ , (99, "novénti-nóvi")+ , (100, "sem")+ , (101, "senti-um")+ , (102, "senti-dós")+ , (103, "senti-trés")+ , (104, "senti-kuátu")+ , (105, "senti-sinku")+ , (106, "senti-sax")+ , (107, "senti-séti")+ , (108, "senti-oitu")+ , (109, "senti-nóvi")+ , (110, "senti-dés")+ , (123, "senti-vinti-trés")+ , (200, "duzéntus")+ , (300, "trezéntus")+ , (321, "trezéntus-i-vinti-um")+ , (400, "kuátuséntus")+ , (500, "kinhéntus")+ , (600, "saiséntus")+ , (700, "sétuséntus")+ , (800, "oituséntus")+ , (900, "nóviséntus")+ , (909, "nóviséntus-i-nóvi")+ , (990, "nóviséntus-i-novénta")+ , (999, "nóviséntus-i-novénti-nóvi")+ , (1000, "mil")+ , (1001, "um mili--um")+ , (1008, "um mili--oitu")+ , (1234, "um mili-duzéntus-i-trinti-kuátu")+ , (2000, "dós mil")+ , (3000, "trés mil")+ , (4000, "kuátu mil")+ , (4321, "kuátu mili-trezéntus-i-vinti-um")+ , (5000, "sinku mil")+ , (6000, "sax mil")+ , (7000, "séti mil")+ , (8000, "oitu mil")+ , (9000, "nóvi mil")+ , (10000, "dés mil")+ , (12345, "duzi mili-trezéntus-i-korénti-sinku")+ , (20000, "vinti mil")+ , (30000, "trinta mil")+ , (40000, "korénta mil")+ , (50000, "sunkuénta mil")+ , (54321, "sunkuénti-kuátu mili-trezéntus-i-vinti-um")+ , (60000, "sasénta mil")+ , (70000, "saténta mil")+ , (80000, "oiténta mil")+ , (90000, "novénta mil")+ , (100000, "um sem mil")+ , (123456, "senti-vinti-trés mili-kuátuséntus-i-sunkuénti-sax")+ , (200000, "duzéntus mil")+ , (300000, "trezéntus mil")+ , (400000, "kuátuséntus mil")+ , (500000, "kinhéntus mil")+ , (600000, "saiséntus mil")+ , (654321, "saiséntus-i-sunkuénti-kuátu mili-trezéntus-i-vinti-um")+ , (700000, "sétuséntus mil")+ , (800000, "oituséntus mil")+ , (900000, "nóviséntus mil")+ , (1000000, "um miliom")+ , (1234567, "um miliom duzéntus-i-trinti-kuátu mili-kinhéntus-i-sasénti-séti")+ , (7654321, "séti miliom saiséntus-i-sunkuénti-kuátu mili-trezéntus-i-vinti-um")+ , (1000000000, "um biliom")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/LA/TestData.hs view
@@ -0,0 +1,148 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] la++[@ISO639-2B@] lat++[@ISO639-3@] lat++[@Native name@] Latine++[@English name@] Latin+-}++module Text.Numeral.Language.LA.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.informalmusic.com/latinsoc/latnum.html+ http://www.sf.airnet.ne.jp/~ts/language/number/latin.html+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "nihil")+ , (1, "ūnus")+ , (2, "duo")+ , (3, "trēs")+ , (4, "quattuor")+ , (5, "quīnque")+ , (6, "sex")+ , (7, "septem")+ , (8, "octō")+ , (9, "novem")+ , (10, "decem")+ , (11, "ūndecim")+ , (12, "duodecim")+ , (13, "trēdecim")+ , (14, "quattuordecim")+ , (15, "quīndecim")+ , (16, "sēdecim")+ , (17, "septendecim")+ , (18, "duodēvīgintī")+ , (19, "ūndēvīgintī")+ , (20, "vīgintī")+ , (21, "vīgintī ūnus")+ , (22, "vīgintī duo")+ , (23, "vīgintī trēs")+ , (24, "vīgintī quattuor")+ , (25, "vīgintī quīnque")+ , (26, "vīgintī sex")+ , (27, "vīgintī septem")+ , (28, "duodētrīgintā")+ , (29, "ūndētrīgintā")+ , (30, "trīgintā")+ , (31, "trīgintā ūnus")+ , (32, "trīgintā duo")+ , (33, "trīgintā trēs")+ , (34, "trīgintā quattuor")+ , (35, "trīgintā quīnque")+ , (36, "trīgintā sex")+ , (37, "trīgintā septem")+ , (38, "duodēquadrāgintā")+ , (39, "ūndēquadrāgintā")+ , (40, "quadrāgintā")+ , (41, "quadrāgintā ūnus")+ , (42, "quadrāgintā duo")+ , (43, "quadrāgintā trēs")+ , (44, "quadrāgintā quattuor")+ , (45, "quadrāgintā quīnque")+ , (46, "quadrāgintā sex")+ , (47, "quadrāgintā septem")+ , (48, "duodēquīnquāgintā")+ , (49, "ūndēquīnquāgintā")+ , (50, "quīnquāgintā")+ , (51, "quīnquāgintā ūnus")+ , (52, "quīnquāgintā duo")+ , (53, "quīnquāgintā trēs")+ , (54, "quīnquāgintā quattuor")+ , (55, "quīnquāgintā quīnque")+ , (56, "quīnquāgintā sex")+ , (57, "quīnquāgintā septem")+ , (58, "duodēsexāgintā")+ , (59, "ūndēsexāgintā")+ , (60, "sexāgintā")+ , (61, "sexāgintā ūnus")+ , (62, "sexāgintā duo")+ , (63, "sexāgintā trēs")+ , (64, "sexāgintā quattuor")+ , (65, "sexāgintā quīnque")+ , (66, "sexāgintā sex")+ , (67, "sexāgintā septem")+ , (68, "duodēseptuāgintā")+ , (69, "ūndēseptuāgintā")+ , (70, "septuāgintā")+ , (71, "septuāgintā ūnus")+ , (72, "septuāgintā duo")+ , (73, "septuāgintā trēs")+ , (74, "septuāgintā quattuor")+ , (75, "septuāgintā quīnque")+ , (76, "septuāgintā sex")+ , (77, "septuāgintā septem")+ , (78, "duodēoctōgintā")+ , (79, "ūndēoctōgintā")+ , (80, "octōgintā")+ , (81, "octōgintā ūnus")+ , (82, "octōgintā duo")+ , (83, "octōgintā trēs")+ , (84, "octōgintā quattuor")+ , (85, "octōgintā quīnque")+ , (86, "octōgintā sex")+ , (87, "octōgintā septem")+ , (88, "duodēnōnāgintā")+ , (89, "ūndēnōnāgintā")+ , (90, "nōnāgintā")+ , (91, "nōnāgintā ūnus")+ , (92, "nōnāgintā duo")+ , (93, "nōnāgintā trēs")+ , (94, "nōnāgintā quattuor")+ , (95, "nōnāgintā quīnque")+ , (96, "nōnāgintā sex")+ , (97, "nōnāgintā septem")+ , (98, "duodēcentum")+ , (99, "ūndēcentum")+ , (100, "centum")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/LLD/TestData.hs view
@@ -0,0 +1,155 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] lld++[@Native name@] Ladin++[@English name@] Ladin+-}++module Text.Numeral.Language.LLD.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral, (+) )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://www.languagesandnumbers.com/how-to-count-in-ladin/en/lld/+cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "masculine"+ , masculine defaultInflection+ , [ (0, "zero")+ , (1, "un")+ , (2, "doi")+ , (3, "trei")+ , (4, "cater")+ , (5, "cinch")+ , (6, "sies")+ , (7, "set")+ , (8, "ot")+ , (9, "nuef")+ , (10, "diesc")+ , (11, "undesc")+ , (12, "dodesc")+ , (13, "tredesc")+ , (14, "catordesc")+ , (15, "chindesc")+ , (16, "seidesc")+ , (17, "dejesset")+ , (18, "dejedot")+ , (19, "dejenuef")+ , (20, "vint")+ , (21, "vintun")+ , (22, "vintedoi")+ , (23, "vintetrei")+ , (24, "vintecater")+ , (25, "vintecinch")+ , (26, "vintesies")+ , (27, "vinteset")+ , (28, "vintot")+ , (29, "vintenuef")+ , (30, "trenta")+ , (31, "trentun")+ , (32, "trentedoi")+ , (33, "trentetrei")+ , (34, "trentecater")+ , (35, "trentecinch")+ , (36, "trentesies")+ , (37, "trenteset")+ , (38, "trenteot")+ , (39, "trentenuef")+ , (40, "caranta")+ , (41, "carantun")+ , (42, "carantedoi")+ , (43, "carantetrei")+ , (44, "carantecater")+ , (45, "carantecinch")+ , (46, "carantesies")+ , (47, "caranteset")+ , (48, "carantot")+ , (49, "carantenuef")+ , (50, "cincanta")+ , (51, "cincantun")+ , (52, "cincantedoi")+ , (53, "cincantetrei")+ , (54, "cincantecater")+ , (55, "cincantecinch")+ , (56, "cincantesies")+ , (57, "cincanteset")+ , (58, "cincantot")+ , (59, "cincantenuef")+ , (60, "sessanta")+ , (70, "setanta")+ , (80, "otanta")+ , (90, "nonanta")+ , (100, "cent")+ , (101, "centeun")+ , (102, "centedoi")+ , (103, "centetrei")+ , (200, "doicent")+ , (300, "treicent")+ , (400, "catercent")+ , (401, "catercenteun")+ , (402, "catercentedoi")+ , (403, "catercentetrei")+ , (500, "cinchcent")+ , (600, "siesçent")+ , (700, "setcent")+ , (800, "otcent")+ , (900, "nuefcent")+ , (999, "nuefcentenonantenuef")+ , (1000, "mile")+ , (1001, "mileun")+ , (1100, "milecent")+ , (1110, "milecentediesc")+ , (1234, "miledoicentetrentecater")+ , (2000, "doimile")+ , (3000, "treimile")+ , (4000, "catermile")+ , (5000, "cinchmile")+ , (5678, "cinchmilesiesçentesetantot")+ , (6000, "siesmile")+ , (7000, "setmile")+ , (8000, "otmile")+ , (9000, "nuefmile")+ , (12345, "dodescmiletreicentecarantecinch")+ , (dec 6, "un milion")+ , (dec 6 + 1, "un milioneun")+ , (2 ⋅ dec 6, "doi milion")+ , (123456789, "centevintetrei milionecatercentecincantesiesmilesetcenteotantenuef")+ , (dec 9, "un miliard")+ , (2 ⋅ dec 9, "doi miliard")+ , (9876543210, "nuef miliardeotcentesetantesies milionecinchcentecarantetreimiledoicentediesc")+ , (9999999999, "nuef miliardenuefcentenonantenuef milionenuefcentenonantenuefmilenuefcentenonantenuef")+ ]+ )+ , ( "feminine"+ , feminine defaultInflection+ , [ (1, "una")+ , (2, "does")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/MG/TestData.hs view
@@ -0,0 +1,162 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] mg++[@ISO639-2@] mlg++[@ISO639-3@] mlg++[@Native name@] -++[@English name@] Malagasy+-}++module Text.Numeral.Language.MG.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Misc ( dec )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://en.wikipedia.org/wiki/Malagasy_language+ http://www.sf.airnet.ne.jp/~ts/language/number/malagasy.html+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "haotra")+ , (1, "iray")+ , (2, "roa")+ , (3, "telo")+ , (4, "efatra")+ , (5, "dimy")+ , (6, "enina")+ , (7, "fito")+ , (8, "valo")+ , (9, "sivy")+ , (10, "folo")+ , (11, "iraika ambin'ny folo")+ , (12, "roa ambin'ny folo")+ , (13, "telo ambin'ny folo")+ , (14, "efatra ambin'ny folo")+ , (15, "dimy ambin'ny folo")+ , (16, "enina ambin'ny folo")+ , (17, "fito ambin'ny folo")+ , (18, "valo ambin'ny folo")+ , (19, "sivy ambin'ny folo")+ , (20, "roapolo")+ , (21, "iraika amby roapolo")+ , (22, "roa amby roapolo")+ , (23, "telo amby roapolo")+ , (24, "efatra amby roapolo")+ , (25, "dimy amby roapolo")+ , (26, "enina amby roapolo")+ , (27, "fito amby roapolo")+ , (28, "valo amby roapolo")+ , (29, "sivy amby roapolo")+ , (30, "telopolo")+ , (31, "iraika amby telopolo")+ , (32, "roa amby telopolo")+ , (33, "telo amby telopolo")+ , (34, "efatra amby telopolo")+ , (35, "dimy amby telopolo")+ , (36, "enina amby telopolo")+ , (37, "fito amby telopolo")+ , (38, "valo amby telopolo")+ , (39, "sivy amby telopolo")+ , (40, "efapolo")+ , (41, "iraika amby efapolo")+ , (42, "roa amby efapolo")+ , (43, "telo amby efapolo")+ , (44, "efatra amby efapolo")+ , (45, "dimy amby efapolo")+ , (46, "enina amby efapolo")+ , (47, "fito amby efapolo")+ , (48, "valo amby efapolo")+ , (49, "sivy amby efapolo")+ , (50, "dimampolo")+ , (51, "iraika amby dimampolo")+ , (52, "roa amby dimampolo")+ , (53, "telo amby dimampolo")+ , (54, "efatra amby dimampolo")+ , (55, "dimy amby dimampolo")+ , (56, "enina amby dimampolo")+ , (57, "fito amby dimampolo")+ , (58, "valo amby dimampolo")+ , (59, "sivy amby dimampolo")+ , (60, "enimpolo")+ , (61, "iraika amby enimpolo")+ , (62, "roa amby enimpolo")+ , (63, "telo amby enimpolo")+ , (64, "efatra amby enimpolo")+ , (65, "dimy amby enimpolo")+ , (66, "enina amby enimpolo")+ , (67, "fito amby enimpolo")+ , (68, "valo amby enimpolo")+ , (69, "sivy amby enimpolo")+ , (70, "fitopolo")+ , (71, "iraika amby fitopolo")+ , (72, "roa amby fitopolo")+ , (73, "telo amby fitopolo")+ , (74, "efatra amby fitopolo")+ , (75, "dimy amby fitopolo")+ , (76, "enina amby fitopolo")+ , (77, "fito amby fitopolo")+ , (78, "valo amby fitopolo")+ , (79, "sivy amby fitopolo")+ , (80, "valopolo")+ , (81, "iraika amby valopolo")+ , (82, "roa amby valopolo")+ , (83, "telo amby valopolo")+ , (84, "efatra amby valopolo")+ , (85, "dimy amby valopolo")+ , (86, "enina amby valopolo")+ , (87, "fito amby valopolo")+ , (88, "valo amby valopolo")+ , (89, "sivy amby valopolo")+ , (90, "sivifolo")+ , (91, "iraika amby sivifolo")+ , (92, "roa amby sivifolo")+ , (93, "telo amby sivifolo")+ , (94, "efatra amby sivifolo")+ , (95, "dimy amby sivifolo")+ , (96, "enina amby sivifolo")+ , (97, "fito amby sivifolo")+ , (98, "valo amby sivifolo")+ , (99, "sivy amby sivifolo")+ , (100, "zato")+ , (200, "roanjato")+ , (300, "telonjato")+ , (400, "efajato")+ , (500, "dimanjato")+ , (600, "eninjato")+ , (700, "fitonjato")+ , (800, "valonjato")+ , (900, "sivinjato")+ , (1000, "arivo")+ , (dec 4, "alina")+ , (dec 5, "hetsy")+ , (123456, "enina amby dimampolo sy efajato sy telo arivo sy roa alina sy hetsy")+ , (dec 6, "tapitrisa")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/MOH/TestData.hs view
@@ -0,0 +1,202 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] moh++[@ISO639-3@] moh++[@Native name@] Kanien’kéha++[@English name@] Mohawk+-}+module Text.Numeral.Language.MOH.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-acholi/en/moh+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "énska")+ , (2, "tékeni")+ , (3, "áhsen")+ , (4, "kaié:ri")+ , (5, "wisk")+ , (6, "ià:ia’k")+ , (7, "tsá:ta")+ , (8, "sha’té:kon")+ , (9, "tióhton")+ , (10, "oié:ri")+ , (11, "énska iawén:re")+ , (12, "tékeni iawén:re")+ , (13, "áhsen iawén:re")+ , (14, "kaié:ri iawén:re")+ , (15, "wisk iawén:re")+ , (16, "ià:ia’k iawén:re")+ , (17, "tsá:ta iawén:re")+ , (18, "sha’té:kon iawén:re")+ , (19, "tióhton iawén:re")+ , (20, "tewáhsen")+ , (21, "tewáhsen énska")+ , (22, "tewáhsen tékeni")+ , (23, "tewáhsen áhsen")+ , (24, "tewáhsen kaié:ri")+ , (25, "tewáhsen wisk")+ , (26, "tewáhsen ià:ia’k")+ , (27, "tewáhsen tsá:ta")+ , (28, "tewáhsen sha’té:kon")+ , (29, "tewáhsen tióhton")+ , (30, "áhsen niwáhsen")+ , (31, "áhsen niwáhsen énska")+ , (32, "áhsen niwáhsen tékeni")+ , (33, "áhsen niwáhsen áhsen")+ , (34, "áhsen niwáhsen kaié:ri")+ , (35, "áhsen niwáhsen wisk")+ , (36, "áhsen niwáhsen ià:ia’k")+ , (37, "áhsen niwáhsen tsá:ta")+ , (38, "áhsen niwáhsen sha’té:kon")+ , (39, "áhsen niwáhsen tióhton")+ , (40, "kaié:ri niwáhsen")+ , (41, "kaié:ri niwáhsen énska")+ , (42, "kaié:ri niwáhsen tékeni")+ , (43, "kaié:ri niwáhsen áhsen")+ , (44, "kaié:ri niwáhsen kaié:ri")+ , (45, "kaié:ri niwáhsen wisk")+ , (46, "kaié:ri niwáhsen ià:ia’k")+ , (47, "kaié:ri niwáhsen tsá:ta")+ , (48, "kaié:ri niwáhsen sha’té:kon")+ , (49, "kaié:ri niwáhsen tióhton")+ , (51, "wisk niwáhsen énska")+ , (52, "wisk niwáhsen tékeni")+ , (53, "wisk niwáhsen áhsen")+ , (54, "wisk niwáhsen kaié:ri")+ , (55, "wisk niwáhsen wisk")+ , (56, "wisk niwáhsen ià:ia’k")+ , (57, "wisk niwáhsen tsá:ta")+ , (58, "wisk niwáhsen sha’té:kon")+ , (59, "wisk niwáhsen tióhton")+ , (60, "iá:ia’k niwáhsen")+ , (61, "iá:ia’k niwáhsen énska")+ , (62, "iá:ia’k niwáhsen tékeni")+ , (63, "iá:ia’k niwáhsen áhsen")+ , (64, "iá:ia’k niwáhsen kaié:ri")+ , (65, "iá:ia’k niwáhsen wisk")+ , (66, "iá:ia’k niwáhsen ià:ia’k")+ , (67, "iá:ia’k niwáhsen tsá:ta")+ , (68, "iá:ia’k niwáhsen sha’té:kon")+ , (69, "iá:ia’k niwáhsen tióhton")+ , (70, "tsá:ta niwáhsen")+ , (71, "tsá:ta niwáhsen énska")+ , (72, "tsá:ta niwáhsen tékeni")+ , (73, "tsá:ta niwáhsen áhsen")+ , (74, "tsá:ta niwáhsen kaié:ri")+ , (75, "tsá:ta niwáhsen wisk")+ , (76, "tsá:ta niwáhsen ià:ia’k")+ , (77, "tsá:ta niwáhsen tsá:ta")+ , (78, "tsá:ta niwáhsen sha’té:kon")+ , (79, "tsá:ta niwáhsen tióhton")+ , (80, "sha’té:kon niwáhsen")+ , (81, "sha’té:kon niwáhsen énska")+ , (82, "sha’té:kon niwáhsen tékeni")+ , (83, "sha’té:kon niwáhsen áhsen")+ , (84, "sha’té:kon niwáhsen kaié:ri")+ , (85, "sha’té:kon niwáhsen wisk")+ , (86, "sha’té:kon niwáhsen ià:ia’k")+ , (87, "sha’té:kon niwáhsen tsá:ta")+ , (88, "sha’té:kon niwáhsen sha’té:kon")+ , (89, "sha’té:kon niwáhsen tióhton")+ , (90, "tióhton niwáhsen")+ , (91, "tióhton niwáhsen énska")+ , (92, "tióhton niwáhsen tékeni")+ , (93, "tióhton niwáhsen áhsen")+ , (94, "tióhton niwáhsen kaié:ri")+ , (95, "tióhton niwáhsen wisk")+ , (96, "tióhton niwáhsen ià:ia’k")+ , (97, "tióhton niwáhsen tsá:ta")+ , (98, "tióhton niwáhsen sha’té:kon")+ , (99, "tióhton niwáhsen tióhton")+ , (100, "énska tewen’niáwe")+ , (101, "énska tewen’niáwe tánon énska")+ , (102, "énska tewen’niáwe tánon tékeni")+ , (103, "énska tewen’niáwe tánon áhsen")+ , (104, "énska tewen’niáwe tánon kaié:ri")+ , (105, "énska tewen’niáwe tánon wisk")+ , (106, "énska tewen’niáwe tánon ià:ia’k")+ , (107, "énska tewen’niáwe tánon tsá:ta")+ , (108, "énska tewen’niáwe tánon sha’té:kon")+ , (109, "énska tewen’niáwe tánon tióhton")+ , (110, "énska tewen’niáwe oié:ri")+ , (123, "énska tewen’niáwe tewáhsen áhsen")+ , (200, "tékeni tewen’niáwe")+ , (300, "áhsen tewen’niáwe")+ , (321, "áhsen tewen’niáwe tewáhsen énska")+ , (400, "kaié:ri tewen’niáwe")+ , (500, "wisk tewen’niáwe")+ , (600, "ià:ia’k tewen’niáwe")+ , (700, "tsá:ta tewen’niáwe")+ , (800, "sha’té:kon tewen’niáwe")+ , (900, "tióhton tewen’niáwe")+ , (909, "tióhton tewen’niáwe tánon tióhton")+ , (990, "tióhton tewen’niáwe tióhton niwáhsen")+ , (999, "tióhton tewen’niáwe tióhton niwáhsen tióhton")+ , (1000, "oié:ri tewen’niáwe")+ , (1001, "oié:ri tewen’niáwe tánon énska")+ , (1008, "oié:ri tewen’niáwe tánon sha’té:kon")+ , (1234, "oié:ri tewen’niáwe tékeni tewen’niáwe áhsen niwáhsen kaié:ri")+ , (2000, "tewáhsen tewen’niáwe")+ , (3000, "áhsen niwáhsen tewen’niáwe")+ , (4000, "kaié:ri niwáhsen tewen’niáwe")+ , (4321, "kaié:ri niwáhsen tewen’niáwe áhsen tewen’niáwe tewáhsen énska")+ , (5000, "wisk niwáhsen tewen’niáwe")+ , (6000, "iá:ia’k niwáhsen tewen’niáwe")+ , (7000, "tsá:ta niwáhsen tewen’niáwe")+ , (8000, "sha’té:kon niwáhsen tewen’niáwe")+ , (9000, "tióhton niwáhsen tewen’niáwe")+ , (10000, "oié:ri oié:ri tewen’niáwe")+ , (12345, "tékeni iawén:re oié:ri tewen’niáwe áhsen tewen’niáwe kaié:ri niwáhsen wisk")+ , (20000, "tewáhsen niwáhsen tewen’niáwe")+ , (30000, "áhsen niwáhsen niwáhsen tewen’niáwe")+ , (40000, "kaié:ri niwáhsen niwáhsen tewen’niáwe")+ , (50000, "wisk niwáhsen niwáhsen tewen’niáwe")+ , (54321, "wisk niwáhsen kaié:ri niwáhsen tewen’niáwe áhsen tewen’niáwe tewáhsen énska")+ , (60000, "iá:ia’k niwáhsen niwáhsen tewen’niáwe")+ , (70000, "tsá:ta niwáhsen niwáhsen tewen’niáwe")+ , (80000, "sha’té:kon niwáhsen niwáhsen tewen’niáwe")+ , (90000, "tióhton niwáhsen niwáhsen tewen’niáwe")+ , (100000, "énska tewen’niáwe oié:ri tewen’niáwe")+ , (123456, "énska tewen’niáwe tewáhsen áhsen niwáhsen tewen’niáwe kaié:ri tewen’niáwe wisk niwáhsen ià:ia’k")+ , (200000, "tékeni tewen’niáwe oié:ri tewen’niáwe")+ , (300000, "áhsen tewen’niáwe oié:ri tewen’niáwe")+ , (400000, "kaié:ri tewen’niáwe oié:ri tewen’niáwe")+ , (500000, "wisk tewen’niáwe oié:ri tewen’niáwe")+ , (600000, "ià:ia’k tewen’niáwe oié:ri tewen’niáwe")+ , (654321, "ià:ia’k tewen’niáwe wisk niwáhsen kaié:ri niwáhsen tewen’niáwe áhsen tewen’niáwe tewáhsen énska")+ , (700000, "tsá:ta tewen’niáwe oié:ri tewen’niáwe")+ , (800000, "sha’té:kon tewen’niáwe oié:ri tewen’niáwe")+ , (900000, "tióhton tewen’niáwe oié:ri tewen’niáwe")+ , (1000000, "énska million")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/NL/TestData.hs view
@@ -0,0 +1,380 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] nl++[@ISO639-2B@] dut++[@ISO639-3@] nld++[@Native name@] Nederlands++[@English name@] Dutch+-}++module Text.Numeral.Language.NL.TestData+ ( cardinals+ , ordinals+ , partitives+ , multiplicatives+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "singular"+ , singular defaultInflection+ , [ (0, "nul")+ , (1, "één")+ , (2, "twee")+ , (3, "drie")+ , (4, "vier")+ , (5, "vijf")+ , (6, "zes")+ , (7, "zeven")+ , (8, "acht")+ , (9, "negen")+ , (10, "tien")+ , (11, "elf")+ , (12, "twaalf")+ , (13, "dertien")+ , (14, "veertien")+ , (15, "vijftien")+ , (16, "zestien")+ , (17, "zeventien")+ , (18, "achtien")+ , (19, "negentien")+ , (20, "twintig")+ , (21, "éénentwintig")+ , (22, "tweeëntwintig")+ , (23, "drieëntwintig")+ , (24, "vierentwintig")+ , (25, "vijfentwintig")+ , (26, "zesentwintig")+ , (27, "zevenentwintig")+ , (28, "achtentwintig")+ , (29, "negenentwintig")+ , (30, "dertig")+ , (31, "éénendertig")+ , (32, "tweeëndertig")+ , (33, "drieëndertig")+ , (34, "vierendertig")+ , (35, "vijfendertig")+ , (36, "zesendertig")+ , (37, "zevenendertig")+ , (38, "achtendertig")+ , (39, "negenendertig")+ , (40, "veertig")+ , (41, "éénenveertig")+ , (42, "tweeënveertig")+ , (43, "drieënveertig")+ , (44, "vierenveertig")+ , (45, "vijfenveertig")+ , (46, "zesenveertig")+ , (47, "zevenenveertig")+ , (48, "achtenveertig")+ , (49, "negenenveertig")+ , (50, "vijftig")+ , (51, "éénenvijftig")+ , (52, "tweeënvijftig")+ , (53, "drieënvijftig")+ , (54, "vierenvijftig")+ , (55, "vijfenvijftig")+ , (56, "zesenvijftig")+ , (57, "zevenenvijftig")+ , (58, "achtenvijftig")+ , (59, "negenenvijftig")+ , (60, "zestig")+ , (61, "éénenzestig")+ , (62, "tweeënzestig")+ , (63, "drieënzestig")+ , (64, "vierenzestig")+ , (65, "vijfenzestig")+ , (66, "zesenzestig")+ , (67, "zevenenzestig")+ , (68, "achtenzestig")+ , (69, "negenenzestig")+ , (70, "zeventig")+ , (71, "éénenzeventig")+ , (72, "tweeënzeventig")+ , (73, "drieënzeventig")+ , (74, "vierenzeventig")+ , (75, "vijfenzeventig")+ , (76, "zesenzeventig")+ , (77, "zevenenzeventig")+ , (78, "achtenzeventig")+ , (79, "negenenzeventig")+ , (80, "tachtig")+ , (81, "éénentachtig")+ , (82, "tweeëntachtig")+ , (83, "drieëntachtig")+ , (84, "vierentachtig")+ , (85, "vijfentachtig")+ , (86, "zesentachtig")+ , (87, "zevenentachtig")+ , (88, "achtentachtig")+ , (89, "negenentachtig")+ , (90, "negentig")+ , (91, "éénennegentig")+ , (92, "tweeënnegentig")+ , (93, "drieënnegentig")+ , (94, "vierennegentig")+ , (95, "vijfennegentig")+ , (96, "zesennegentig")+ , (97, "zevenennegentig")+ , (98, "achtennegentig")+ , (99, "negenennegentig")+ , (100, "honderd")+ , (101, "honderdéén")+ , (108, "honderdacht")+ , (118, "honderdachtien")+ , (115, "honderdvijftien")+ , (500, "vijfhonderd")+ , (999, "negenhonderdnegenennegentig")+ , (1000, "duizend")+ , (1001, "duizendéén")+ , (1008, "duizendacht")+ , (8000, "achtduizend")+ , (900000, "negenhonderdduizend")+ , (dec 6, "miljoen")+ , (dec 9, "miljard")+ , (dec 12, "biljoen")+ , (dec 15, "biljard")+ , (dec 18, "triljoen")+ , (dec 21, "triljard")+ , (dec 24, "quadriljoen")+ , (dec 27, "quadriljard")+ ]+ )+ , ( "plural"+ , plural defaultInflection+ , [ (1, "éénen")+ , (2, "tweeën")+ , (3, "drieën")+ , (4, "vieren")+ , (5, "vijven")+ , (6, "zessen")+ , (7, "zevens")+ , (8, "achten")+ , (9, "negens")+ , (10, "tienen")+ , (11, "elven")+ , (12, "twaalven")+ , (13, "dertiens")+ , (14, "veertiens")+ , (15, "vijftiens")+ , (16, "zestiens")+ , (17, "zeventiens")+ , (18, "achtiens")+ , (19, "negentiens")+ , (20, "twintigs")+ , (100, "honderden")+ , (1000, "duizenden")+ , (dec 6, "miljoenen")+ , (dec 9, "miljarden")+ , (dec 12, "biljoenen")+ , (dec 15, "biljarden")+ ]+ )+ , ( "dative"+ , dative defaultInflection+ , [ (1, "éénen")+ , (2, "tweeën")+ , (3, "drieën")+ , (4, "vieren")+ , (5, "vijven")+ , (6, "zessen")+ , (7, "zevenen")+ , (8, "achten")+ , (9, "negenen")+ , (10, "tienen")+ , (11, "elven")+ , (12, "twaalven")+ , (13, "dertienen")+ , (14, "veertienen")+ , (15, "vijftienen")+ , (16, "zestienen")+ , (17, "zeventienen")+ , (18, "achtienen")+ , (19, "negentienen")+ , (20, "twintigen")+ , (23, "drieëntwintigen")+ , (100, "honderden")+ , (1000, "duizenden")+ , (dec 6, "miljoenen")+ , (dec 9, "miljarden")+ , (dec 12, "biljoenen")+ , (dec 15, "biljarden")+ ]+ )+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "eerste")+ , (2, "tweede")+ , (3, "derde")+ , (4, "vierde")+ , (5, "vijfde")+ , (6, "zesde")+ , (7, "zevende")+ , (8, "achtste")+ , (9, "negende")+ , (10, "tiende")+ , (11, "elfde")+ , (12, "twaalfde")+ , (13, "dertiende")+ , (14, "veertiende")+ , (15, "vijftiende")+ , (16, "zestiende")+ , (17, "zeventiende")+ , (18, "achtiende")+ , (19, "negentiende")+ , (20, "twintigste")+ , (21, "éénentwintigste")+ , (22, "tweeëntwintigste")+ , (23, "drieëntwintigste")+ , (24, "vierentwintigste")+ , (25, "vijfentwintigste")+ , (26, "zesentwintigste")+ , (27, "zevenentwintigste")+ , (28, "achtentwintigste")+ , (29, "negenentwintigste")+ , (30, "dertigste")+ , (31, "éénendertigste")+ , (32, "tweeëndertigste")+ , (33, "drieëndertigste")+ , (34, "vierendertigste")+ , (35, "vijfendertigste")+ , (36, "zesendertigste")+ , (37, "zevenendertigste")+ , (38, "achtendertigste")+ , (39, "negenendertigste")+ , (40, "veertigste")+ , (41, "éénenveertigste")+ , (42, "tweeënveertigste")+ , (43, "drieënveertigste")+ , (44, "vierenveertigste")+ , (45, "vijfenveertigste")+ , (46, "zesenveertigste")+ , (47, "zevenenveertigste")+ , (48, "achtenveertigste")+ , (49, "negenenveertigste")+ , (50, "vijftigste")+ , (51, "éénenvijftigste")+ , (52, "tweeënvijftigste")+ , (53, "drieënvijftigste")+ , (54, "vierenvijftigste")+ , (55, "vijfenvijftigste")+ , (56, "zesenvijftigste")+ , (57, "zevenenvijftigste")+ , (58, "achtenvijftigste")+ , (59, "negenenvijftigste")+ , (60, "zestigste")+ , (61, "éénenzestigste")+ , (62, "tweeënzestigste")+ , (63, "drieënzestigste")+ , (64, "vierenzestigste")+ , (65, "vijfenzestigste")+ , (66, "zesenzestigste")+ , (67, "zevenenzestigste")+ , (68, "achtenzestigste")+ , (69, "negenenzestigste")+ , (70, "zeventigste")+ , (71, "éénenzeventigste")+ , (72, "tweeënzeventigste")+ , (73, "drieënzeventigste")+ , (74, "vierenzeventigste")+ , (75, "vijfenzeventigste")+ , (76, "zesenzeventigste")+ , (77, "zevenenzeventigste")+ , (78, "achtenzeventigste")+ , (79, "negenenzeventigste")+ , (80, "tachtigste")+ , (81, "éénentachtigste")+ , (82, "tweeëntachtigste")+ , (83, "drieëntachtigste")+ , (84, "vierentachtigste")+ , (85, "vijfentachtigste")+ , (86, "zesentachtigste")+ , (87, "zevenentachtigste")+ , (88, "achtentachtigste")+ , (89, "negenentachtigste")+ , (90, "negentigste")+ , (91, "éénennegentigste")+ , (92, "tweeënnegentigste")+ , (93, "drieënnegentigste")+ , (94, "vierennegentigste")+ , (95, "vijfennegentigste")+ , (96, "zesennegentigste")+ , (97, "zevenennegentigste")+ , (98, "achtennegentigste")+ , (99, "negenennegentigste")+ , (100, "honderdste")+ ]+ )+ ]++partitives ∷ (Integral i) ⇒ TestData (i, i)+partitives =+ [ ("singular", singular defaultInflection, testData)+ , ("ignored plural", plural defaultInflection, testData)+ , ("ignored dative", dative defaultInflection, testData)+ ]+ where+ testData =+ [ ((0, 1), "nul éénde")+ , ((1, 1), "één éénde")+ , ((0, 2), "nul tweede")+ , ((1, 2), "één tweede") -- optionally "de helft"+ , ((2, 2), "twee tweede")+ , ((1, 3), "één derde")+ , ((2, 3), "twee derde")+ , ((1, 4), "één vierde") -- optionally "één kwart"+ , ((2, 4), "twee vierde") -- optionally "twee kwart"+ , ((3, 4), "drie vierde") -- optionally "drie kwart"+ , ((4, 4), "vier vierde") -- optionally "vier kwart"+ , ((1, 5), "één vijfde")+ , ((2, 5), "twee vijfde")+ , ((1, 10), "één tiende")+ , ((1, 100), "één honderdste")+ , ((12, 144), "twaalf honderdvierenveertigste")+ , ((-1, 2), "min één tweede")+ , ((2, -3), "twee min derde")+ , ((-3, -5), "min drie min vijfde")+ ]++multiplicatives ∷ (Integral i) ⇒ TestData i+multiplicatives =+ [ ("singular", singular defaultInflection, testData)+ , ("ignored plural", plural defaultInflection, testData)+ , ("ignored dative", dative defaultInflection, testData)+ ]+ where+ testData =+ [ (1, "éénmaal")+ , (2, "tweemaal")+ , (3, "driemaal")+ , (10, "tienmaal")+ ]
+ src-test/Text/Numeral/Language/NO/TestData.hs view
@@ -0,0 +1,170 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] nb++[@ISO639-2B@] nob++[@ISO639-3@] nob++[@Native name@] Bokmål++[@English name@] Norwegian Bokmål+-}++module Text.Numeral.Language.NO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://en.wikibooks.org/wiki/Norwegian_Numbers+-- http://www.sf.airnet.ne.jp/~ts/language/number/norwegian.html++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "null")+ , (1, "én")+ , (2, "to")+ , (3, "tre")+ , (4, "fire")+ , (5, "fem")+ , (6, "seks")+ , (7, "sju")+ , (8, "åtte")+ , (9, "ni")+ , (10, "ti")+ , (11, "elleve")+ , (12, "tolv")+ , (13, "tretten")+ , (14, "fjorten")+ , (15, "femten")+ , (16, "seksten")+ , (17, "sytten")+ , (18, "atten")+ , (19, "nitten")+ , (20, "tjue")+ , (21, "tjueen")+ , (22, "tjueto")+ , (23, "tjuetre")+ , (24, "tjuefire")+ , (25, "tjuefem")+ , (26, "tjueseks")+ , (27, "tjuesju")+ , (28, "tjueåtte")+ , (29, "tjueni")+ , (30, "tretti")+ , (31, "trettien")+ , (32, "trettito")+ , (33, "trettitre")+ , (34, "trettifire")+ , (35, "trettifem")+ , (36, "trettiseks")+ , (37, "trettisju")+ , (38, "trettiåtte")+ , (39, "trettini")+ , (40, "førti")+ , (41, "førtien")+ , (42, "førtito")+ , (43, "førtitre")+ , (44, "førtifire")+ , (45, "førtifem")+ , (46, "førtiseks")+ , (47, "førtisju")+ , (48, "førtiåtte")+ , (49, "førtini")+ , (50, "femti")+ , (51, "femtien")+ , (52, "femtito")+ , (53, "femtitre")+ , (54, "femtifire")+ , (55, "femtifem")+ , (56, "femtiseks")+ , (57, "femtisju")+ , (58, "femtiåtte")+ , (59, "femtini")+ , (60, "seksti")+ , (61, "sekstien")+ , (62, "sekstito")+ , (63, "sekstitre")+ , (64, "sekstifire")+ , (65, "sekstifem")+ , (66, "sekstiseks")+ , (67, "sekstisju")+ , (68, "sekstiåtte")+ , (69, "sekstini")+ , (70, "sytti")+ , (71, "syttien")+ , (72, "syttito")+ , (73, "syttitre")+ , (74, "syttifire")+ , (75, "syttifem")+ , (76, "syttiseks")+ , (77, "syttisju")+ , (78, "syttiåtte")+ , (79, "syttini")+ , (80, "åtti")+ , (81, "åttien")+ , (82, "åttito")+ , (83, "åttitre")+ , (84, "åttifire")+ , (85, "åttifem")+ , (86, "åttiseks")+ , (87, "åttisju")+ , (88, "åttiåtte")+ , (89, "åttini")+ , (90, "nitti")+ , (91, "nittien")+ , (92, "nittito")+ , (93, "nittitre")+ , (94, "nittifire")+ , (95, "nittifem")+ , (96, "nittiseks")+ , (97, "nittisju")+ , (98, "nittiåtte")+ , (99, "nittini")+ , (100, "hundre")+ , (123, "hundre tjuetre")+ , (200, "to hundre")+ , (300, "tre hundre")+ , (400, "fire hundre")+ , (500, "fem hundre")+ , (600, "seks hundre")+ , (700, "sju hundre")+ , (800, "åtte hundre")+ , (900, "ni hundre")+ , (1000, "tusen")+ , (1023, "tusen tjuetre")+ , (2000, "totusen")+ , (3000, "tretusen")+ , (4000, "firetusen")+ , (5000, "femtusen")+ , (6000, "sekstusen")+ , (7000, "sjutusen")+ , (8000, "åttetusen")+ , (9000, "nitusen")+ , (10000, "titusen")+ , (dec 6, "million")+ , (2 ⋅ dec 6, "to millioner")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/NQM/TestData.hs view
@@ -0,0 +1,141 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2B@] -++[@ISO639-3@] nqm++[@Native name@] -++[@English name@] Ndom+-}++module Text.Numeral.Language.NQM.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "sas")+ , (2, "thef")+ , (3, "ithin")+ , (4, "thonith")+ , (5, "meregh")+ , (6, "mer")+ , (7, "mer abo sas")+ , (8, "mer abo thef")+ , (9, "mer abo ithin")+ , (10, "mer abo thonith")+ , (11, "mer abo meregh")+ , (12, "mer an thef")+ , (13, "mer an thef abo sas")+ , (14, "mer an thef abo thef")+ , (15, "mer an thef abo ithin")+ , (16, "mer an thef abo thonith")+ , (17, "mer an thef abo meregh")+ , (18, "tondor")+ , (19, "tondor abo sas")+ , (20, "tondor abo thef")+ , (21, "tondor abo ithin")+ , (22, "tondor abo thonith")+ , (23, "tondor abo meregh")+ , (24, "tondor abo mer")+ , (25, "tondor abo mer abo sas")+ , (26, "tondor abo mer abo thef")+ , (27, "tondor abo mer abo ithin")+ , (28, "tondor abo mer abo thonith")+ , (29, "tondor abo mer abo meregh")+ , (30, "tondor abo mer an thef")+ , (31, "tondor abo mer an thef abo sas")+ , (32, "tondor abo mer an thef abo thef")+ , (33, "tondor abo mer an thef abo ithin")+ , (34, "tondor abo mer an thef abo thonith")+ , (35, "tondor abo mer an thef abo meregh")+ , (36, "nif")+ , (37, "nif abo sas")+ , (38, "nif abo thef")+ , (39, "nif abo ithin")+ , (40, "nif abo thonith")+ , (41, "nif abo meregh")+ , (42, "nif abo mer")+ , (43, "nif abo mer abo sas")+ , (44, "nif abo mer abo thef")+ , (45, "nif abo mer abo ithin")+ , (46, "nif abo mer abo thonith")+ , (47, "nif abo mer abo meregh")+ , (48, "nif abo mer an thef")+ , (49, "nif abo mer an thef abo sas")+ , (50, "nif abo mer an thef abo thef")+ , (51, "nif abo mer an thef abo ithin")+ , (52, "nif abo mer an thef abo thonith")+ , (53, "nif abo mer an thef abo meregh")+ , (54, "nif abo tondor")+ , (55, "nif abo tondor abo sas")+ , (56, "nif abo tondor abo thef")+ , (57, "nif abo tondor abo ithin")+ , (58, "nif abo tondor abo thonith")+ , (59, "nif abo tondor abo meregh")+ , (60, "nif abo tondor abo mer")+ , (61, "nif abo tondor abo mer abo sas")+ , (62, "nif abo tondor abo mer abo thef")+ , (63, "nif abo tondor abo mer abo ithin")+ , (64, "nif abo tondor abo mer abo thonith")+ , (65, "nif abo tondor abo mer abo meregh")+ , (66, "nif abo tondor abo mer an thef")+ , (67, "nif abo tondor abo mer an thef abo sas")+ , (68, "nif abo tondor abo mer an thef abo thef")+ , (69, "nif abo tondor abo mer an thef abo ithin")+ , (70, "nif abo tondor abo mer an thef abo thonith")+ , (71, "nif abo tondor abo mer an thef abo meregh")+ , (72, "nif thef")+ , (73, "nif thef abo sas")+ , (74, "nif thef abo thef")+ , (75, "nif thef abo ithin")+ , (76, "nif thef abo thonith")+ , (77, "nif thef abo meregh")+ , (78, "nif thef abo mer")+ , (79, "nif thef abo mer abo sas")+ , (80, "nif thef abo mer abo thef")+ , (81, "nif thef abo mer abo ithin")+ , (82, "nif thef abo mer abo thonith")+ , (83, "nif thef abo mer abo meregh")+ , (84, "nif thef abo mer an thef")+ , (85, "nif thef abo mer an thef abo sas")+ , (86, "nif thef abo mer an thef abo thef")+ , (87, "nif thef abo mer an thef abo ithin")+ , (88, "nif thef abo mer an thef abo thonith")+ , (89, "nif thef abo mer an thef abo meregh")+ , (90, "nif thef abo tondor")+ , (91, "nif thef abo tondor abo sas")+ , (92, "nif thef abo tondor abo thef")+ , (93, "nif thef abo tondor abo ithin")+ , (94, "nif thef abo tondor abo thonith")+ , (95, "nif thef abo tondor abo meregh")+ , (96, "nif thef abo tondor abo mer")+ , (97, "nif thef abo tondor abo mer abo sas")+ , (98, "nif thef abo tondor abo mer abo thef")+ , (99, "nif thef abo tondor abo mer abo ithin")+ , (100, "nif thef abo tondor abo mer abo thonith")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/OJ/TestData.hs view
@@ -0,0 +1,159 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] oj++[@ISO639-2@] oji++[@ISO639-3@] oji++[@Native name@] ᐊᓂᔑᓈᐯᒧᐎᓐ (Anishinaabemowin)++[@English name@] Ojibwe+-}++module Text.Numeral.Language.OJ.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.sf.airnet.ne.jp/~ts/language/number/ojibwa.html+ http://www.languagesandnumbers.com/how-to-count-in-ojibwa/en/oji/+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "kaagego")+ , (1, "bezhik")+ , (2, "niizh")+ , (3, "nswi")+ , (4, "niiwin")+ , (5, "naanan")+ , (6, "ngodwaaswi")+ , (7, "niizhwaaswi")+ , (8, "nshwaaswi")+ , (9, "zhaangswi")+ , (10, "mdaaswi")+ , (11, "mdaaswi shaa bezhik")+ , (12, "mdaaswi shaa niizh")+ , (13, "mdaaswi shaa nswi")+ , (14, "mdaaswi shaa niiwin")+ , (15, "mdaaswi shaa naanan")+ , (16, "mdaaswi shaa ngodwaaswi")+ , (17, "mdaaswi shaa niizhwaaswi")+ , (18, "mdaaswi shaa nshwaaswi")+ , (19, "mdaaswi shaa zhaangswi")+ , (20, "niizhtaana")+ , (21, "niizhtaana shaa bezhik")+ , (22, "niizhtaana shaa niizh")+ , (23, "niizhtaana shaa nswi")+ , (24, "niizhtaana shaa niiwin")+ , (25, "niizhtaana shaa naanan")+ , (26, "niizhtaana shaa ngodwaaswi")+ , (27, "niizhtaana shaa niizhwaaswi")+ , (28, "niizhtaana shaa nshwaaswi")+ , (29, "niizhtaana shaa zhaangswi")+ , (30, "nsimtaana")+ , (31, "nsimtaana shaa bezhik")+ , (32, "nsimtaana shaa niizh")+ , (33, "nsimtaana shaa nswi")+ , (34, "nsimtaana shaa niiwin")+ , (35, "nsimtaana shaa naanan")+ , (36, "nsimtaana shaa ngodwaaswi")+ , (37, "nsimtaana shaa niizhwaaswi")+ , (38, "nsimtaana shaa nshwaaswi")+ , (39, "nsimtaana shaa zhaangswi")+ , (40, "niimtaana")+ , (41, "niimtaana shaa bezhik")+ , (42, "niimtaana shaa niizh")+ , (43, "niimtaana shaa nswi")+ , (44, "niimtaana shaa niiwin")+ , (45, "niimtaana shaa naanan")+ , (46, "niimtaana shaa ngodwaaswi")+ , (47, "niimtaana shaa niizhwaaswi")+ , (48, "niimtaana shaa nshwaaswi")+ , (49, "niimtaana shaa zhaangswi")+ , (50, "naanmitaana")+ , (51, "naanmitaana shaa bezhik")+ , (52, "naanmitaana shaa niizh")+ , (53, "naanmitaana shaa nswi")+ , (54, "naanmitaana shaa niiwin")+ , (55, "naanmitaana shaa naanan")+ , (56, "naanmitaana shaa ngodwaaswi")+ , (57, "naanmitaana shaa niizhwaaswi")+ , (58, "naanmitaana shaa nshwaaswi")+ , (59, "naanmitaana shaa zhaangswi")+ , (60, "ngodwaasmitaana")+ , (61, "ngodwaasmitaana shaa bezhik")+ , (62, "ngodwaasmitaana shaa niizh")+ , (63, "ngodwaasmitaana shaa nswi")+ , (64, "ngodwaasmitaana shaa niiwin")+ , (65, "ngodwaasmitaana shaa naanan")+ , (66, "ngodwaasmitaana shaa ngodwaaswi")+ , (67, "ngodwaasmitaana shaa niizhwaaswi")+ , (68, "ngodwaasmitaana shaa nshwaaswi")+ , (69, "ngodwaasmitaana shaa zhaangswi")+ , (70, "niizhwaasmitaana")+ , (71, "niizhwaasmitaana shaa bezhik")+ , (72, "niizhwaasmitaana shaa niizh")+ , (73, "niizhwaasmitaana shaa nswi")+ , (74, "niizhwaasmitaana shaa niiwin")+ , (75, "niizhwaasmitaana shaa naanan")+ , (76, "niizhwaasmitaana shaa ngodwaaswi")+ , (77, "niizhwaasmitaana shaa niizhwaaswi")+ , (78, "niizhwaasmitaana shaa nshwaaswi")+ , (79, "niizhwaasmitaana shaa zhaangswi")+ , (80, "nshwaasmitaana")+ , (81, "nshwaasmitaana shaa bezhik")+ , (82, "nshwaasmitaana shaa niizh")+ , (83, "nshwaasmitaana shaa nswi")+ , (84, "nshwaasmitaana shaa niiwin")+ , (85, "nshwaasmitaana shaa naanan")+ , (86, "nshwaasmitaana shaa ngodwaaswi")+ , (87, "nshwaasmitaana shaa niizhwaaswi")+ , (88, "nshwaasmitaana shaa nshwaaswi")+ , (89, "nshwaasmitaana shaa zhaangswi")+ , (90, "zhaangsmitaana")+ , (91, "zhaangsmitaana shaa bezhik")+ , (92, "zhaangsmitaana shaa niizh")+ , (93, "zhaangsmitaana shaa nswi")+ , (94, "zhaangsmitaana shaa niiwin")+ , (95, "zhaangsmitaana shaa naanan")+ , (96, "zhaangsmitaana shaa ngodwaaswi")+ , (97, "zhaangsmitaana shaa niizhwaaswi")+ , (98, "zhaangsmitaana shaa nshwaaswi")+ , (99, "zhaangsmitaana shaa zhaangswi")+ , (100, "ngodwaak")+ , (200, "niizhwaak")+ , (300, "nswaak")+ , (400, "niiwaak")+ , (448, "niiwaak shaa niimtaana shaa nshwaaswi")+ , (500, "naanwaak")+ , (600, "ngodwaaswaak")+ , (700, "niizhwaaswaak")+ , (800, "nshwaaswaak")+ , (900, "zhaangswaak")+ , (1000, "mdaaswaak")+ , (1222, "mdaaswaak shaa niizhwaak shaa niizhtaana shaa niizh")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/PAA/TestData.hs view
@@ -0,0 +1,140 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2B@] paa++[@ISO639-3@] hui++[@Native name@] -++[@English name@] Huli+-}++module Text.Numeral.Language.PAA.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "mbira")+ , (2, "kira")+ , (3, "tebira")+ , (4, "maria")+ , (5, "duria")+ , (6, "waragaria")+ , (7, "karia")+ , (8, "halira")+ , (9, "dira")+ , (10, "pira")+ , (11, "bearia")+ , (12, "hombearia")+ , (13, "haleria")+ , (14, "deria")+ , (15, "nguira")+ , (16, "nguira-ni mbira")+ , (17, "nguira-ni kira")+ , (18, "nguira-ni tebira")+ , (19, "nguira-ni maria")+ , (20, "nguira-ni duria")+ , (21, "nguira-ni waragaria")+ , (22, "nguira-ni karia")+ , (23, "nguira-ni halira")+ , (24, "nguira-ni dira")+ , (25, "nguira-ni pira")+ , (26, "nguira-ni bearia")+ , (27, "nguira-ni hombearia")+ , (28, "nguira-ni haleria")+ , (29, "nguira-ni deria")+ , (30, "ngui ki")+ , (31, "ngui ki, ngui tebone-gonaga mbira")+ , (32, "ngui ki, ngui tebone-gonaga kira")+ , (33, "ngui ki, ngui tebone-gonaga tebira")+ , (34, "ngui ki, ngui tebone-gonaga maria")+ , (35, "ngui ki, ngui tebone-gonaga duria")+ , (36, "ngui ki, ngui tebone-gonaga waragaria")+ , (37, "ngui ki, ngui tebone-gonaga karia")+ , (38, "ngui ki, ngui tebone-gonaga halira")+ , (39, "ngui ki, ngui tebone-gonaga dira")+ , (40, "ngui ki, ngui tebone-gonaga pira")+ , (41, "ngui ki, ngui tebone-gonaga bearia")+ , (42, "ngui ki, ngui tebone-gonaga hombearia")+ , (43, "ngui ki, ngui tebone-gonaga haleria")+ , (44, "ngui ki, ngui tebone-gonaga deria")+ , (45, "ngui tebo")+ , (46, "ngui tebo, ngui mane-gonaga mbira")+ , (47, "ngui tebo, ngui mane-gonaga kira")+ , (48, "ngui tebo, ngui mane-gonaga tebira")+ , (49, "ngui tebo, ngui mane-gonaga maria")+ , (50, "ngui tebo, ngui mane-gonaga duria")+ , (51, "ngui tebo, ngui mane-gonaga waragaria")+ , (52, "ngui tebo, ngui mane-gonaga karia")+ , (53, "ngui tebo, ngui mane-gonaga halira")+ , (54, "ngui tebo, ngui mane-gonaga dira")+ , (55, "ngui tebo, ngui mane-gonaga pira")+ , (56, "ngui tebo, ngui mane-gonaga bearia")+ , (57, "ngui tebo, ngui mane-gonaga hombearia")+ , (58, "ngui tebo, ngui mane-gonaga haleria")+ , (59, "ngui tebo, ngui mane-gonaga deria")+ , (60, "ngui ma")+ , (61, "ngui ma, ngui dauni-gonaga mbira")+ , (62, "ngui ma, ngui dauni-gonaga kira")+ , (63, "ngui ma, ngui dauni-gonaga tebira")+ , (64, "ngui ma, ngui dauni-gonaga maria")+ , (65, "ngui ma, ngui dauni-gonaga duria")+ , (66, "ngui ma, ngui dauni-gonaga waragaria")+ , (67, "ngui ma, ngui dauni-gonaga karia")+ , (68, "ngui ma, ngui dauni-gonaga halira")+ , (69, "ngui ma, ngui dauni-gonaga dira")+ , (70, "ngui ma, ngui dauni-gonaga pira")+ , (71, "ngui ma, ngui dauni-gonaga bearia")+ , (72, "ngui ma, ngui dauni-gonaga hombearia")+ , (73, "ngui ma, ngui dauni-gonaga haleria")+ , (74, "ngui ma, ngui dauni-gonaga deria")+ , (75, "ngui dau")+ , (76, "ngui dau, ngui waragane-gonaga mbira")+ , (77, "ngui dau, ngui waragane-gonaga kira")+ , (78, "ngui dau, ngui waragane-gonaga tebira")+ , (79, "ngui dau, ngui waragane-gonaga maria")+ , (80, "ngui dau, ngui waragane-gonaga duria")+ , (81, "ngui dau, ngui waragane-gonaga waragaria")+ , (82, "ngui dau, ngui waragane-gonaga karia")+ , (83, "ngui dau, ngui waragane-gonaga halira")+ , (84, "ngui dau, ngui waragane-gonaga dira")+ , (85, "ngui dau, ngui waragane-gonaga pira")+ , (86, "ngui dau, ngui waragane-gonaga bearia")+ , (87, "ngui dau, ngui waragane-gonaga hombearia")+ , (88, "ngui dau, ngui waragane-gonaga haleria")+ , (89, "ngui dau, ngui waragane-gonaga deria")+ , (90, "ngui waraga")+ , (91, "ngui waraga, ngui kane-gonaga mbira")+ , (92, "ngui waraga, ngui kane-gonaga kira")+ , (93, "ngui waraga, ngui kane-gonaga tebira")+ , (94, "ngui waraga, ngui kane-gonaga maria")+ , (95, "ngui waraga, ngui kane-gonaga duria")+ , (96, "ngui waraga, ngui kane-gonaga waragaria")+ , (97, "ngui waraga, ngui kane-gonaga karia")+ , (98, "ngui waraga, ngui kane-gonaga halira")+ , (99, "ngui waraga, ngui kane-gonaga dira")+ , (100, "ngui waraga, ngui kane-gonaga pira")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/PDC/TestData.hs view
@@ -0,0 +1,170 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-3@] pdc++[@Native name@] Pennsilfaanisch Deitsch++[@English name@] Pennsylvania German+-}++module Text.Numeral.Language.PDC.TestData (cardinals) where++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-pennsylvania-german/en/pdc/+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "null")+ , (1, "eens")+ , (2, "zwee")+ , (3, "drei")+ , (4, "vier")+ , (5, "fimf")+ , (6, "sex")+ , (7, "siwwe")+ , (8, "acht")+ , (9, "nein")+ , (10, "zehe")+ , (11, "elf")+ , (12, "zwelf")+ , (13, "dreizeh")+ , (14, "vazeh")+ , (15, "fuffzeh")+ , (16, "sechzeh")+ , (17, "siwwezeh")+ , (18, "achtzeh")+ , (19, "neinzeh")+ , (20, "zwansich")+ , (21, "eenunzwansich")+ , (22, "zweeunzwansich")+ , (23, "dreiunzwansich")+ , (24, "vierunzwansich")+ , (25, "fimfunzwansich")+ , (26, "sexunzwansich")+ , (27, "siwweunzwansich")+ , (28, "achtunzwansich")+ , (29, "neinunzwansich")+ , (30, "dreissich")+ , (31, "eenundreissich")+ , (32, "zweeundreissich")+ , (33, "dreiundreissich")+ , (34, "vierundreissich")+ , (35, "fimfundreissich")+ , (36, "sexundreissich")+ , (37, "siwweundreissich")+ , (38, "achtundreissich")+ , (39, "neinundreissich")+ , (40, "vazich")+ , (41, "eenunvazich")+ , (42, "zweeunvazich")+ , (43, "dreiunvazich")+ , (44, "vierunvazich")+ , (45, "fimfunvazich")+ , (46, "sexunvazich")+ , (47, "siwweunvazich")+ , (48, "achtunvazich")+ , (49, "neinunvazich")+ , (50, "fuffzich")+ , (51, "eenunfuffzich")+ , (52, "zweeunfuffzich")+ , (53, "dreiunfuffzich")+ , (54, "vierunfuffzich")+ , (55, "fimfunfuffzich")+ , (56, "sexunfuffzich")+ , (57, "siwweunfuffzich")+ , (58, "achtunfuffzich")+ , (59, "neinunfuffzich")+ , (60, "sechzich")+ , (61, "eenunsechzich")+ , (62, "zweeunsechzich")+ , (63, "dreiunsechzich")+ , (64, "vierunsechzich")+ , (65, "fimfunsechzich")+ , (66, "sexunsechzich")+ , (67, "siwweunsechzich")+ , (68, "achtunsechzich")+ , (69, "neinunsechzich")+ , (70, "siwwezich")+ , (71, "eenunsiwwezich")+ , (72, "zweeunsiwwezich")+ , (73, "dreiunsiwwezich")+ , (74, "vierunsiwwezich")+ , (75, "fimfunsiwwezich")+ , (76, "sexunsiwwezich")+ , (77, "siwweunsiwwezich")+ , (78, "achtunsiwwezich")+ , (79, "neinunsiwwezich")+ , (80, "achtzich")+ , (81, "eenunachtzich")+ , (82, "zweeunachtzich")+ , (83, "dreiunachtzich")+ , (84, "vierunachtzich")+ , (85, "fimfunachtzich")+ , (86, "sexunachtzich")+ , (87, "siwweunachtzich")+ , (88, "achtunachtzich")+ , (89, "neinunachtzich")+ , (90, "neinzich")+ , (91, "eenunneinzich")+ , (92, "zweeunneinzich")+ , (93, "dreiunneinzich")+ , (94, "vierunneinzich")+ , (95, "fimfunneinzich")+ , (96, "sexunneinzich")+ , (97, "siwweunneinzich")+ , (98, "achtunneinzich")+ , (99, "neinunneinzich")+ , (100, "en hunnert")+ , (101, "en hunnert un eens")+ , (107, "en hunnert un siwwe")+ , (199, "en hunnert neinunneinzich")+ , (200, "zwee hunnert")+ , (201, "zwee hunnert un eens")+ , (207, "zwee hunnert un siwwe")+ , (909, "nein hunnert un nein")+ , (990, "nein hunnert neinzich")+ , (999, "nein hunnert neinunneinzich")+ , (1000, "en dausend")+ , (1001, "en dausend eens")+ , (1024, "en dausend vierunzwansich")+ , (1979, "en dausend nein hunnert neinunsiwwezich")+ , (2048, "zwee dausend achtunvazich")+ , (3000, "drei dausend")+ , (4000, "vier dausend")+ , (4096, "vier dausend sexunneinzich")+ , (8192, "acht dausend en hunnert zweeunneinzich")+ , (16384, "sechzeh dausend drei hunnert vierunachtzich")+ , (32768, "zweeundreissich dausend siwwe hunnert achtunsechzich")+ , (65536, "fimfunsechzich dausend fimf hunnert sexundreissich")+ , (131072, "en hunnert eenundreissich dausend zweeunsiwwezich")+ , (262144, "zwee hunnert zweeunsechzich dausend en hunnert vierunvazich")+ , (524288, "fimf hunnert vierunzwansich dausend zwee hunnert achtunachtzich")+ , (dec 6, "en millyon")+ , (1048576, "en millyon achtunvazich dausend fimf hunnert sexunsiwwezich")+ , (5 ⋅ dec 6, "fimf millyon")+ , (123456789, "en hunnert dreiunzwansich millyon vier hunnert sexunfuffzich dausend siwwe hunnert neinunachtzich")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/PL/TestData.hs view
@@ -0,0 +1,204 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] pl++[@ISO639-2@] pol++[@ISO639-3@] pol++[@Native name@] język polski++[@English name@] Polish+-}++module Text.Numeral.Language.PL.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- Krzysztof Skrzętnicki+-- http://www.polishforums.com/archives/2009/general-language-17/numbers-polish-language-6722/++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "zero")+ , (1, "jeden")+ , (2, "dwa")+ , (3, "trzy")+ , (4, "cztery")+ , (5, "pięć")+ , (6, "sześć")+ , (7, "siedem")+ , (8, "osiem")+ , (9, "dziewięć")+ , (10, "dziesięć")+ , (11, "jedenaście")+ , (12, "dwanaście")+ , (13, "trzynaście")+ , (14, "czternaście")+ , (15, "piętnaście")+ , (16, "szesnaście")+ , (17, "siedemnaście")+ , (18, "osiemnaście")+ , (19, "dziewiętnaście")+ , (20, "dwadzieścia")+ , (21, "dwadzieścia jeden")+ , (22, "dwadzieścia dwa")+ , (23, "dwadzieścia trzy")+ , (24, "dwadzieścia cztery")+ , (25, "dwadzieścia pięć")+ , (26, "dwadzieścia sześć")+ , (27, "dwadzieścia siedem")+ , (28, "dwadzieścia osiem")+ , (29, "dwadzieścia dziewięć")+ , (30, "trzydzieści")+ , (31, "trzydzieści jeden")+ , (32, "trzydzieści dwa")+ , (33, "trzydzieści trzy")+ , (34, "trzydzieści cztery")+ , (35, "trzydzieści pięć")+ , (36, "trzydzieści sześć")+ , (37, "trzydzieści siedem")+ , (38, "trzydzieści osiem")+ , (39, "trzydzieści dziewięć")+ , (40, "czterdzieści")+ , (41, "czterdzieści jeden")+ , (42, "czterdzieści dwa")+ , (43, "czterdzieści trzy")+ , (44, "czterdzieści cztery")+ , (45, "czterdzieści pięć")+ , (46, "czterdzieści sześć")+ , (47, "czterdzieści siedem")+ , (48, "czterdzieści osiem")+ , (49, "czterdzieści dziewięć")+ , (50, "pięćdziesiąt")+ , (51, "pięćdziesiąt jeden")+ , (52, "pięćdziesiąt dwa")+ , (53, "pięćdziesiąt trzy")+ , (54, "pięćdziesiąt cztery")+ , (55, "pięćdziesiąt pięć")+ , (56, "pięćdziesiąt sześć")+ , (57, "pięćdziesiąt siedem")+ , (58, "pięćdziesiąt osiem")+ , (59, "pięćdziesiąt dziewięć")+ , (60, "sześćdziesiąt")+ , (61, "sześćdziesiąt jeden")+ , (62, "sześćdziesiąt dwa")+ , (63, "sześćdziesiąt trzy")+ , (64, "sześćdziesiąt cztery")+ , (65, "sześćdziesiąt pięć")+ , (66, "sześćdziesiąt sześć")+ , (67, "sześćdziesiąt siedem")+ , (68, "sześćdziesiąt osiem")+ , (69, "sześćdziesiąt dziewięć")+ , (70, "siedemdziesiąt")+ , (71, "siedemdziesiąt jeden")+ , (72, "siedemdziesiąt dwa")+ , (73, "siedemdziesiąt trzy")+ , (74, "siedemdziesiąt cztery")+ , (75, "siedemdziesiąt pięć")+ , (76, "siedemdziesiąt sześć")+ , (77, "siedemdziesiąt siedem")+ , (78, "siedemdziesiąt osiem")+ , (79, "siedemdziesiąt dziewięć")+ , (80, "osiemdziesiąt")+ , (81, "osiemdziesiąt jeden")+ , (82, "osiemdziesiąt dwa")+ , (83, "osiemdziesiąt trzy")+ , (84, "osiemdziesiąt cztery")+ , (85, "osiemdziesiąt pięć")+ , (86, "osiemdziesiąt sześć")+ , (87, "osiemdziesiąt siedem")+ , (88, "osiemdziesiąt osiem")+ , (89, "osiemdziesiąt dziewięć")+ , (90, "dziewięćdziesiąt")+ , (91, "dziewięćdziesiąt jeden")+ , (92, "dziewięćdziesiąt dwa")+ , (93, "dziewięćdziesiąt trzy")+ , (94, "dziewięćdziesiąt cztery")+ , (95, "dziewięćdziesiąt pięć")+ , (96, "dziewięćdziesiąt sześć")+ , (97, "dziewięćdziesiąt siedem")+ , (98, "dziewięćdziesiąt osiem")+ , (99, "dziewięćdziesiąt dziewięć")+ , (100, "sto")+ , (101, "sto jeden")+ , (110, "sto dziesięć")+ , (111, "sto jedenaście")+ , (120, "sto dwadzieścia")+ , (121, "sto dwadzieścia jeden")+ , (144, "sto czterdzieści cztery")+ , (200, "dwieście")+ , (300, "trzysta")+ , (400, "czterysta")+ , (500, "pięćset")+ , (600, "sześćset")+ , (700, "siedemset")+ , (777, "siedemset siedemdziesiąt siedem")+ , (800, "osiemset")+ , (900, "dziewięćset")+ , (1000, "tysiąc")+ , (1001, "tysiąc jeden")+ , (1010, "tysiąc dziesięć")+ , (1011, "tysiąc jedenaście")+ , (1024, "tysiąc dwadzieścia cztery")+ , (1100, "tysiąc sto")+ , (1728, "tysiąc siedemset dwadzieścia osiem")+ , (2000, "dwa tysiące")+ , (3000, "trzy tysiące")+ , (4000, "cztery tysiące")+ , (5000, "pięć tysięcy")+ , (6000, "sześć tysięcy")+ , (7000, "siedem tysięcy")+ , (8000, "osiem tysięcy")+ , (9000, "dziewięć tysięcy")+ , (10000, "dziesięć tysięcy")+ , (100000, "sto tysięcy")+ , (500000, "pięćset tysięcy")+ , (1000000, "milion")+ , (1048576, "milion czterdzieści osiem tysięcy pięćset siedemdziesiąt sześć")+ , (2 ⋅ dec 6, "dwa miliony")+ , (3 ⋅ dec 6, "trzy miliony")+ , (4 ⋅ dec 6, "cztery miliony")+ , (5 ⋅ dec 6, "pięć milionów")+ , (6 ⋅ dec 6, "sześć milionów")+ , (7 ⋅ dec 6, "siedem milionów")+ , (8 ⋅ dec 6, "osiem milionów")+ , (9 ⋅ dec 6, "dziewięć milionów")+ , (dec 7, "dziesięć milionów")+ , (dec 8, "sto milionów")+ , (dec 9, "miliard")+ , (2 ⋅ dec 9, "dwa miliardy")+ , (3 ⋅ dec 9, "trzy miliardy")+ , (4 ⋅ dec 9, "cztery miliardy")+ , (5 ⋅ dec 9, "pięć miliardów")+ , (6 ⋅ dec 9, "sześć miliardów")+ , (7 ⋅ dec 9, "siedem miliardów")+ , (8 ⋅ dec 9, "osiem miliardów")+ , (9 ⋅ dec 9, "dziewięć miliardów")+ , (dec 10, "dziesięć miliardów")+ , (dec 11, "sto miliardów")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/PT/TestData.hs view
@@ -0,0 +1,302 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] pt++[@ISO639-2@] por++[@ISO639-3@] por++[@Native name@] Português++[@English name@] Portuguese+-}++module Text.Numeral.Language.PT.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Control.Arrow ( second )+import "base" Data.List ( map )+import "base" Prelude ( Integral )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://www.sonia-portuguese.com/text/numerals.htm+-- http://www.smartphrase.com/Portuguese/po_numbers_voc.shtml++base_cardinals ∷ (Integral i) ⇒ [(i, Text)]+base_cardinals =+ [ (0, "zero")+ , (3, "três")+ , (4, "quatro")+ , (5, "cinco")+ , (6, "seis")+ , (7, "sete")+ , (8, "oito")+ , (9, "nove")+ , (10, "dez")+ , (11, "onze")+ , (12, "doze")+ , (13, "treze")+ , (14, "catorze")+ , (15, "quinze")+ , (16, "dezasseis")+ , (17, "dezassete")+ , (18, "dezoito")+ , (19, "dezanove")+ , (20, "vinte")+ , (23, "vinte e três")+ , (24, "vinte e quatro")+ , (25, "vinte e cinco")+ , (26, "vinte e seis")+ , (27, "vinte e sete")+ , (28, "vinte e oito")+ , (29, "vinte e nove")+ , (30, "trinta")+ , (33, "trinta e três")+ , (34, "trinta e quatro")+ , (35, "trinta e cinco")+ , (36, "trinta e seis")+ , (37, "trinta e sete")+ , (38, "trinta e oito")+ , (39, "trinta e nove")+ , (40, "quarenta")+ , (43, "quarenta e três")+ , (44, "quarenta e quatro")+ , (45, "quarenta e cinco")+ , (46, "quarenta e seis")+ , (47, "quarenta e sete")+ , (48, "quarenta e oito")+ , (49, "quarenta e nove")+ , (50, "cinquenta")+ , (53, "cinquenta e três")+ , (54, "cinquenta e quatro")+ , (55, "cinquenta e cinco")+ , (56, "cinquenta e seis")+ , (57, "cinquenta e sete")+ , (58, "cinquenta e oito")+ , (59, "cinquenta e nove")+ , (60, "sessenta")+ , (63, "sessenta e três")+ , (64, "sessenta e quatro")+ , (65, "sessenta e cinco")+ , (66, "sessenta e seis")+ , (67, "sessenta e sete")+ , (68, "sessenta e oito")+ , (69, "sessenta e nove")+ , (70, "setenta")+ , (73, "setenta e três")+ , (74, "setenta e quatro")+ , (75, "setenta e cinco")+ , (76, "setenta e seis")+ , (77, "setenta e sete")+ , (78, "setenta e oito")+ , (79, "setenta e nove")+ , (80, "oitenta")+ , (83, "oitenta e três")+ , (84, "oitenta e quatro")+ , (85, "oitenta e cinco")+ , (86, "oitenta e seis")+ , (87, "oitenta e sete")+ , (88, "oitenta e oito")+ , (89, "oitenta e nove")+ , (90, "noventa")+ , (93, "noventa e três")+ , (94, "noventa e quatro")+ , (95, "noventa e cinco")+ , (96, "noventa e seis")+ , (97, "noventa e sete")+ , (98, "noventa e oito")+ , (99, "noventa e nove")+ , (100, "cem")+ , (105, "cento e cinco")+ , (125, "cento e vinte e cinco")+ , (138, "cento e trinta e oito")+ , (199, "cento e noventa e nove")+ , (1000, "mil")+ , (1008, "mil e oito")+ , (1985, "mil novecentos e oitenta e cinco")+ , (3000, "três mil")+ , (10000, "dez mil")+ , (100000, "cem mil")+ , (125000, "cento e vinte e cinco mil")+ , (735346, "setecentos e trinta e cinco mil trezentos e quarenta e seis")+ , (dec 6, "um milhão")+ , (2 ⋅ dec 6, "dois milhões")+ , (dec 7, "dez milhões")+ , (dec 9, "um bilhão")+ , (dec 10, "dez bilhões")+ , (dec 12, "um trilhão")+ , (dec 13, "dez trilhões")+ , (dec 15, "um quatrilhão")+ , (dec 18, "um quintilhão")+ , (dec 21, "um sextilhão")+ , (dec 24, "um septilhão")+ , (dec 27, "um octilhão")+ , (dec 30, "um nonilhão")+ , (dec 33, "um decilhão")+ , (dec 36, "um undecilhão")+ , (dec 39, "um duodecilhão")+ , (dec 42, "um tredecilhão")+ , (dec 100, "dez duotrigintilhões")+ ]++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "masculine"+ , masculine defaultInflection+ , base_cardinals+ ⊕ [ (1, "um")+ , (2, "dois")+ , (21, "vinte e um")+ , (22, "vinte e dois")+ , (31, "trinta e um")+ , (32, "trinta e dois")+ , (41, "quarenta e um")+ , (42, "quarenta e dois")+ , (51, "cinquenta e um")+ , (52, "cinquenta e dois")+ , (61, "sessenta e um")+ , (62, "sessenta e dois")+ , (71, "setenta e um")+ , (72, "setenta e dois")+ , (81, "oitenta e um")+ , (82, "oitenta e dois")+ , (91, "noventa e um")+ , (92, "noventa e dois")+ , (101, "cento e um")+ , (200, "duzentos")+ , (234, "duzentos e trinta e quatro")+ , (250, "duzentos e cinquenta")+ , (300, "trezentos")+ , (330, "trezentos e trinta")+ , (375, "trezentos e setenta e cinco")+ , (400, "quatrocentos")+ , (467, "quatrocentos e sessenta e sete")+ , (500, "quinhentos")+ , (600, "seiscentos")+ , (700, "setecentos")+ , (800, "oitocentos")+ , (900, "novecentos")+ , (2000, "dois mil")+ , (200000, "duzentos mil")+ , (500000, "quinhentos mil")+ , (100001, "cem mil e um")+ , (101000, "cento e um mil")+ , (1537469, "um milhão quinhentos e trinta e sete mil quatrocentos e sessenta e nove")+ ]+ )+ , ( "feminine"+ , feminine defaultInflection+ , base_cardinals+ ⊕ [ (1, "uma")+ , (2, "duas")+ , (21, "vinte e uma")+ , (22, "vinte e duas")+ , (31, "trinta e uma")+ , (32, "trinta e duas")+ , (41, "quarenta e uma")+ , (42, "quarenta e duas")+ , (51, "cinquenta e uma")+ , (52, "cinquenta e duas")+ , (61, "sessenta e uma")+ , (62, "sessenta e duas")+ , (71, "setenta e uma")+ , (72, "setenta e duas")+ , (81, "oitenta e uma")+ , (82, "oitenta e duas")+ , (91, "noventa e uma")+ , (92, "noventa e duas")+ , (101, "cento e uma")+ , (200, "duzentas")+ , (234, "duzentas e trinta e quatro")+ , (250, "duzentas e cinquenta")+ , (300, "trezentas")+ , (330, "trezentas e trinta")+ , (375, "trezentas e setenta e cinco")+ , (400, "quatrocentas")+ , (467, "quatrocentas e sessenta e sete")+ , (500, "quinhentas")+ , (600, "seiscentas")+ , (700, "setecentas")+ , (800, "oitocentas")+ , (900, "novecentas")+ , (2000, "duas mil")+ , (200000, "duzentas mil")+ , (500000, "quinhentas mil")+ , (100001, "cem mil e uma")+ , (101000, "cento e uma mil")+ , (1537469, "um milhão quinhentas e trinta e sete mil quatrocentas e sessenta e nove")+ ]+ )+ ]++-- These are the base forms of the ordinals, stripped of their+-- ending. Append "o", "os", "a" or "as" to form combinations of+-- masculine, feminine, singular and plural ordinals.+base_ordinals ∷ (Integral i) ⇒ [(i, Text)]+base_ordinals =+ [ (1, "primeir")+ , (2, "segund")+ , (3, "terceir")+ , (4, "quart")+ , (5, "quint")+ , (6, "sext")+ , (7, "sétim")+ , (8, "oitav")+ , (9, "non")+ , (10, "décim")+ , (11, "décimo primeir")+ , (12, "décimo segund")+ , (13, "décimo terceir")+ , (20, "vigésim")+ , (21, "vigésimo primeir")+ , (30, "trigésim")+ , (40, "quadragésim")+ , (50, "qüinquagésim")+ , (60, "sexagésim")+ , (70, "septuagésim")+ , (80, "octogésim")+ , (90, "nonagésim")+ , (100, "centésim")+ , (200, "ducentésim")+ , (300, "trecentésim")+ , (400, "quadringentésim")+ , (500, "qüingentésim")+ , (600, "sexcentésim")+ , (700, "setingentésim")+ , (800, "octingentésim")+ , (900, "nongentésim")+ , (1000, "milésim")+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals = map (\(n, f, e) → ( n+ , f defaultInflection+ , map (second (⊕ e)) base_ordinals)+ )+ [ ("masculine singular", masculine ∘ singular, "o")+ , ("masculine plural", masculine ∘ plural, "os")+ , ("feminine singular", feminine ∘ singular, "a")+ , ("feminine plural", feminine ∘ plural, "as")+ ]
+ src-test/Text/Numeral/Language/RMN_DZA/TestData.hs view
@@ -0,0 +1,204 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] rmn++[@Native name@] -++[@English name@] Balkan Romani+-}+module Text.Numeral.Language.RMN_DZA.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-dzambazi-romani/en/rmn-dza/+-}++-- Note: This is the Prilep dialect as spoken in Macedonia.+cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "jekh")+ , (2, "duj")+ , (3, "trin")+ , (4, "štar")+ , (5, "pandž")+ , (6, "šov")+ , (7, "efta")+ , (8, "oxto")+ , (9, "iňa")+ , (10, "deš")+ , (11, "dešujekh")+ , (12, "dešuduj")+ , (13, "dešutrin")+ , (14, "dešuštar")+ , (15, "dešupandž")+ , (16, "dešušov")+ , (17, "dešuefta")+ , (18, "dešuoxto")+ , (19, "dešuiňa")+ , (20, "biš")+ , (21, "bišthajekh")+ , (22, "bišthaduj")+ , (23, "bišthatrin")+ , (24, "bišthaštar")+ , (25, "bišthapandž")+ , (26, "bišthašov")+ , (27, "bišthajefta")+ , (28, "bišthajoxto")+ , (29, "bišthaiňa")+ , (30, "tranda")+ , (31, "trandathajekh")+ , (32, "trandathaduj")+ , (33, "trandathatrin")+ , (34, "trandathaštar")+ , (35, "trandathapandž")+ , (36, "trandathašov")+ , (37, "trandathajefta")+ , (38, "trandathajoxto")+ , (39, "trandathajiňa")+ , (40, "saranda")+ , (41, "sarandathajekh")+ , (42, "sarandathaduj")+ , (43, "sarandathatrin")+ , (44, "sarandathaštar")+ , (45, "sarandathapandž")+ , (46, "sarandathašov")+ , (47, "sarandathajefta")+ , (48, "sarandathajoxto")+ , (49, "sarandathajiňa")+ , (50, "pinda")+ , (51, "pindathajekh")+ , (52, "pindathaduj")+ , (53, "pindathatrin")+ , (54, "pindathaštar")+ , (55, "pindathapandž")+ , (56, "pindathašov")+ , (57, "pindathajefta")+ , (58, "pindathajoxto")+ , (59, "pindathajiňa")+ , (60, "šovardeš")+ , (61, "šovardešthajekh")+ , (62, "šovardešthaduj")+ , (63, "šovardešthatrin")+ , (64, "šovardešthaštar")+ , (65, "šovardešthapandž")+ , (66, "šovardešthašov")+ , (67, "šovardešthajefta")+ , (68, "šovardešthajoxto")+ , (69, "šovardešthajiňa")+ , (70, "eftavardeš")+ , (71, "eftavardešthajekh")+ , (72, "eftavardešthaduj")+ , (73, "eftavardešthatrin")+ , (74, "eftavardešthaštar")+ , (75, "eftavardešthapandž")+ , (76, "eftavardešthašov")+ , (77, "eftavardešthajefta")+ , (78, "eftavardešthajoxto")+ , (79, "eftavardešthajiňa")+ , (80, "oxtovardeš")+ , (81, "oxtovardešthajekh")+ , (82, "oxtovardešthaduj")+ , (83, "oxtovardešthatrin")+ , (84, "oxtovardešthaštar")+ , (85, "oxtovardešthapandž")+ , (86, "oxtovardešthašov")+ , (87, "oxtovardešthajefta")+ , (88, "oxtovardešthajoxto")+ , (89, "oxtovardešthajiňa")+ , (90, "iňavardeš")+ , (91, "iňavardešthajekh")+ , (92, "iňavardešthaduj")+ , (93, "iňavardešthatrin")+ , (94, "iňavardešthaštar")+ , (95, "iňavardešthapandž")+ , (96, "iňavardešthašov")+ , (97, "iňavardešthajefta")+ , (98, "iňavardešthajoxto")+ , (99, "iňavardešthajiňa")+ , (100, "šel")+ , (101, "šel jekh")+ , (102, "šel duj")+ , (103, "šel trin")+ , (104, "šel štar")+ , (105, "šel pandž")+ , (106, "šel šov")+ , (107, "šel efta")+ , (108, "šel oxto")+ , (109, "šel iňa")+ , (110, "šel deš")+ , (123, "šel bišthatrin")+ , (200, "duj šel")+ , (300, "trin šel")+ , (321, "trin šel bišthajekh")+ , (400, "štar šel")+ , (500, "panšel")+ , (600, "šov šel")+ , (700, "efta šel")+ , (800, "oxto šel")+ , (900, "iňa šel")+ , (909, "iňa šel iňa")+ , (990, "iňa šel iňavardeš")+ , (999, "iňa šel iňavardešthajiňa")+ , (1000, "miľa")+ , (1001, "miľa jekh")+ , (1008, "miľa oxto")+ , (1234, "miľa duj šel trandathaštar")+ , (2000, "duj miľe")+ , (3000, "trin miľe")+ , (4000, "štar miľe")+ , (4321, "štar miľe trin šel bišthajekh")+ , (5000, "pandž miľe")+ , (6000, "šov miľe")+ , (7000, "efta miľe")+ , (8000, "oxto miľe")+ , (9000, "iňa miľe")+ , (10000, "deš miľe")+ , (12345, "dešuduj miľe trin šel sarandathapandž")+ , (20000, "biš miľe")+ , (30000, "tranda miľe")+ , (40000, "saranda miľe")+ , (50000, "pinda miľe")+ , (54321, "pindathaštar miľe trin šel bišthajekh")+ , (60000, "šovardeš miľe")+ , (70000, "eftavardeš miľe")+ , (80000, "oxtovardeš miľe")+ , (90000, "iňavardeš miľe")+ , (100000, "šel miľe")+ , (123456, "šel bišthatrin miľe štar šel pindathašov")+ , (200000, "duj šel miľe")+ , (300000, "trin šel miľe")+ , (400000, "štar šel miľe")+ , (500000, "panšel miľe")+ , (600000, "šov šel miľe")+ , (654321, "šov šel pindathaštar miľe trin šel bišthajekh")+ , (700000, "efta šel miľe")+ , (800000, "oxto šel miľe")+ , (900000, "iňa šel miľe")+ , (1000000, "milioni")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/RO/TestData.hs view
@@ -0,0 +1,144 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] ro++[@ISO639-2B@] rum++[@ISO639-2T@] ron++[@ISO639-3@] ron++[@Native name@] română++[@English name@] Romanian+-}++module Text.Numeral.Language.RO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "zero")+ , (1, "unu")+ , (2, "doi")+ , (3, "trei")+ , (4, "patru")+ , (5, "cinci")+ , (6, "sase")+ , (7, "sapte")+ , (8, "opt")+ , (9, "noua")+ , (10, "zece")+ , (11, "unsprezece")+ , (12, "doisprezece")+ , (13, "treisprezece")+ , (14, "paisprezece")+ , (15, "cincisprezece")+ , (16, "saisprezece")+ , (17, "saptesprezece")+ , (18, "optsprezece")+ , (19, "nouasprezece")+ , (20, "douazeci")+ , (21, "douazecisiunu")+ , (22, "douazecisidoi")+ , (23, "douazecisitrei")+ , (24, "douazecisipatru")+ , (25, "douazecisicinci")+ , (26, "douazecisisase")+ , (27, "douazecisisapte")+ , (28, "douazecisiopt")+ , (29, "douazecisinoua")+ , (30, "treizeci")+ , (31, "treizecisiunu")+ , (32, "treizecisidoi")+ , (33, "treizecisitrei")+ , (34, "treizecisipatru")+ , (35, "treizecisicinci")+ , (36, "treizecisisase")+ , (37, "treizecisisapte")+ , (38, "treizecisiopt")+ , (39, "treizecisinoua")+ , (40, "patruzeci")+ , (41, "patruzecisiunu")+ , (42, "patruzecisidoi")+ , (43, "patruzecisitrei")+ , (44, "patruzecisipatru")+ , (45, "patruzecisicinci")+ , (46, "patruzecisisase")+ , (47, "patruzecisisapte")+ , (48, "patruzecisiopt")+ , (49, "patruzecisinoua")+ , (50, "cincizeci")+ , (51, "cincizecisiunu")+ , (52, "cincizecisidoi")+ , (53, "cincizecisitrei")+ , (54, "cincizecisipatru")+ , (55, "cincizecisicinci")+ , (56, "cincizecisisase")+ , (57, "cincizecisisapte")+ , (58, "cincizecisiopt")+ , (59, "cincizecisinoua")+ , (60, "saizeci")+ , (61, "saizecisiunu")+ , (62, "saizecisidoi")+ , (63, "saizecisitrei")+ , (64, "saizecisipatru")+ , (65, "saizecisicinci")+ , (66, "saizecisisase")+ , (67, "saizecisisapte")+ , (68, "saizecisiopt")+ , (69, "saizecisinoua")+ , (70, "saptezeci")+ , (71, "saptezecisiunu")+ , (72, "saptezecisidoi")+ , (73, "saptezecisitrei")+ , (74, "saptezecisipatru")+ , (75, "saptezecisicinci")+ , (76, "saptezecisisase")+ , (77, "saptezecisisapte")+ , (78, "saptezecisiopt")+ , (79, "saptezecisinoua")+ , (80, "optzeci")+ , (81, "optzecisiunu")+ , (82, "optzecisidoi")+ , (83, "optzecisitrei")+ , (84, "optzecisipatru")+ , (85, "optzecisicinci")+ , (86, "optzecisisase")+ , (87, "optzecisisapte")+ , (88, "optzecisiopt")+ , (89, "optzecisinoua")+ , (90, "nouazeci")+ , (91, "nouazecisiunu")+ , (92, "nouazecisidoi")+ , (93, "nouazecisitrei")+ , (94, "nouazecisipatru")+ , (95, "nouazecisicinci")+ , (96, "nouazecisisase")+ , (97, "nouazecisisapte")+ , (98, "nouazecisiopt")+ , (99, "nouazecisinoua")+ , (100, "o suta")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/RU/TestData.hs view
@@ -0,0 +1,192 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] ru++[@ISO639-2@] rus++[@ISO639-3@] rus++[@Native name@] Русский язык++[@English name@] Russian+-}++module Text.Numeral.Language.RU.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://en.wikibooks.org/wiki/Russian/Numbers+ http://russian.speak7.com/russian_numbers.htm+ http://learningrussian.net/games_verbs_grammar3.php+ http://www.waytorussia.net/WhatIsRussia/Russian/Part1a.html+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "ноль")+ , (1, "один")+ , (2, "два")+ , (3, "три")+ , (4, "четыре")+ , (5, "пять")+ , (6, "шесть")+ , (7, "семь")+ , (8, "восемь")+ , (9, "девять")+ , (10, "десять")+ , (11, "одиннадцать")+ , (12, "двенадцать")+ , (13, "тринадцать")+ , (14, "четырнадцать")+ , (15, "пятнадцать")+ , (16, "шестнадцать")+ , (17, "семнадцать")+ , (18, "восемнадцать")+ , (19, "девятнадцать")+ , (20, "двадцать")+ , (21, "двадцать один")+ , (22, "двадцать два")+ , (23, "двадцать три")+ , (24, "двадцать четыре")+ , (25, "двадцать пять")+ , (26, "двадцать шесть")+ , (27, "двадцать семь")+ , (28, "двадцать восемь")+ , (29, "двадцать девять")+ , (30, "тридцать")+ , (31, "тридцать один")+ , (32, "тридцать два")+ , (33, "тридцать три")+ , (34, "тридцать четыре")+ , (35, "тридцать пять")+ , (36, "тридцать шесть")+ , (37, "тридцать семь")+ , (38, "тридцать восемь")+ , (39, "тридцать девять")+ , (40, "сорок")+ , (41, "сорок один")+ , (42, "сорок два")+ , (43, "сорок три")+ , (44, "сорок четыре")+ , (45, "сорок пять")+ , (46, "сорок шесть")+ , (47, "сорок семь")+ , (48, "сорок восемь")+ , (49, "сорок девять")+ , (50, "пятьдесят")+ , (51, "пятьдесят один")+ , (52, "пятьдесят два")+ , (53, "пятьдесят три")+ , (54, "пятьдесят четыре")+ , (55, "пятьдесят пять")+ , (56, "пятьдесят шесть")+ , (57, "пятьдесят семь")+ , (58, "пятьдесят восемь")+ , (59, "пятьдесят девять")+ , (60, "шестьдесят")+ , (61, "шестьдесят один")+ , (62, "шестьдесят два")+ , (63, "шестьдесят три")+ , (64, "шестьдесят четыре")+ , (65, "шестьдесят пять")+ , (66, "шестьдесят шесть")+ , (67, "шестьдесят семь")+ , (68, "шестьдесят восемь")+ , (69, "шестьдесят девять")+ , (70, "семьдесят")+ , (71, "семьдесят один")+ , (72, "семьдесят два")+ , (73, "семьдесят три")+ , (74, "семьдесят четыре")+ , (75, "семьдесят пять")+ , (76, "семьдесят шесть")+ , (77, "семьдесят семь")+ , (78, "семьдесят восемь")+ , (79, "семьдесят девять")+ , (80, "восемьдесят")+ , (81, "восемьдесят один")+ , (82, "восемьдесят два")+ , (83, "восемьдесят три")+ , (84, "восемьдесят четыре")+ , (85, "восемьдесят пять")+ , (86, "восемьдесят шесть")+ , (87, "восемьдесят семь")+ , (88, "восемьдесят восемь")+ , (89, "восемьдесят девять")+ , (90, "девяносто")+ , (91, "девяносто один")+ , (92, "девяносто два")+ , (93, "девяносто три")+ , (94, "девяносто четыре")+ , (95, "девяносто пять")+ , (96, "девяносто шесть")+ , (97, "девяносто семь")+ , (98, "девяносто восемь")+ , (99, "девяносто девять")+ , (100, "сто")+ , (101, "сто один")+ , (108, "сто восемь")+ , (110, "сто десять")+ , (115, "сто пятнадцать")+ , (121, "сто двадцать один")+ , (133, "сто тридцать три")+ , (147, "сто сорок семь")+ , (200, "двести")+ , (300, "триста")+ , (400, "четыреста")+ , (500, "пятьсот")+ , (600, "шестьсот")+ , (700, "семьсот")+ , (800, "восемьсот")+ , (900, "девятьсот")+ , (1000, "тысяча")+ , (2000, "две тысячи")+ , (3000, "три тысячи")+ , (5000, "пять тысяч")+ , (6000, "шесть тысяч")+ , (9000, "девять тысяч")+ , (16000, "шестнадцать тысяч")+ , (21000, "двадцать одна тысяча")+ , (22000, "двадцать две тысячи")+ , (23000, "двадцать три тысячи")+ , (28000, "двадцать восемь тысяч")+ , (41000, "сорок одна тысяча")+ , (42000, "сорок две тысячи")+ , (49000, "сорок девять тысяч")+ , (100000, "сто тысяч")+ , (200000, "двести тысяч")+ , (300000, "триста тысяч")+ , (300001, "триста тысяч один")+ , (300020, "триста тысяч двадцать")+ , (300825, "триста тысячь восемьсот двадцать пять")+ , (dec 6, "один миллион")+ , (2 ⋅ dec 6, "два миллиона")+ , (5 ⋅ dec 6, "пять миллионов")+ , (dec 9, "один миллиард")+ , (2 ⋅ dec 9, "два миллиарда")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/SCO/TestData.hs view
@@ -0,0 +1,146 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] sco++[@ISO639-3@] sco++[@Native name@] Scots++[@English name@] Scots+-}++module Text.Numeral.Language.SCO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.sf.airnet.ne.jp/~ts/language/number/scots.html+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "ane")+ , (2, "twa")+ , (3, "three")+ , (4, "fower")+ , (5, "five")+ , (6, "sax")+ , (7, "seeven")+ , (8, "echt")+ , (9, "nine")+ , (10, "ten")+ , (11, "aleeven")+ , (12, "twal")+ , (13, "therteen")+ , (14, "fowerteen")+ , (15, "feifteen")+ , (16, "saxteen")+ , (17, "seiventeen")+ , (18, "echteen")+ , (19, "ninteen")+ , (20, "twintie")+ , (21, "twintie ane")+ , (22, "twintie twa")+ , (23, "twintie three")+ , (24, "twintie fower")+ , (25, "twintie five")+ , (26, "twintie sax")+ , (27, "twintie seeven")+ , (28, "twintie echt")+ , (29, "twintie nine")+ , (30, "thertie")+ , (31, "thertie ane")+ , (32, "thertie twa")+ , (33, "thertie three")+ , (34, "thertie fower")+ , (35, "thertie five")+ , (36, "thertie sax")+ , (37, "thertie seeven")+ , (38, "thertie echt")+ , (39, "thertie nine")+ , (40, "fowertie")+ , (41, "fowertie ane")+ , (42, "fowertie twa")+ , (43, "fowertie three")+ , (44, "fowertie fower")+ , (45, "fowertie five")+ , (46, "fowertie sax")+ , (47, "fowertie seeven")+ , (48, "fowertie echt")+ , (49, "fowertie nine")+ , (50, "fuftie")+ , (51, "fuftie ane")+ , (52, "fuftie twa")+ , (53, "fuftie three")+ , (54, "fuftie fower")+ , (55, "fuftie five")+ , (56, "fuftie sax")+ , (57, "fuftie seeven")+ , (58, "fuftie echt")+ , (59, "fuftie nine")+ , (60, "saxtie")+ , (61, "saxtie ane")+ , (62, "saxtie twa")+ , (63, "saxtie three")+ , (64, "saxtie fower")+ , (65, "saxtie five")+ , (66, "saxtie sax")+ , (67, "saxtie seeven")+ , (68, "saxtie echt")+ , (69, "saxtie nine")+ , (70, "seeventie")+ , (71, "seeventie ane")+ , (72, "seeventie twa")+ , (73, "seeventie three")+ , (74, "seeventie fower")+ , (75, "seeventie five")+ , (76, "seeventie sax")+ , (77, "seeventie seeven")+ , (78, "seeventie echt")+ , (79, "seeventie nine")+ , (80, "echtie")+ , (81, "echtie ane")+ , (82, "echtie twa")+ , (83, "echtie three")+ , (84, "echtie fower")+ , (85, "echtie five")+ , (86, "echtie sax")+ , (87, "echtie seeven")+ , (88, "echtie echt")+ , (89, "echtie nine")+ , (90, "nintie")+ , (91, "nintie ane")+ , (92, "nintie twa")+ , (93, "nintie three")+ , (94, "nintie fower")+ , (95, "nintie five")+ , (96, "nintie sax")+ , (97, "nintie seeven")+ , (98, "nintie echt")+ , (99, "nintie nine")+ , (100, "hunner")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/SV/TestData.hs view
@@ -0,0 +1,308 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] sv++[@ISO639-2B@] swe++[@ISO639-3@] swe++[@Native name@] svenska++[@English name@] Swedish+-}++module Text.Numeral.Language.SV.TestData+ ( cardinals+ , ordinals+ , partitives+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( neuter, common )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++-- Sources:+-- http://en.wikipedia.org/wiki/Swedish_grammar#Numerals+-- http://publications.europa.eu/code/sv/sv-4100600sv.htm+-- http://www.lysator.liu.se/language/Languages/Swedish/Grammar.html#numbers+-- http://en.wikibooks.org/wiki/Swedish/Numerals+-- http://www.speakswedish.co.uk/vocab/numbers+-- http://aclweb.org/anthology/C/C73/C73-2031.pdf+--+-- Rules for writing large words seem hard to come by online.+-- http://publications.europa.eu/code/sv/sv-4100600sv.htm provides+-- some guidelines:+--+-- Rule 1: Even hundreds, thousands, and so on, are generally written+-- as two words: två tusen, fyra hundra, sex miljoner+--+-- Rule 2: Numbers smaller than one hundred are always written as one+-- word, as are other number under one million: fyrtiosju,+-- niotusenfemhundrasexton+--+-- Rule 3: Numbers larger than one million should be written so that+-- the words tusen, miljon, miljard, and so on always stand on their+-- own: tjugofem miljarder tre miljoner++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "neuter"+ , neuter defaultInflection+ -- Rule 2 (one word)+ , [ (0, "noll")+ , (1, "ett")+ , (2, "två")+ , (3, "tre")+ , (4, "fyra")+ , (5, "fem")+ , (6, "sex")+ , (7, "sju")+ , (8, "åtta")+ , (9, "nio")+ , (10, "tio")+ , (11, "elva")+ , (12, "tolv")+ , (13, "tretton")+ , (14, "fjorton")+ , (15, "femton")+ , (16, "sexton")+ , (17, "sjutton")+ , (18, "arton")+ , (19, "nitton")+ , (20, "tjugo")+ , (21, "tjugoett")+ , (22, "tjugotvå")+ , (23, "tjugotre")+ , (24, "tjugofyra")+ , (25, "tjugofem")+ , (26, "tjugosex")+ , (27, "tjugosju")+ , (28, "tjugoåtta")+ , (29, "tjugonio")+ , (30, "trettio")+ , (31, "trettioett")+ , (32, "trettiotvå")+ , (33, "trettiotre")+ , (34, "trettiofyra")+ , (35, "trettiofem")+ , (36, "trettiosex")+ , (37, "trettiosju")+ , (38, "trettioåtta")+ , (39, "trettionio")+ , (40, "fyrtio")+ , (41, "fyrtioett")+ , (42, "fyrtiotvå")+ , (43, "fyrtiotre")+ , (44, "fyrtiofyra")+ , (45, "fyrtiofem")+ , (46, "fyrtiosex")+ , (47, "fyrtiosju")+ , (48, "fyrtioåtta")+ , (49, "fyrtionio")+ , (50, "femtio")+ , (51, "femtioett")+ , (52, "femtiotvå")+ , (53, "femtiotre")+ , (54, "femtiofyra")+ , (55, "femtiofem")+ , (56, "femtiosex")+ , (57, "femtiosju")+ , (58, "femtioåtta")+ , (59, "femtionio")+ , (60, "sextio")+ , (61, "sextioett")+ , (62, "sextiotvå")+ , (63, "sextiotre")+ , (64, "sextiofyra")+ , (65, "sextiofem")+ , (66, "sextiosex")+ , (67, "sextiosju")+ , (68, "sextioåtta")+ , (69, "sextionio")+ , (70, "sjuttio")+ , (71, "sjuttioett")+ , (72, "sjuttiotvå")+ , (73, "sjuttiotre")+ , (74, "sjuttiofyra")+ , (75, "sjuttiofem")+ , (76, "sjuttiosex")+ , (77, "sjuttiosju")+ , (78, "sjuttioåtta")+ , (79, "sjuttionio")+ , (80, "åttio")+ , (81, "åttioett")+ , (82, "åttiotvå")+ , (83, "åttiotre")+ , (84, "åttiofyra")+ , (85, "åttiofem")+ , (86, "åttiosex")+ , (87, "åttiosju")+ , (88, "åttioåtta")+ , (89, "åttionio")+ , (90, "nittio")+ , (91, "nittioett")+ , (92, "nittiotvå")+ , (93, "nittiotre")+ , (94, "nittiofyra")+ , (95, "nittiofem")+ , (96, "nittiosex")+ , (97, "nittiosju")+ , (98, "nittioåtta")+ , (99, "nittionio")+ , (101, "etthundraett")+ , (102, "etthundratvå")+ , (549, "femhundrafyrtionio")+ -- "ettusen" is a special spelling case where "ett tusen"+ -- written as one word becomes ettusen, dropping one 't'.+ , (1349, "ettusentrehundrafyrtionio")+ , (3502, "tretusenfemhundratvå")+ , (9516, "niotusenfemhundrasexton")+ , (30934, "trettiotusenniohundratrettiofyra")+ , (837132, "åttahundratrettiosjutusenetthundratrettiotvå")+ , (999999, "niohundranittioniotusenniohundranittionio")+ -- Rule 1 (even hundreds and so on)+ , (100, "ett hundra")+ , (200, "två hundra")+ , (300, "tre hundra")+ , (500, "fem hundra")+ , (600, "sex hundra")+ , (800, "åtta hundra")+ , (1000, "ett tusen")+ , (3000, "tre tusen")+ , (5000, "fem tusen")+ , (10000, "tio tusen")+ , (20000, "tjugo tusen")+ , (50000, "femtio tusen")+ , (dec 5, "etthundra tusen")+ , (dec 6, "en miljon")+ , (2 ⋅ dec 6, "två miljoner")+ , (10 ⋅ dec 6, "tio miljoner")+ , (dec 8, "etthundra miljoner")+ , (2 ⋅ dec 8, "tvåhundra miljoner")+ , (dec 9, "en miljard")+ , (dec 12, "en biljon")+ , (dec 15, "en biljard")+ , (dec 18, "en triljon")+ , (dec 24, "en kvadriljon")+ , (dec 30, "en kvintiljon")+ , (dec 36, "en sextiljon")+ , (dec 42, "en septiljon")+ , (dec 48, "en oktiljon")+ , (dec 54, "en noniljon")+ , (dec 60, "en deciljon")+ , (dec 66, "en undeciljon")+ -- Rule 3: Numbers larger than one million split up on tusen, miljon, etc+ , (123456789, "etthundratjugotre miljoner fyrahundrafemtiosex tusen sjuhundraåttionio")+ , (37149204, "trettiosju miljoner etthundrafyrtionio tusen tvåhundrafyra")+ , (302145568, "trehundratvå miljoner etthundrafyrtiofem tusen femhundrasextioåtta")+ , (1000100, "en miljon etthundra")+ , (1305100, "en miljon trehundrafem tusen etthundra")+ , (300000102, "trehundra miljoner etthundratvå")+ , (300500000, "trehundra miljoner femhundra tusen")+ , (25003000000, "tjugofem miljarder tre miljoner")+ ]+ )+ , ( "common"+ , common defaultInflection+ , [ (1, "en")+ , (21, "tjugoen")+ ]+ )+ ]++ordinals ∷ (Integral i) ⇒ TestData i+ordinals =+ [ ( "neuter"+ , neuter defaultInflection+ , [ (0, "nollte")+ , (1, "första")+ , (2, "andra")+ , (3, "tredje")+ , (4, "fjärde")+ , (5, "femte")+ , (6, "sjätte")+ , (7, "sjunde")+ , (8, "åttonde")+ , (9, "nionde")+ , (10, "tionde")+ , (11, "elfte")+ , (12, "tolfte")+ , (13, "trettonde")+ , (14, "fjortonde")+ , (15, "femtonde")+ , (16, "sextonde")+ , (17, "sjuttonde")+ , (18, "artonde")+ , (19, "nittonde")+ , (20, "tjugonde")+ , (21, "tjugoförsta")+ , (22, "tjugoandra")+ , (23, "tjugotredje")+ , (30, "trettionde")+ , (40, "fyrtionde")+ , (50, "femtionde")+ , (60, "sextionde")+ , (70, "sjuttionde")+ , (80, "åttionde")+ , (90, "nittionde")+ , (100, "ett hundrade")+ , (200, "två hundrade")+ , (500, "fem hundrade")+ , (1000, "ett tusende")+ , (2000, "två tusende")+ , (5000, "fem tusende")+ , (10000, "tio tusende")+ , (20000, "tjugo tusende")+ , (50000, "femtio tusende")+ , (dec 6, "en miljonte")+ , (dec 9, "en miljarte")+ , (dec 12, "en biljonte")+ , (dec 18, "en triljonte")+ ]+ )+ ]++partitives ∷ (Integral i) ⇒ TestData (i, i)+partitives =+ [ ( "default"+ , defaultInflection+ , [ ((1, 2), "en halv")+ , ((1, 3), "en tredjedel")+ , ((3, 4), "tre fjärdedelar")+ , ((2, 5), "två femtedelar")+ , ((5, 6), "fem sjättedelar")+ , ((4, 7), "fyra sjundedelar")+ , ((1, 8), "en åttondel")+ , ((8, 9), "åtta niondelar")+ , ((1, 10), "en tiondel")+ , ((1, 11), "en elftedel")+ , ((1, 12), "en tolftedel")+ , ((1, 13), "en trettondel")+ , ((1, 14), "en fjortondel")+ , ((1, 15), "en femtondel")+ , ((1, 16), "en sextondel")+ , ((1, 17), "en sjuttondel")+ , ((1, 18), "en artondel")+ , ((1, 19), "en nittondel")+ , ((1, 20), "en tjugondel")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/TAR/TestData.hs view
@@ -0,0 +1,147 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] tar++[@Native name@] Ralámuli ra'ícha++[@English name@] Central Tarahumara+-}+module Text.Numeral.Language.TAR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-central-tarahumara/en/tar/+ http://lingweb.eva.mpg.de/numeral/Tarahumara-Central.htm+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "biré")+ , (2, "ocuá")+ , (3, "biquiyá")+ , (4, "nahuosa")+ , (5, "marí")+ , (6, "usani")+ , (7, "quicháo")+ , (8, "osá nahuó") -- two fours+ , (9, "químacoy") -- not ten+ , (10, "macoy")+ , (11, "macoy miná biré")+ , (12, "macoy miná ocuá")+ , (13, "macoy miná biquiyá")+ , (14, "macoy miná nahuosa")+ , (15, "macoy miná marí")+ , (16, "macoy miná usani")+ , (17, "macoy miná quicháo")+ , (18, "macoy miná osá nahuó")+ , (19, "macoy miná químacoy")+ , (20, "osá macoy")+ , (21, "osá macoy miná biré")+ , (22, "osá macoy miná ocuá")+ , (23, "osá macoy miná biquiyá")+ , (24, "osá macoy miná nahuosa")+ , (25, "osá macoy miná marí")+ , (26, "osá macoy miná usani")+ , (27, "osá macoy miná quicháo")+ , (28, "osá macoy miná osá nahuó")+ , (29, "osá macoy miná químacoy")+ , (30, "baisá macoy")+ , (31, "baisá macoy miná biré")+ , (32, "baisá macoy miná ocuá")+ , (33, "baisá macoy miná biquiyá")+ , (34, "baisá macoy miná nahuosa")+ , (35, "baisá macoy miná marí")+ , (36, "baisá macoy miná usani")+ , (37, "baisá macoy miná quicháo")+ , (38, "baisá macoy miná osá nahuó")+ , (39, "baisá macoy miná químacoy")+ , (40, "nahuosa macoy")+ , (41, "nahuosa macoy miná biré")+ , (42, "nahuosa macoy miná ocuá")+ , (43, "nahuosa macoy miná biquiyá")+ , (44, "nahuosa macoy miná nahuosa")+ , (45, "nahuosa macoy miná marí")+ , (46, "nahuosa macoy miná usani")+ , (47, "nahuosa macoy miná quicháo")+ , (48, "nahuosa macoy miná osá nahuó")+ , (49, "nahuosa macoy miná químacoy")+ , (50, "marisa macoy")+ , (51, "marisa macoy miná biré")+ , (52, "marisa macoy miná ocuá")+ , (53, "marisa macoy miná biquiyá")+ , (54, "marisa macoy miná nahuosa")+ , (55, "marisa macoy miná marí")+ , (56, "marisa macoy miná usani")+ , (57, "marisa macoy miná quicháo")+ , (58, "marisa macoy miná osá nahuó")+ , (59, "marisa macoy miná químacoy")+ , (60, "usansa macoy")+ , (61, "usansa macoy miná biré")+ , (62, "usansa macoy miná ocuá")+ , (63, "usansa macoy miná biquiyá")+ , (64, "usansa macoy miná nahuosa")+ , (65, "usansa macoy miná marí")+ , (66, "usansa macoy miná usani")+ , (67, "usansa macoy miná quicháo")+ , (68, "usansa macoy miná osá nahuó")+ , (69, "usansa macoy miná químacoy")+ , (70, "quicháosa macoy")+ , (71, "quicháosa macoy miná biré")+ , (72, "quicháosa macoy miná ocuá")+ , (73, "quicháosa macoy miná biquiyá")+ , (74, "quicháosa macoy miná nahuosa")+ , (75, "quicháosa macoy miná marí")+ , (76, "quicháosa macoy miná usani")+ , (77, "quicháosa macoy miná quicháo")+ , (78, "quicháosa macoy miná osá nahuó")+ , (79, "quicháosa macoy miná químacoy")+ -- The "osá naósa" is from Lowland Tarahumara, not Central+ -- Tarahumara. But this is the only available source.+ , (80, "osá naósa macoy")+ , (81, "osá naósa macoy miná biré")+ , (82, "osá naósa macoy miná ocuá")+ , (83, "osá naósa macoy miná biquiyá")+ , (84, "osá naósa macoy miná nahuosa")+ , (85, "osá naósa macoy miná marí")+ , (86, "osá naósa macoy miná usani")+ , (87, "osá naósa macoy miná quicháo")+ , (88, "osá naósa macoy miná osá nahuó")+ , (89, "osá naósa macoy miná químacoy")+ , (90, "que macoisa macoy")+ , (91, "que macoisa macoy miná biré")+ , (92, "que macoisa macoy miná ocuá")+ , (93, "que macoisa macoy miná biquiyá")+ , (94, "que macoisa macoy miná nahuosa")+ , (95, "que macoisa macoy miná marí")+ , (96, "que macoisa macoy miná usani")+ , (97, "que macoisa macoy miná quicháo")+ , (98, "que macoisa macoy miná osá nahuó")+ , (99, "que macoisa macoy miná químacoy")+ , (100, "biré ciento")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/TR/TestData.hs view
@@ -0,0 +1,262 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] tr++[@ISO639-2@] tur++[@ISO639-3@] tur++[@Native name@] Türkçe++[@English name@] Turkish+-}++module Text.Numeral.Language.TR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-turkish/en/tur/+ http://www.sf.airnet.ne.jp/~ts/language/number/turkish.html+ http://www.turkishlanguage.co.uk/seasons.htm#article_15+ http://www.turkeytravelplanner.com/details/LanguageGuide/100words_lessons/100Words_10.html+ http://en.wikibooks.org/wiki/Turkish/Numbers+ http://tr.wikipedia.org/wiki/B%C3%BCy%C3%BCk_say%C4%B1lar%C4%B1n_adlar%C4%B1+-}++cardinals ∷ (Integral i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "sıfır")+ , (1, "bir")+ , (2, "iki")+ , (3, "üç")+ , (4, "dört")+ , (5, "beş")+ , (6, "altı")+ , (7, "yedi")+ , (8, "sekiz")+ , (9, "dokuz")+ , (10, "on")+ , (11, "on bir")+ , (12, "on iki")+ , (13, "on üç")+ , (14, "on dört")+ , (15, "on beş")+ , (16, "on altı")+ , (17, "on yedi")+ , (18, "on sekiz")+ , (19, "on dokuz")+ , (20, "yirmi")+ , (21, "yirmi bir")+ , (22, "yirmi iki")+ , (23, "yirmi üç")+ , (24, "yirmi dört")+ , (25, "yirmi beş")+ , (26, "yirmi altı")+ , (27, "yirmi yedi")+ , (28, "yirmi sekiz")+ , (29, "yirmi dokuz")+ , (30, "otuz")+ , (31, "otuz bir")+ , (32, "otuz iki")+ , (33, "otuz üç")+ , (34, "otuz dört")+ , (35, "otuz beş")+ , (36, "otuz altı")+ , (37, "otuz yedi")+ , (38, "otuz sekiz")+ , (39, "otuz dokuz")+ , (40, "kırk")+ , (41, "kırk bir")+ , (42, "kırk iki")+ , (43, "kırk üç")+ , (44, "kırk dört")+ , (45, "kırk beş")+ , (46, "kırk altı")+ , (47, "kırk yedi")+ , (48, "kırk sekiz")+ , (49, "kırk dokuz")+ , (50, "elli")+ , (51, "elli bir")+ , (52, "elli iki")+ , (53, "elli üç")+ , (54, "elli dört")+ , (55, "elli beş")+ , (56, "elli altı")+ , (57, "elli yedi")+ , (58, "elli sekiz")+ , (59, "elli dokuz")+ , (60, "altmış")+ , (61, "altmış bir")+ , (62, "altmış iki")+ , (63, "altmış üç")+ , (64, "altmış dört")+ , (65, "altmış beş")+ , (66, "altmış altı")+ , (67, "altmış yedi")+ , (68, "altmış sekiz")+ , (69, "altmış dokuz")+ , (70, "yetmiş")+ , (71, "yetmiş bir")+ , (72, "yetmiş iki")+ , (73, "yetmiş üç")+ , (74, "yetmiş dört")+ , (75, "yetmiş beş")+ , (76, "yetmiş altı")+ , (77, "yetmiş yedi")+ , (78, "yetmiş sekiz")+ , (79, "yetmiş dokuz")+ , (80, "seksen")+ , (81, "seksen bir")+ , (82, "seksen iki")+ , (83, "seksen üç")+ , (84, "seksen dört")+ , (85, "seksen beş")+ , (86, "seksen altı")+ , (87, "seksen yedi")+ , (88, "seksen sekiz")+ , (89, "seksen dokuz")+ , (90, "doksan")+ , (91, "doksan bir")+ , (92, "doksan iki")+ , (93, "doksan üç")+ , (94, "doksan dört")+ , (95, "doksan beş")+ , (96, "doksan altı")+ , (97, "doksan yedi")+ , (98, "doksan sekiz")+ , (99, "doksan dokuz")+ , (100, "yüz")+ , (200, "iki yüz")+ , (300, "üç yüz")+ , (400, "dört yüz")+ , (500, "beş yüz")+ , (600, "altı yüz")+ , (700, "yedi yüz")+ , (800, "sekiz yüz")+ , (900, "dokuz yüz")+ , (1000, "bin")+ , (2000, "iki bin")+ , (3000, "üç bin")+ , (4000, "dört bin")+ , (5000, "beş bin")+ , (6000, "altı bin")+ , (7000, "yedi bin")+ , (8000, "sekiz bin")+ , (9000, "dokuz bin")+ , (10000, "on bin")+ , (11000, "onbir bin")+ , (12000, "oniki bin")+ , (13000, "onüç bin")+ , (14000, "ondört bin")+ , (15000, "onbeş bin")+ , (16000, "onaltı bin")+ , (17000, "onyedi bin")+ , (18000, "onsekiz bin")+ , (19000, "ondokuz bin")+ , (20000, "yirmi bin")+ , (21000, "yirmi bir bin")+ , (22000, "yirmi iki bin")+ , (23000, "yirmi üç bin")+ , (24000, "yirmi dört bin")+ , (25000, "yirmi beş bin")+ , (26000, "yirmi altı bin")+ , (27000, "yirmi yedi bin")+ , (28000, "yirmi sekiz bin")+ , (30000, "otuz bin")+ , (50000, "elli bin")+ , (100000, "yüz bin")+ , (523758, "beş yüz yirmi üç bin yedi yüz elli sekiz")+ , (dec 6, "bir milyon")+ , (123456789, "yüz yirmi üç milyon dört yüz elli altı bin yedi yüz seksen dokuz")+ , (dec 9, "bir bilyon")+ , (dec 12, "bir trilyon")+ , (dec 15, "bir katrilyon")+ , (dec 18, "bir kentilyon")+ , (dec 21, "bir sekstilyon")+ , (dec 24, "bir septilyon")+ , (dec 27, "bir oktilyon")+ , (dec 30, "bir nonilyon")+ , (dec 33, "bir desilyon")+ , (dec 36, "bir andesilyon")+ , (dec 39, "bir dodesilyon")+ , (dec 42, "bir tredesilyon")+ , (dec 45, "bir katordesilyon")+ , (dec 48, "bir kendesilyon")+ , (dec 51, "bir seksdesilyon")+ , (dec 54, "bir septendesilyon")+ , (dec 57, "bir oktodesilyon")+ , (dec 60, "bir novemdesilyon")+ , (dec 63, "bir vigintilyon")+ , (dec 66, "bir anvigintilyon")+ , (dec 69, "bir dovigintilyon")+ , (dec 72, "bir tresvigintilyon")+ , (dec 75, "bir katorvigintilyon")+ , (dec 78, "bir kenkavigintilyon")+ , (dec 81, "bir sesvigintilyon")+ , (dec 84, "bir septemvigintilyon")+ , (dec 87, "bir oktovigintilyon")+ , (dec 90, "bir novemvigintilyon")+ , (dec 93, "bir trigintilyon")+ , (dec 96, "bir antrigintilyon")+ , (dec 99, "bir dotrigintilyon")+ , (dec 102, "bir trestrigintilyon")+ , (dec 105, "bir katortrigintilyon")+ , (dec 108, "bir kenkatrigintilyon")+ , (dec 111, "bir sestrigintilyon")+ , (dec 114, "bir septemtrigintilyon")+ , (dec 117, "bir oktotrigintilyon")+ , (dec 120, "bir novemtrigintilyon")+ , (dec 123, "bir katragintilyon")+ , (dec 153, "bir kenkagintilyon")+ , (dec 183, "bir seksagintilyon")+ , (dec 213, "bir septegintilyon")+ , (dec 243, "bir oktogintilyon")+ , (dec 273, "bir nonagintilyon")+ , (dec 303, "bir sentilyon")+ , (dec 306, "bir ansentilyon")+ , (dec 309, "bir dosentilyon")+ , (dec 312, "bir tresentilyon")+ , (dec 333, "bir desisentilyon")+ , (dec 336, "bir andesisentilyon")+ , (dec 363, "bir vigintisentilyon")+ , (dec 366, "bir anvigintisentilyon")+ , (dec 393, "bir trigintasentilyon")+ , (dec 423, "bir katragintasentilyon")+ , (dec 453, "bir kenkagintasentilyon")+ , (dec 483, "bir seksagintasentilyon")+ , (dec 513, "bir septegintasentilyon")+ , (dec 543, "bir oktogintasentilyon")+ , (dec 573, "bir nonagintasentilyon")+ , (dec 603, "bir dusentilyon")+ -- , (dec 903, "bir tresentilyon") -- same as 10 ^ 312+ , (dec 1203, "bir katringentilyon")+ , (dec 1503, "bir kengentilyon")+ , (dec 1803, "bir sesentilyon")+ , (dec 2103, "bir septingentilyon")+ , (dec 2403, "bir oktingentilyon")+ , (dec 2703, "bir nongentilyon")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/WO/TestData.hs view
@@ -0,0 +1,174 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] wo++[@ISO639-2@] wo1++[@ISO639-3@] wo1++[@Native name@] Wolof++[@English name@] Wolof+-}++module Text.Numeral.Language.WO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://en.wikipedia.org/wiki/Wolof_language#Numerals+ http://www.sf.airnet.ne.jp/~ts/language/number/wolof.html+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "benn")+ , (2, "ñaar")+ , (3, "ñett")+ , (4, "ñeent")+ , (5, "juróom")+ , (6, "juróom-benn")+ , (7, "juróom-ñaar")+ , (8, "juróom-ñett")+ , (9, "juróom-ñeent")+ , (10, "fukk")+ , (11, "fukk ak benn")+ , (12, "fukk ak ñaar")+ , (13, "fukk ak ñett")+ , (14, "fukk ak ñeent")+ , (15, "fukk ak juróom")+ , (16, "fukk ak juróom-benn")+ , (17, "fukk ak juróom-ñaar")+ , (18, "fukk ak juróom-ñett")+ , (19, "fukk ak juróom-ñeent")+ , (20, "ñaar-fukk")+ , (21, "ñaar-fukk ak benn")+ , (22, "ñaar-fukk ak ñaar")+ , (23, "ñaar-fukk ak ñett")+ , (24, "ñaar-fukk ak ñeent")+ , (25, "ñaar-fukk ak juróom")+ , (26, "ñaar-fukk ak juróom-benn")+ , (27, "ñaar-fukk ak juróom-ñaar")+ , (28, "ñaar-fukk ak juróom-ñett")+ , (29, "ñaar-fukk ak juróom-ñeent")+ , (30, "ñett-fukk")+ , (31, "ñett-fukk ak benn")+ , (32, "ñett-fukk ak ñaar")+ , (33, "ñett-fukk ak ñett")+ , (34, "ñett-fukk ak ñeent")+ , (35, "ñett-fukk ak juróom")+ , (36, "ñett-fukk ak juróom-benn")+ , (37, "ñett-fukk ak juróom-ñaar")+ , (38, "ñett-fukk ak juróom-ñett")+ , (39, "ñett-fukk ak juróom-ñeent")+ , (40, "ñeent-fukk")+ , (41, "ñeent-fukk ak benn")+ , (42, "ñeent-fukk ak ñaar")+ , (43, "ñeent-fukk ak ñett")+ , (44, "ñeent-fukk ak ñeent")+ , (45, "ñeent-fukk ak juróom")+ , (46, "ñeent-fukk ak juróom-benn")+ , (47, "ñeent-fukk ak juróom-ñaar")+ , (48, "ñeent-fukk ak juróom-ñett")+ , (49, "ñeent-fukk ak juróom-ñeent")+ , (50, "juróom-fukk")+ , (51, "juróom-fukk ak benn")+ , (52, "juróom-fukk ak ñaar")+ , (53, "juróom-fukk ak ñett")+ , (54, "juróom-fukk ak ñeent")+ , (55, "juróom-fukk ak juróom")+ , (56, "juróom-fukk ak juróom-benn")+ , (57, "juróom-fukk ak juróom-ñaar")+ , (58, "juróom-fukk ak juróom-ñett")+ , (59, "juróom-fukk ak juróom-ñeent")+ , (60, "juróom-benn-fukk")+ , (61, "juróom-benn-fukk ak benn")+ , (62, "juróom-benn-fukk ak ñaar")+ , (63, "juróom-benn-fukk ak ñett")+ , (64, "juróom-benn-fukk ak ñeent")+ , (65, "juróom-benn-fukk ak juróom")+ , (66, "juróom-benn-fukk ak juróom-benn")+ , (67, "juróom-benn-fukk ak juróom-ñaar")+ , (68, "juróom-benn-fukk ak juróom-ñett")+ , (69, "juróom-benn-fukk ak juróom-ñeent")+ , (70, "juróom-ñaar-fukk")+ , (71, "juróom-ñaar-fukk ak benn")+ , (72, "juróom-ñaar-fukk ak ñaar")+ , (73, "juróom-ñaar-fukk ak ñett")+ , (74, "juróom-ñaar-fukk ak ñeent")+ , (75, "juróom-ñaar-fukk ak juróom")+ , (76, "juróom-ñaar-fukk ak juróom-benn")+ , (77, "juróom-ñaar-fukk ak juróom-ñaar")+ , (78, "juróom-ñaar-fukk ak juróom-ñett")+ , (79, "juróom-ñaar-fukk ak juróom-ñeent")+ , (80, "juróom-ñett-fukk")+ , (81, "juróom-ñett-fukk ak benn")+ , (82, "juróom-ñett-fukk ak ñaar")+ , (83, "juróom-ñett-fukk ak ñett")+ , (84, "juróom-ñett-fukk ak ñeent")+ , (85, "juróom-ñett-fukk ak juróom")+ , (86, "juróom-ñett-fukk ak juróom-benn")+ , (87, "juróom-ñett-fukk ak juróom-ñaar")+ , (88, "juróom-ñett-fukk ak juróom-ñett")+ , (89, "juróom-ñett-fukk ak juróom-ñeent")+ , (90, "juróom-ñeent-fukk")+ , (91, "juróom-ñeent-fukk ak benn")+ , (92, "juróom-ñeent-fukk ak ñaar")+ , (93, "juróom-ñeent-fukk ak ñett")+ , (94, "juróom-ñeent-fukk ak ñeent")+ , (95, "juróom-ñeent-fukk ak juróom")+ , (96, "juróom-ñeent-fukk ak juróom-benn")+ , (97, "juróom-ñeent-fukk ak juróom-ñaar")+ , (98, "juróom-ñeent-fukk ak juróom-ñett")+ , (99, "juróom-ñeent-fukk ak juróom-ñeent")+ , (100, "téeméer")+ , (101, "téeméer ak benn")+ , (106, "téeméer ak juróom-benn")+ , (110, "téeméer ak fukk")+ , (200, "ñaari téeméer")+ , (300, "ñetti téeméer")+ , (400, "ñeenti téeméer")+ , (500, "juróomi téeméer")+ , (600, "juróom-benni téeméer")+ , (700, "juróom-ñaari téeméer")+ , (800, "juróom-ñetti téeméer")+ , (900, "juróom-ñeenti téeméer")+ , (1000, "junni")+ , (1100, "junni ak téeméer")+ , (1600, "junni ak juróom-benni téeméer")+ , (1945, "junni ak juróom-ñeenti téeméer ak ñeent-fukk ak juróom")+ , (1969, "junni ak juróom-ñeenti téeméer ak juróom-benn-fukk ak juróom-ñeent")+ , (2000, "ñaari junni")+ , (3000, "ñetti junni")+ , (4000, "ñeenti junni")+ , (5000, "juróomi junni")+ , (6000, "juróom-benni junni")+ , (7000, "juróom-ñaari junni")+ , (8000, "juróom-ñetti junni")+ , (9000, "juróom-ñeenti junni")+ , (10000, "fukki junni")+ , (100000, "téeméeri junni")+ , (1000000, "tamndareet")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/YOR/TestData.hs view
@@ -0,0 +1,151 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] yo++[@ISO639-2@] yor++[@ISO639-3@] yor++[@Native name@] èdè Yorùbá++[@English name@] Yoruba+-}++module Text.Numeral.Language.YOR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "ikan")+ , (2, "meji")+ , (3, "meta")+ , (4, "merin")+ , (5, "marun")+ , (6, "mefa")+ , (7, "meje")+ , (8, "mejo")+ , (9, "mesan")+ , (10, "mewa")+ , (11, "mokanla")+ , (12, "mejila")+ , (13, "metala")+ , (14, "merinla")+ , (15, "medogun")+ , (16, "merindilogun")+ , (17, "metadilogun")+ , (18, "mejidilogun")+ , (19, "mokandilogun")+ , (20, "ogun")+ , (21, "mokanlelogun")+ , (22, "mejilelogun")+ , (23, "metalelogun")+ , (24, "merinlelogun")+ , (25, "medogbon")+ , (26, "merindilogbon")+ , (27, "metadilogbon")+ , (28, "mejidilogbon")+ , (29, "mokandilogbon")+ , (30, "ogbon")+ , (31, "mokanlelogbon")+ , (32, "mejilelogbon")+ , (33, "metalelogbon")+ , (34, "merinlelogbon")+ , (35, "marundilogoji")+ , (36, "merindilogoji")+ , (37, "metadilogoji")+ , (38, "mejidilogoji")+ , (39, "mokandilogoji")+ , (40, "ogoji")+ , (41, "mokanlelogoji")+ , (42, "mejilelogoji")+ , (43, "metalelogoji")+ , (44, "merinlelogoji")+ , (45, "marundiladota")+ , (46, "merindiladota")+ , (47, "metadiladota")+ , (48, "mejidiladota")+ , (49, "mokandiladota")+ , (50, "adota")+ , (51, "mokanleladota")+ , (52, "mejileladota")+ , (53, "metaleladota")+ , (54, "merinleladota")+ , (55, "marundilogota")+ , (56, "merindilogota")+ , (57, "metadilogota")+ , (58, "mejidilogota")+ , (59, "mokandilogota")+ , (60, "ogota")+ , (61, "mokanlelogota")+ , (62, "mejilelogota")+ , (63, "metalelogota")+ , (64, "merinlelogota")+ , (65, "marundiladorin")+ , (66, "merindiladorin")+ , (67, "metadiladorin")+ , (68, "mejidiladorin")+ , (69, "mokandiladorin")+ , (70, "adorin")+ , (71, "mokanleladorin")+ , (72, "mejileladorin")+ , (73, "metaleladorin")+ , (74, "merinleladorin")+ , (75, "marundilogorin")+ , (76, "merindilogorin")+ , (77, "metadilogorin")+ , (78, "mejidilogorin")+ , (79, "mokandilogorin")+ , (80, "ogorin")+ , (81, "mokanlelogorin")+ , (82, "mejilelogorin")+ , (83, "metalelogorin")+ , (84, "merinlelogorin")+ , (85, "marundiladorun")+ , (86, "merindiladorun")+ , (87, "metadiladorun")+ , (88, "mejidiladorun")+ , (89, "mokandiladorun")+ , (90, "adorun")+ , (91, "mokanleladorun")+ , (92, "mejileladorun")+ , (93, "metaleladorun")+ , (94, "merinleladorun")+ , (95, "marundilogorun")+ , (96, "merindilogorun")+ , (97, "metadilogorun")+ , (98, "mejidilogorun")+ , (99, "mokandilogorun")+ , (100, "ogorun")+ , (200, "ogorun meji")+ , (300, "ogorun meta")+ , (400, "ogorun merin")+ , (500, "ogorun marun")+ , (600, "ogorun mefa")+ , (700, "ogorun meje")+ , (800, "ogorun mejo")+ , (900, "ogorun mesan")+ , (1000, "egberun")+ ]+ )+ ]+
+ src-test/Text/Numeral/Language/ZAQ/TestData.hs view
@@ -0,0 +1,167 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] zaq++[@Native name@] -++[@English name@] Aloápam Zapotec+-}+module Text.Numeral.Language.ZAQ.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-aloapam-zapotec/en/zaq/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "ttubi")+ , (2, "chupa")+ , (3, "tsunna")+ , (4, "ttapa")+ , (5, "gayu")+ , (6, "xxupa")+ , (7, "gasi")+ , (8, "xxunu")+ , (9, "jaa")+ , (10, "tsii")+ , (11, "sinia")+ , (12, "tsi’inu")+ , (13, "tsi’intsagüi")+ , (14, "sitá")+ , (15, "tsinu")+ , (16, "sixupa")+ , (17, "tsini")+ , (18, "sixunu")+ , (19, "chennia")+ , (20, "galhia")+ , (21, "ttuerua")+ , (22, "chuperua")+ , (23, "tsunerua")+ , (24, "ttaperua")+ , (25, "gayuerua")+ , (26, "xxuperua")+ , (27, "gasierua")+ , (28, "xxunuerua")+ , (29, "jaerua")+ , (30, "rerua")+ , (31, "rerua yu’u ttu")+ , (32, "rerua yu’u chupa")+ , (33, "rerua yu’u tsunna")+ , (34, "rerua yu’u ttapa")+ , (35, "rerua yu’u gayu")+ , (36, "rerua yu’u xxupa")+ , (37, "rerua yu’u gasi")+ , (38, "rerua yu’u xxunu")+ , (39, "rerua yu’u jaa")+ , (40, "chua")+ , (41, "chua yu’u ttu")+ , (42, "chua yu’u chupa")+ , (43, "chua yu’u tsunna")+ , (44, "chua yu’u ttapa")+ , (45, "chua yu’u gayu")+ , (46, "chua yu’u xxupa")+ , (47, "chua yu’u gasi")+ , (48, "chua yu’u xxunu")+ , (49, "chua yu’u jaa")+ , (50, "medi gayua")+ , (51, "medi gayua yu’u ttu")+ , (52, "medi gayua yu’u chupa")+ , (53, "medi gayua yu’u tsunna")+ , (54, "medi gayua yu’u ttapa")+ , (55, "medi gayua yu’u gayu")+ , (56, "medi gayua yu’u xxupa")+ , (57, "medi gayua yu’u gasi")+ , (58, "medi gayua yu’u xxunu")+ , (59, "medi gayua yu’u jaa")+ , (60, "gayuna")+ , (61, "gayuna yu’u ttu")+ , (62, "gayuna yu’u chupa")+ , (63, "gayuna yu’u tsunna")+ , (64, "gayuna yu’u ttapa")+ , (65, "gayuna yu’u gayu")+ , (66, "gayuna yu’u xxupa")+ , (67, "gayuna yu’u gasi")+ , (68, "gayuna yu’u xxunu")+ , (69, "gayuna yu’u jaa")+ , (70, "gayuna yu’u tsii")+ , (71, "gayuna yu’u sinia")+ , (72, "gayuna yu’u tsi’inu")+ , (73, "gayuna yu’u si’intse")+ , (74, "gayuna yu’u sitá")+ , (75, "gayuna yu’u tsinu")+ , (76, "gayuna yu’u sixupa")+ , (77, "gayuna yu’u tsini")+ , (78, "gayuna yu’u sixunu")+ , (79, "gayuna yu’u chennia")+ , (80, "ta")+ , (81, "ta yu’u ttu")+ , (82, "ta yu’u chupa")+ , (83, "ta yu’u tsunna")+ , (84, "ta yu’u ttapa")+ , (85, "ta yu’u gayu")+ , (86, "ta yu’u xxupa")+ , (87, "ta yu’u gasi")+ , (88, "ta yu’u xxunu")+ , (89, "ta yu’u jaa")+ , (90, "ta yu’u tsii")+ , (91, "ta yu’u sinia")+ , (92, "ta yu’u tsi’inu")+ , (93, "ta yu’u si’intse")+ , (94, "ta yu’u sitá")+ , (95, "ta yu’u tsinu")+ , (96, "ta yu’u sixupa")+ , (97, "ta yu’u tsini")+ , (98, "ta yu’u sixunu")+ , (99, "ta yu’u chennia")+ , (100, "ttu gayua")+ , (101, "ttu gayua ttubi")+ , (102, "ttu gayua chupa")+ , (103, "ttu gayua tsunna")+ , (104, "ttu gayua ttapa")+ , (105, "ttu gayua gayu")+ , (106, "ttu gayua xxupa")+ , (107, "ttu gayua gasi")+ , (108, "ttu gayua xxunu")+ , (109, "ttu gayua jaa")+ , (110, "ttu gayua tsii")+ , (123, "ttu gayua tsunerua")+ , (200, "chupa gayua")+ , (300, "tsunna gayua")+ , (321, "tsunna gayua ttuerua")+ , (400, "ttapa gayua")+ , (500, "gayu gayua")+ , (600, "xxupa gayua")+ , (700, "gasi gayua")+ , (800, "xxunu gayua")+ , (900, "jaa gayua")+ , (909, "jaa gayua jaa")+ , (990, "jaa gayua ta yu’u tsii")+ , (999, "jaa gayua ta yu’u chennia")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/ZH/TestData.hs view
@@ -0,0 +1,349 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] zh++[@ISO639-2B@] chi++[@ISO639-2T@] zho++[@ISO639-3@] cmn++[@Native name@] 官話++[@English name@] Chinese+-}++module Text.Numeral.Language.ZH.TestData+ ( trad_cardinals+ , simpl_cardinals+ , finance_trad_cardinals+ , finance_simpl_cardinals+ , pinyin_cardinals+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.sf.airnet.ne.jp/~ts/language/number/mandarin.html+-}++-- | Cardinal numbers that are written the same using either+-- traditional or simplified characters.+trad_simpl_cardinals ∷ (Integral i) ⇒ [(i, Text)]+trad_simpl_cardinals =+ [ (0, "零")+ , (1, "一")+ , (2, "二")+ , (3, "三")+ , (4, "四")+ , (5, "五")+ , (6, "六")+ , (7, "七")+ , (8, "八")+ , (9, "九")+ , (10, "十")+ , (11, "十一")+ , (12, "十二")+ , (13, "十三")+ , (14, "十四")+ , (15, "十五")+ , (16, "十六")+ , (17, "十七")+ , (18, "十八")+ , (19, "十九")+ , (20, "二十")+ , (21, "二十一")+ , (22, "二十二")+ , (23, "二十三")+ , (24, "二十四")+ , (25, "二十五")+ , (26, "二十六")+ , (27, "二十七")+ , (28, "二十八")+ , (29, "二十九")+ , (30, "三十")+ , (31, "三十一")+ , (32, "三十二")+ , (33, "三十三")+ , (34, "三十四")+ , (35, "三十五")+ , (36, "三十六")+ , (37, "三十七")+ , (38, "三十八")+ , (39, "三十九")+ , (40, "四十")+ , (41, "四十一")+ , (42, "四十二")+ , (43, "四十三")+ , (44, "四十四")+ , (45, "四十五")+ , (46, "四十六")+ , (47, "四十七")+ , (48, "四十八")+ , (49, "四十九")+ , (50, "五十")+ , (51, "五十一")+ , (52, "五十二")+ , (53, "五十三")+ , (54, "五十四")+ , (55, "五十五")+ , (56, "五十六")+ , (57, "五十七")+ , (58, "五十八")+ , (59, "五十九")+ , (60, "六十")+ , (61, "六十一")+ , (62, "六十二")+ , (63, "六十三")+ , (64, "六十四")+ , (65, "六十五")+ , (66, "六十六")+ , (67, "六十七")+ , (68, "六十八")+ , (69, "六十九")+ , (100, "一百")+ , (114, "一百十四")+ , (200, "二百")+ , (205, "二百〇五")+ , (208, "二百〇八")+ , (280, "二百八十")+ , (301, "三百〇一")+ , (310, "三百十")+ , (1000, "一千")+ , (dec 12, "一兆")+ , (dec 16, "一京")+ , (dec 20, "一垓")+ , (dec 24, "一秭")+ , (dec 28, "一穰")+ , (dec 32, "一溝")+ , (dec 36, "一澗")+ , (dec 40, "一正")+ , (dec 44, "一載")+ ]++trad_cardinals ∷ (Integral i) ⇒ TestData i+trad_cardinals =+ [ ( "default"+ , defaultInflection+ , trad_simpl_cardinals+ ⊕ [ (2000, "兩千")+ , (2008, "兩千〇八")+ , (2080, "兩千〇八十")+ , (2362, "兩千三百六十二")+ , (2800, "兩千八百")+ , (dec 4, "一萬")+ , (10020, "一萬〇二十")+ , (97375, "九萬七千三百七十五")+ , (100004, "十萬〇四")+ , (8734072, "八百七十三萬四千〇七十二")+ , (10050026, "一千〇五萬〇二十六")+ , (dec 8, "一億")+ , (12345678902345, "十二兆三千四百五十六億七千八百九十萬兩千三百四十五")+ ]+ )+ ]++simpl_cardinals ∷ (Integral i) ⇒ TestData i+simpl_cardinals =+ [ ( "default"+ , defaultInflection+ , trad_simpl_cardinals+ ⊕ [ (2000, "两千")+ , (2008, "两千〇八")+ , (2080, "两千〇八十")+ , (2362, "两千三百六十二")+ , (2800, "两千八百")+ , (dec 4, "一万")+ , (dec 8, "一亿")+ ]+ )+ ]++finance_trad_cardinals ∷ (Integral i) ⇒ TestData i+finance_trad_cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "零")+ , (1, "壹")+ , (2, "貳")+ , (3, "参")+ , (4, "肆")+ , (5, "伍")+ , (6, "陸")+ , (7, "柒")+ , (8, "捌")+ , (9, "玖")+ , (10, "拾")+ , (100, "壹伯")+ , (1000, "壹仟")+ , (dec 4, "壹萬")+ , (dec 8, "壹億")+ ]+ )+ ]++finance_simpl_cardinals ∷ (Integral i) ⇒ TestData i+finance_simpl_cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "零")+ , (1, "壹")+ , (2, "贰")+ , (3, "参")+ , (4, "肆")+ , (5, "伍")+ , (6, "陆")+ , (7, "柒")+ , (8, "捌")+ , (9, "玖")+ , (10, "拾")+ , (100, "壹伯")+ , (1000, "壹仟")+ , (dec 4, "壹万")+ , (dec 8, "壹亿")+ ]+ )+ ]++pinyin_cardinals ∷ (Integral i) ⇒ TestData i+pinyin_cardinals =+ [ ( "default"+ , defaultInflection+ , [ (0, "líng")+ , (1, "yī")+ , (2, "èr")+ , (3, "sān")+ , (4, "sì")+ , (5, "wǔ")+ , (6, "liù")+ , (7, "qī")+ , (8, "bā")+ , (9, "jiǔ")+ , (10, "shí")+ , (11, "shíyī")+ , (12, "shíèr")+ , (13, "shísān")+ , (14, "shísì")+ , (15, "shíwǔ")+ , (16, "shíliù")+ , (17, "shíqī")+ , (18, "shíbā")+ , (19, "shíjiǔ")+ , (20, "èrshí")+ , (21, "èrshí yī")+ , (22, "èrshí èr")+ , (23, "èrshí sān")+ , (24, "èrshí sì")+ , (25, "èrshí wǔ")+ , (26, "èrshí liù")+ , (27, "èrshí qī")+ , (28, "èrshí bā")+ , (29, "èrshí jiǔ")+ , (30, "sānshí")+ , (31, "sānshí yī")+ , (32, "sānshí èr")+ , (33, "sānshí sān")+ , (34, "sānshí sì")+ , (35, "sānshí wǔ")+ , (36, "sānshí liù")+ , (37, "sānshí qī")+ , (38, "sānshí bā")+ , (39, "sānshí jiǔ")+ , (40, "sìshí")+ , (41, "sìshí yī")+ , (42, "sìshí èr")+ , (43, "sìshí sān")+ , (44, "sìshí sì")+ , (45, "sìshí wǔ")+ , (46, "sìshí liù")+ , (47, "sìshí qī")+ , (48, "sìshí bā")+ , (49, "sìshí jiǔ")+ , (50, "wǔshí")+ , (51, "wǔshí yī")+ , (52, "wǔshí èr")+ , (53, "wǔshí sān")+ , (54, "wǔshí sì")+ , (55, "wǔshí wǔ")+ , (56, "wǔshí liù")+ , (57, "wǔshí qī")+ , (58, "wǔshí bā")+ , (59, "wǔshí jiǔ")+ , (60, "liùshí")+ , (61, "liùshí yī")+ , (62, "liùshí èr")+ , (63, "liùshí sān")+ , (64, "liùshí sì")+ , (65, "liùshí wǔ")+ , (66, "liùshí liù")+ , (67, "liùshí qī")+ , (68, "liùshí bā")+ , (69, "liùshí jiǔ")+ , (70, "qīshí")+ , (71, "qīshí yī")+ , (72, "qīshí èr")+ , (73, "qīshí sān")+ , (74, "qīshí sì")+ , (75, "qīshí wǔ")+ , (76, "qīshí liù")+ , (77, "qīshí qī")+ , (78, "qīshí bā")+ , (79, "qīshí jiǔ")+ , (80, "bāshí")+ , (81, "bāshí yī")+ , (82, "bāshí èr")+ , (83, "bāshí sān")+ , (84, "bāshí sì")+ , (85, "bāshí wǔ")+ , (86, "bāshí liù")+ , (87, "bāshí qī")+ , (88, "bāshí bā")+ , (89, "bāshí jiǔ")+ , (90, "jiǔshí")+ , (91, "jiǔshí yī")+ , (92, "jiǔshí èr")+ , (93, "jiǔshí sān")+ , (94, "jiǔshí sì")+ , (95, "jiǔshí wǔ")+ , (96, "jiǔshí liù")+ , (97, "jiǔshí qī")+ , (98, "jiǔshí bā")+ , (99, "jiǔshí jiǔ")+ , (100, "yībǎi")+ , (208, "èrbǎi líng bā")+ , (280, "èrbǎi bāshí")+ , (1000, "yīqiān")+ , (1002, "yīqiān líng èr")+ , (1020, "yīqiān líng èrshí")+ , (1200, "yīqiān èrbǎi")+ , (1203, "yīqiān èrbǎi líng sān")+ , (1230, "yīqiān èrbǎi sānshí")+ , (1234, "yīqiān èrbǎi sānshí sì")+ , (2008, "liǎngqiān líng bā")+ , (2080, "liǎngqiān líng bāshí")+ , (2800, "liǎngqiān bābǎi")+ , (97375, "jiǔwàn qīqiān sānbǎi qīshí wǔ")+ ]+ )+ ]
+ src-test/Text/Numeral/Language/ZPC/TestData.hs view
@@ -0,0 +1,167 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] zpc++[@Native name@] -++[@English name@] Choapan Zapotec+-}+module Text.Numeral.Language.ZPC.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Num )+import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+ http://www.languagesandnumbers.com/how-to-count-in-choapan-zapotec/en/zpc/+-}++cardinals ∷ (Num i) ⇒ TestData i+cardinals =+ [ ( "default"+ , defaultInflection+ , [ (1, "tu")+ , (2, "chopa")+ , (3, "tzona")+ , (4, "tapa")+ , (5, "ga’yo’")+ , (6, "xopa")+ , (7, "gadyi")+ , (8, "xuna’")+ , (9, "ga")+ , (10, "chi")+ , (11, "chiptu")+ , (12, "chipchopa")+ , (13, "chi’nnu")+ , (14, "chi’da’")+ , (15, "chi’no’")+ , (16, "chi’no’ be tu")+ , (17, "chi’no’ be chopa")+ , (18, "chi’no be tzona")+ , (19, "tu galo")+ , (20, "galo")+ , (21, "galo be tu")+ , (22, "galo be chopa")+ , (23, "galo be tzona")+ , (24, "galo be tapa")+ , (25, "galo be ga’yo’")+ , (26, "galo be xopa")+ , (27, "galo be gadyi")+ , (28, "galo be xuna’")+ , (29, "galo be ga")+ , (30, "galo be chi")+ , (31, "galo be chi tu")+ , (32, "galo be chi chopa")+ , (33, "galo be chi tzona")+ , (34, "galo be chi tapa")+ , (35, "galo be chi ga’yo’")+ , (36, "galo be chi xopa")+ , (37, "galo be chi gadyi")+ , (38, "galo be chi xuna’")+ , (39, "galo be chi ga")+ , (40, "chopa galo")+ , (41, "chopa galo tu")+ , (42, "chopa galo chopa")+ , (43, "chopa galo tzona")+ , (44, "chopa galo tapa")+ , (45, "chopa galo ga’yo’")+ , (46, "chopa galo xopa")+ , (47, "chopa galo gadyi")+ , (48, "chopa galo xuna’")+ , (49, "chopa galo ga")+ , (50, "chopa galo chi")+ , (51, "chopa galo chi tu")+ , (52, "chopa galo chi chopa")+ , (53, "chopa galo chi tzona")+ , (54, "chopa galo chi tapa")+ , (55, "chopa galo chi ga’yo’")+ , (56, "chopa galo chi xopa")+ , (57, "chopa galo chi gadyi")+ , (58, "chopa galo chi xuna’")+ , (59, "chopa galo chi ga")+ , (60, "tzona galo")+ , (61, "tzona galo tu")+ , (62, "tzona galo chopa")+ , (63, "tzona galo tzona")+ , (64, "tzona galo tapa")+ , (65, "tzona galo ga’yo’")+ , (66, "tzona galo xopa")+ , (67, "tzona galo gadyi")+ , (68, "tzona galo xuna’")+ , (69, "tzona galo ga")+ , (70, "tzona galo chi")+ , (71, "tzona galo chi tu")+ , (72, "tzona galo chi chopa")+ , (73, "tzona galo chi tzona")+ , (74, "tzona galo chi tapa")+ , (75, "tzona galo chi ga’yo’")+ , (76, "tzona galo chi xopa")+ , (77, "tzona galo chi gadyi")+ , (78, "tzona galo chi xuna’")+ , (79, "tzona galo chi ga")+ , (80, "tapa galo")+ , (81, "tapa galo tu")+ , (82, "tapa galo chopa")+ , (83, "tapa galo tzona")+ , (84, "tapa galo tapa")+ , (85, "tapa galo ga’yo’")+ , (86, "tapa galo xopa")+ , (87, "tapa galo gadyi")+ , (88, "tapa galo xuna’")+ , (89, "tapa galo ga")+ , (90, "tapa galo chi")+ , (91, "tapa galo chi tu")+ , (92, "tapa galo chi chopa")+ , (93, "tapa galo chi tzona")+ , (94, "tapa galo chi tapa")+ , (95, "tapa galo chi ga’yo’")+ , (96, "tapa galo chi xopa")+ , (97, "tapa galo chi gadyi")+ , (98, "tapa galo chi xuna’")+ , (99, "tapa galo chi ga")+ , (100, "tu gayua")+ , (101, "tu gayua tu")+ , (102, "tu gayua chopa")+ , (103, "tu gayua tzona")+ , (104, "tu gayua tapa")+ , (105, "tu gayua ga’yo’")+ , (106, "tu gayua xopa")+ , (107, "tu gayua gadyi")+ , (108, "tu gayua xuna’")+ , (109, "tu gayua ga")+ , (110, "tu gayua chi")+ , (123, "tu gayua galo be tzona")+ , (200, "chopa gayua")+ , (300, "tzona gayua")+ , (321, "tzona gayua galo be tu")+ , (400, "tapa gayua")+ , (500, "ga’yo’ gayua")+ , (600, "xopa gayua")+ , (700, "gadyi gayua")+ , (800, "xuna’ gayua")+ , (900, "ga gayua")+ , (909, "ga gayua ga")+ , (990, "ga gayua tapa galo chi")+ , (999, "ga gayua tapa galo chi ga")+ ]+ )+ ]
+ src-test/Text/Numeral/Test.hs view
@@ -0,0 +1,11 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++module Text.Numeral.Test ( TestData ) where++import "base" Data.String ( String )+import "numerals" Text.Numeral.Grammar.Reified ( Inflection )+import "text" Data.Text ( Text )++type TestData n = [(String, Inflection, [(n, Text)])]
+ src-test/test.hs view
@@ -0,0 +1,675 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}+++module Main where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Control.Monad ( (=<<), when )+import "base" Data.Bool ( Bool(True) )+import "base" Data.Function ( ($), on )+import "base" Data.List ( filter, groupBy, head, intercalate, length, map, sortBy )+import "base" Data.Maybe ( Maybe(Just), fromMaybe )+import "base" Data.Ord ( (<), (>), compare )+import "base" Data.Tuple ( fst, snd )+import "base" Prelude ( (+), (-), String )+import "base" System.Environment ( getArgs )+import "base" System.IO ( IO )+import "base" Text.Printf ( printf )+import "base" Text.Show ( Show, show )+import "base-unicode-symbols" Data.Eq.Unicode ( (≡), (≢) )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ, (⋅) )+import "HUnit" Test.HUnit ( Assertion, assertFailure, assertBool )+import "numerals" Text.Numeral.Grammar+import qualified "numerals" Text.Numeral.Grammar.Reified as GR+import "numerals" Text.Numeral.Misc ( dec, intLog )+import "QuickCheck" Test.QuickCheck.Modifiers+ ( Positive(Positive), NonNegative(NonNegative) )+import "test-framework" Test.Framework ( defaultMainWithOpts+ , interpretArgsOrExit+ , ropt_hide_successes+ , Test, testGroup+ )+import "test-framework-hunit" Test.Framework.Providers.HUnit ( testCase )+import "test-framework-quickcheck2" Test.Framework.Providers.QuickCheck2 ( testProperty )+import "this" Text.Numeral.Test ( TestData )+import "text" Data.Text ( Text )+import qualified "text" Data.Text as T ( unpack )++import qualified "numerals" Text.Numeral.Language.AF as AF+import qualified "numerals" Text.Numeral.Language.AMP as AMP+import qualified "numerals" Text.Numeral.Language.BG as BG+import qualified "numerals" Text.Numeral.Language.CHN as CHN+import qualified "numerals" Text.Numeral.Language.CHR as CHR+import qualified "numerals" Text.Numeral.Language.CLM as CLM+import qualified "numerals" Text.Numeral.Language.CS as CS+import qualified "numerals" Text.Numeral.Language.DE as DE+import qualified "numerals" Text.Numeral.Language.EN as EN+import qualified "numerals" Text.Numeral.Language.EO as EO+import qualified "numerals" Text.Numeral.Language.ES as ES+import qualified "numerals" Text.Numeral.Language.FI as FI+import qualified "numerals" Text.Numeral.Language.FR as FR+import qualified "numerals" Text.Numeral.Language.FUR as FUR+import qualified "numerals" Text.Numeral.Language.GSW as GSW+import qualified "numerals" Text.Numeral.Language.GV as GV+import qualified "numerals" Text.Numeral.Language.HE as HE+import qualified "numerals" Text.Numeral.Language.HOP as HOP+import qualified "numerals" Text.Numeral.Language.IT as IT+import qualified "numerals" Text.Numeral.Language.JA as JA+import qualified "numerals" Text.Numeral.Language.LA as LA+import qualified "numerals" Text.Numeral.Language.LLD as LLD+import qualified "numerals" Text.Numeral.Language.MG as MG+import qualified "numerals" Text.Numeral.Language.NL as NL+import qualified "numerals" Text.Numeral.Language.NO as NO+import qualified "numerals" Text.Numeral.Language.NQM as NQM+import qualified "numerals" Text.Numeral.Language.OJ as OJ+import qualified "numerals" Text.Numeral.Language.PDC as PDC+import qualified "numerals" Text.Numeral.Language.PL as PL+import qualified "numerals" Text.Numeral.Language.PT as PT+import qualified "numerals" Text.Numeral.Language.RU as RU+import qualified "numerals" Text.Numeral.Language.SCO as SCO+import qualified "numerals" Text.Numeral.Language.SV as SV+import qualified "numerals" Text.Numeral.Language.TR as TR+import qualified "numerals" Text.Numeral.Language.WO as WO+import qualified "numerals" Text.Numeral.Language.YOR as YOR+import qualified "numerals" Text.Numeral.Language.ZH as ZH++import qualified "this" Text.Numeral.Language.ACH.TestData as ACH+import qualified "this" Text.Numeral.Language.ADY.TestData as ADY+import qualified "this" Text.Numeral.Language.AF.TestData as AF+import qualified "this" Text.Numeral.Language.AMP.TestData as AMP+import qualified "this" Text.Numeral.Language.ARI.TestData as ARI+import qualified "this" Text.Numeral.Language.AST.TestData as AST+import qualified "this" Text.Numeral.Language.AZ.TestData as AZ+import qualified "this" Text.Numeral.Language.BA.TestData as BA+import qualified "this" Text.Numeral.Language.BG.TestData as BG+import qualified "this" Text.Numeral.Language.BM.TestData as BM+import qualified "this" Text.Numeral.Language.CA.TestData as CA+import qualified "this" Text.Numeral.Language.CAF.TestData as CAF+import qualified "this" Text.Numeral.Language.CBK.TestData as CBK+import qualified "this" Text.Numeral.Language.CHN.TestData as CHN+import qualified "this" Text.Numeral.Language.CHR.TestData as CHR+import qualified "this" Text.Numeral.Language.CLM.TestData as CLM+import qualified "this" Text.Numeral.Language.CO.TestData as CO+import qualified "this" Text.Numeral.Language.COD.TestData as COD+import qualified "this" Text.Numeral.Language.COO.TestData as COO+import qualified "this" Text.Numeral.Language.CS.TestData as CS+import qualified "this" Text.Numeral.Language.CY.TestData as CY+import qualified "this" Text.Numeral.Language.DE.TestData as DE+import qualified "this" Text.Numeral.Language.DJK.TestData as DJK+import qualified "this" Text.Numeral.Language.EN.TestData as EN+import qualified "this" Text.Numeral.Language.EO.TestData as EO+import qualified "this" Text.Numeral.Language.ES.TestData as ES+import qualified "this" Text.Numeral.Language.ET.TestData as ET+import qualified "this" Text.Numeral.Language.FI.TestData as FI+import qualified "this" Text.Numeral.Language.FO.TestData as FO+import qualified "this" Text.Numeral.Language.FR.TestData as FR+import qualified "this" Text.Numeral.Language.FUR.TestData as FUR+import qualified "this" Text.Numeral.Language.GCF_MTQ.TestData as GCF_MTQ+import qualified "this" Text.Numeral.Language.GIL.TestData as GIL+import qualified "this" Text.Numeral.Language.GL.TestData as GL+import qualified "this" Text.Numeral.Language.GSW.TestData as GSW+import qualified "this" Text.Numeral.Language.GV.TestData as GV+import qualified "this" Text.Numeral.Language.HAI.TestData as HAI+import qualified "this" Text.Numeral.Language.HE.TestData as HE+import qualified "this" Text.Numeral.Language.HOP.TestData as HOP+import qualified "this" Text.Numeral.Language.HR.TestData as HR+import qualified "this" Text.Numeral.Language.HU.TestData as HU+import qualified "this" Text.Numeral.Language.HY.TestData as HY+import qualified "this" Text.Numeral.Language.IT.TestData as IT+import qualified "this" Text.Numeral.Language.JA.TestData as JA+import qualified "this" Text.Numeral.Language.KAP.TestData as KAP+import qualified "this" Text.Numeral.Language.KEA.TestData as KEA+import qualified "this" Text.Numeral.Language.LA.TestData as LA+import qualified "this" Text.Numeral.Language.LLD.TestData as LLD+import qualified "this" Text.Numeral.Language.MG.TestData as MG+import qualified "this" Text.Numeral.Language.MOH.TestData as MOH+import qualified "this" Text.Numeral.Language.NL.TestData as NL+import qualified "this" Text.Numeral.Language.NO.TestData as NO+import qualified "this" Text.Numeral.Language.NQM.TestData as NQM+import qualified "this" Text.Numeral.Language.OJ.TestData as OJ+import qualified "this" Text.Numeral.Language.PAA.TestData as PAA+import qualified "this" Text.Numeral.Language.PDC.TestData as PDC+import qualified "this" Text.Numeral.Language.PL.TestData as PL+import qualified "this" Text.Numeral.Language.PT.TestData as PT+import qualified "this" Text.Numeral.Language.RMN_DZA.TestData as RMN_DZA+import qualified "this" Text.Numeral.Language.RO.TestData as RO+import qualified "this" Text.Numeral.Language.RU.TestData as RU+import qualified "this" Text.Numeral.Language.SCO.TestData as SCO+import qualified "this" Text.Numeral.Language.SV.TestData as SV+import qualified "this" Text.Numeral.Language.TAR.TestData as TAR+import qualified "this" Text.Numeral.Language.TR.TestData as TR+import qualified "this" Text.Numeral.Language.WO.TestData as WO+import qualified "this" Text.Numeral.Language.YOR.TestData as YOR+import qualified "this" Text.Numeral.Language.ZAQ.TestData as ZAQ+import qualified "this" Text.Numeral.Language.ZH.TestData as ZH+import qualified "this" Text.Numeral.Language.ZPC.TestData as ZPC+++--------------------------------------------------------------------------------+-- Test suite+--------------------------------------------------------------------------------++main ∷ IO ()+main = do opts ← interpretArgsOrExit =<< getArgs+ defaultMainWithOpts tests opts { ropt_hide_successes = Just True }++tests ∷ [Test]+tests =+ [ testGroup "Grammar"+ [ testGroup "Case"+ [ testCase "noCase" $ testInf noCase hasNoCase+ , testCase "nominative" $ testInf nominative isNominative+ , testCase "accusative" $ testInf accusative isAccusative+ , testCase "dative" $ testInf dative isDative+ , testCase "ablative" $ testInf ablative isAblative+ , testCase "genitive" $ testInf genitive isGenitive+ , testCase "vocative" $ testInf vocative isVocative+ , testCase "instrumental" $ testInf instrumental isInstrumental+ ]+ , testGroup "Gender"+ [ testCase "noGender" $ testInf noGender hasNoGender+ , testCase "neuter" $ testInf neuter isNeuter+ , testCase "masculine" $ testInf masculine isMasculine+ , testCase "feminine" $ testInf feminine isFeminine+ , testCase "common" $ testInf common isCommon+ ]+ , testGroup "Number"+ [ testCase "noNumber" $ testInf noNumber hasNoNumber+ , testCase "singular" $ testInf singular isSingular+ , testCase "dual" $ testInf dual isDual+ , testCase "trial" $ testInf trial isTrial+ , testCase "paucal" $ testInf paucal isPaucal+ , testCase "plural" $ testInf plural isPlural+ ]+ ]+ , testGroup "Misc"+ [ testGroup "intLog"+ [ testProperty "power of 10" intLog_pow10+ , testProperty "power of 10 minus 1" intLog_pow10m1+ , testProperty "multiply" intLog_mul+ ]+ ]+ , testGroup "ACH"+ [ testGroup "unique data"+ [testUnique "cardinal" (ACH.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "ADY"+ [ testGroup "unique data"+ [testUnique "cardinal" (ADY.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "AF"+ [ testGroup "unique data"+ [ testUnique "cardinal" (AF.cardinals ∷ TestData ℤ)+ , testUnique "ordinal" (AF.ordinals ∷ TestData ℤ)+ ]+ , mkTests "cardinal" AF.cardinal (AF.cardinals ∷ TestData ℤ)+ , mkTests "ordinal" AF.ordinal (AF.ordinals ∷ TestData ℤ)+ ]+ , testGroup "AMP"+ [ testGroup "unique data"+ [testUnique "cardinal" (AMP.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" AMP.cardinal (AMP.cardinals ∷ TestData ℤ)+ ]+ , testGroup "ARI"+ [ testGroup "unique data"+ [testUnique "cardinal" (ARI.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "AST"+ [ testGroup "unique data"+ [testUnique "cardinal" (AST.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "AZ"+ [ testGroup "unique data"+ [testUnique "cardinal" (AZ.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "BA"+ [ testGroup "unique data"+ [testUnique "cardinal" (BA.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "BG"+ [ testGroup "unique data"+ [testUnique "cardinal" (BG.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" BG.cardinal (BG.cardinals ∷ TestData ℤ)+ ]+ , testGroup "BM"+ [ testGroup "unique data"+ [testUnique "cardinal" (BM.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "CA"+ [ testGroup "unique data"+ [testUnique "cardinal" (CA.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "CAF"+ [ testGroup "unique data"+ [ testUnique "cardinal" (CAF.cardinals ∷ TestData ℤ)+ , testUnique "cardinal (syllabic)" (CAF.syllabic_cardinals ∷ TestData ℤ)+ ]+ ]+ , testGroup "CBK"+ [ testGroup "unique data"+ [testUnique "cardinal" (CBK.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "CHN"+ [ testGroup "unique data"+ [testUnique "cardinal" (CHN.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" CHN.cardinal (CHN.cardinals ∷ TestData ℤ)+ ]+ , testGroup "CHR"+ [ testGroup "unique data"+ [testUnique "cardinal" (CHR.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" CHR.cardinal (CHR.cardinals ∷ TestData ℤ)+ ]+ , testGroup "CLM"+ [ testGroup "unique data"+ [testUnique "cardinal" (CLM.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" CLM.cardinal (CLM.cardinals ∷ TestData ℤ)+ ]+ , testGroup "CO"+ [ testGroup "unique data"+ [testUnique "cardinal" (CO.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "COD"+ [ testGroup "unique data"+ [testUnique "cardinal" (COD.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "COO"+ [ testGroup "unique data"+ [testUnique "cardinal" (COO.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "CS"+ [ testGroup "unique data"+ [testUnique "cardinal" (CS.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" CS.cardinal (CS.cardinals ∷ TestData ℤ)+ ]+ , testGroup "CY"+ [ testGroup "unique data"+ [testUnique "cardinal" (CY.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "DE"+ [ testGroup "unique data"+ [ testUnique "cardinal" (DE.cardinals ∷ TestData ℤ)+ , testUnique "ordinal" (DE.ordinals ∷ TestData ℤ)+ ]+ , mkTests "cardinal" DE.cardinal (DE.cardinals ∷ TestData ℤ)+ , mkTests "ordinal" DE.ordinal (DE.ordinals ∷ TestData ℤ)+ ]+ , testGroup "DJK"+ [ testGroup "unique data"+ [testUnique "cardinal" (DJK.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "EN"+ [ testGroup "GB"+ [ testGroup "unique data"+ [ testUnique "cardinal" (EN.gb_cardinals ∷ TestData ℤ)+ , testUnique "ordinal" (EN.gb_ordinals ∷ TestData ℤ)+ ]+ , mkTests "cardinal" EN.gb_cardinal (EN.gb_cardinals ∷ TestData ℤ)+ , mkTests "ordinal" EN.gb_ordinal (EN.gb_ordinals ∷ TestData ℤ)+ ]+ , testGroup "US"+ [ testGroup "unique data"+ [ testUnique "cardinal" (EN.us_cardinals ∷ TestData ℤ)+ , testUnique "ordinal" (EN.us_ordinals ∷ TestData ℤ)+ ]+ , mkTests "cardinal" EN.us_cardinal (EN.us_cardinals ∷ TestData ℤ)+ , mkTests "ordinal" EN.us_ordinal (EN.us_ordinals ∷ TestData ℤ)+ ]+ ]+ , testGroup "EO"+ [ testGroup "unique data"+ [testUnique "cardinal" (EO.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" EO.cardinal (EO.cardinals ∷ TestData ℤ)+ ]+ , testGroup "ES"+ [ testGroup "unique data"+ [testUnique "cardinal" (ES.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" ES.cardinal (ES.cardinals ∷ TestData ℤ)+ ]+ , testGroup "ET"+ [ testGroup "unique data"+ [testUnique "cardinal" (ET.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "FI"+ [ testGroup "unique data"+ [ testUnique "cardinal" (FI.cardinals ∷ TestData ℤ)+ , testUnique "ordinal" (FI.ordinals ∷ TestData ℤ)+ ]+ , mkTests "cardinal" FI.cardinal (FI.cardinals ∷ TestData ℤ)+ , mkTests "ordinal" FI.ordinal (FI.ordinals ∷ TestData ℤ)+ ]+ , testGroup "FO"+ [ testGroup "unique data"+ [testUnique "cardinal" (FO.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "FR"+ [ testGroup "unique data"+ [ testUnique "cardinal" (FR.cardinals ∷ TestData ℤ)+ , testUnique "ordinal" (FR.ordinals ∷ TestData ℤ)+ ]+ , mkTests "cardinal" FR.cardinal (FR.cardinals ∷ TestData ℤ)+ , mkTests "ordinal" FR.ordinal (FR.ordinals ∷ TestData ℤ)+ ]+ , testGroup "FUR"+ [ testGroup "unique data"+ [testUnique "cardinal" (FUR.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" FUR.cardinal (FUR.cardinals ∷ TestData ℤ)+ ]+ , testGroup "GCF_MTQ"+ [ testGroup "unique data"+ [testUnique "cardinal" (GCF_MTQ.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "GIL"+ [ testGroup "unique data"+ [testUnique "cardinal" (GIL.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "GL"+ [ testGroup "unique data"+ [testUnique "cardinal" (GL.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "GSW"+ [ testGroup "unique data"+ [testUnique "cardinal" (GSW.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" GSW.cardinal (GSW.cardinals ∷ TestData ℤ)+ ]+ , testGroup "GV"+ [ testGroup "unique data"+ [testUnique "cardinal" (GV.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" GV.cardinal (GV.cardinals ∷ TestData ℤ)+ ]+ , testGroup "HAI"+ [ testGroup "unique data"+ [testUnique "cardinal" (HAI.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "HE"+ [ testGroup "unique data"+ [testUnique "cardinal" (HE.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" HE.cardinal (HE.cardinals ∷ TestData ℤ)+ ]+ , testGroup "HOP"+ [ testGroup "unique data"+ [testUnique "cardinal" (HOP.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" HOP.cardinal (HOP.cardinals ∷ TestData ℤ)+ ]+ , testGroup "HR"+ [ testGroup "unique data"+ [testUnique "cardinal" (HR.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "HU"+ [ testGroup "unique data"+ [testUnique "cardinal" (HU.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "HY"+ [ testGroup "unique data"+ [testUnique "cardinal" (HY.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "IT"+ [ testGroup "unique data"+ [testUnique "cardinal" (IT.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" IT.cardinal (IT.cardinals ∷ TestData ℤ)+ , mkTests "ordinal" IT.ordinal (IT.ordinals ∷ TestData ℤ)+ ]+ , testGroup "JA"+ [ testGroup "preferred"+ [ testGroup "unique data"+ [testUnique "cardinal" (JA.preferred_cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" JA.preferred_cardinal+ (JA.preferred_cardinals ∷ TestData ℤ)+ ]+ , testGroup "kanji"+ [ testGroup "unique data"+ [testUnique "cardinal" (JA.kanji_cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" JA.kanji_cardinal (JA.kanji_cardinals ∷ TestData ℤ)+ ]+ , testGroup "daiji"+ [ testGroup "unique data"+ [testUnique "cardinal" (JA.daiji_cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" JA.daiji_cardinal (JA.daiji_cardinals ∷ TestData ℤ)+ ]+ ]+ , testGroup "KAP"+ [ testGroup "unique data"+ [testUnique "cardinal" (KAP.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "KEA"+ [ testGroup "unique data"+ [testUnique "cardinal" (KEA.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "LA"+ [ testGroup "unique data"+ [testUnique "cardinal" (LA.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" LA.cardinal (LA.cardinals ∷ TestData ℤ)+ ]+ , testGroup "LLD"+ [ testGroup "unique data"+ [testUnique "cardinal" (LLD.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" LLD.cardinal (LLD.cardinals ∷ TestData ℤ)+ ]+ , testGroup "MG"+ [ testGroup "unique data"+ [testUnique "cardinal" (MG.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" MG.cardinal (MG.cardinals ∷ TestData ℤ)+ ]+ , testGroup "MOH"+ [ testGroup "unique data"+ [testUnique "cardinal" (MOH.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "NL"+ [ testGroup "unique data"+ [ testUnique "cardinal" (NL.cardinals ∷ TestData ℤ)+ , testUnique "ordinal" (NL.ordinals ∷ TestData ℤ)+ , testUnique "partitive" (NL.partitives ∷ TestData (ℤ, ℤ))+ , testUnique "multiplicative" (NL.multiplicatives ∷ TestData ℤ)+ ]+ , mkTests "cardinal" NL.cardinal (NL.cardinals ∷ TestData ℤ)+ , mkTests "ordinal" NL.ordinal (NL.ordinals ∷ TestData ℤ)+ , mkTests "partitive" NL.partitive (NL.partitives ∷ TestData (ℤ, ℤ))+ , mkTests "multiplicative" NL.multiplicative (NL.multiplicatives ∷ TestData ℤ)+ ]+ , testGroup "NO"+ [ testGroup "unique data"+ [testUnique "cardinal" (NO.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" NO.cardinal (NO.cardinals ∷ TestData ℤ)+ ]+ , testGroup "NQM"+ [ testGroup "unique data"+ [testUnique "cardinal" (NQM.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" NQM.cardinal (NQM.cardinals ∷ TestData ℤ)+ ]+ , testGroup "OJ"+ [ testGroup "unique data"+ [testUnique "cardinal" (OJ.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" OJ.cardinal (OJ.cardinals ∷ TestData ℤ)+ ]+ , testGroup "PAA"+ [ testGroup "unique data"+ [testUnique "cardinal" (PAA.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "PDC"+ [ testGroup "unique data"+ [testUnique "cardinal" (PDC.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" PDC.cardinal (PDC.cardinals ∷ TestData ℤ)+ ]+ , testGroup "PL"+ [ testGroup "unique data"+ [testUnique "cardinal" (PL.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" PL.cardinal (PL.cardinals ∷ TestData ℤ)+ ]+ , testGroup "PT"+ [ testGroup "unique data"+ [testUnique "cardinal" (PT.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" PT.cardinal (PT.cardinals ∷ TestData ℤ)+ , mkTests "ordinal" PT.ordinal (PT.ordinals ∷ TestData ℤ)+ ]+ , testGroup "RMN_DZA"+ [ testGroup "unique data"+ [testUnique "cardinal" (RMN_DZA.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "RO"+ [ testGroup "unique data"+ [testUnique "cardinal" (RO.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "RU"+ [ testGroup "unique data"+ [testUnique "cardinal" (RU.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" RU.cardinal (RU.cardinals ∷ TestData ℤ)+ ]+ , testGroup "SCO"+ [ testGroup "unique data"+ [testUnique "cardinal" (SCO.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" SCO.cardinal (SCO.cardinals ∷ TestData ℤ)+ ]+ , testGroup "SV"+ [ testGroup "unique data"+ [ testUnique "cardinal" (SV.cardinals ∷ TestData ℤ)+ , testUnique "ordinal" (SV.ordinals ∷ TestData ℤ)+ ]+ , mkTests "cardinal" SV.cardinal (SV.cardinals ∷ TestData ℤ)+ , mkTests "ordinal" SV.ordinal (SV.ordinals ∷ TestData ℤ)+ ]+ , testGroup "TAR"+ [ testGroup "unique data"+ [testUnique "cardinal" (TAR.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "TR"+ [ testGroup "unique data"+ [testUnique "cardinal" (TR.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" TR.cardinal (TR.cardinals ∷ TestData ℤ)+ ]+ , testGroup "WO"+ [ testGroup "unique data"+ [testUnique "cardinal" (WO.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" WO.cardinal (WO.cardinals ∷ TestData ℤ)+ ]+ , testGroup "YOR"+ [ testGroup "unique data"+ [testUnique "cardinal" (YOR.cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" YOR.cardinal (YOR.cardinals ∷ TestData ℤ)+ ]+ , testGroup "ZAQ"+ [ testGroup "unique data"+ [testUnique "cardinal" (ZAQ.cardinals ∷ TestData ℤ)]+ ]+ , testGroup "ZH"+ [ testGroup "characters (traditional)"+ [ testGroup "unique data"+ [testUnique "cardinal" (ZH.trad_cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" ZH.trad_cardinal (ZH.trad_cardinals ∷ TestData ℤ)+ ]+ , testGroup "characters (simplified)"+ [ testGroup "unique data"+ [testUnique "cardinal" (ZH.simpl_cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" ZH.simpl_cardinal (ZH.simpl_cardinals ∷ TestData ℤ)+ ]+ , testGroup "financial characters (traditional)"+ [ testGroup "unique data"+ [testUnique "cardinal" (ZH.finance_trad_cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" ZH.finance_trad_cardinal (ZH.finance_trad_cardinals ∷ TestData ℤ)+ ]+ , testGroup "financial characters (simplified)"+ [ testGroup "unique data"+ [testUnique "cardinal" (ZH.finance_simpl_cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" ZH.finance_simpl_cardinal (ZH.finance_simpl_cardinals ∷ TestData ℤ)+ ]+ , testGroup "pinyin"+ [ testGroup "unique data"+ [testUnique "cardinal" (ZH.pinyin_cardinals ∷ TestData ℤ)]+ , mkTests "cardinal" ZH.pinyin_cardinal (ZH.pinyin_cardinals ∷ TestData ℤ)+ ]+ , testGroup "ZPC"+ [ testGroup "unique data"+ [testUnique "cardinal" (ZPC.cardinals ∷ TestData ℤ)]+ ]+ ]+ ]+++--------------------------------------------------------------------------------+-- Utils+--------------------------------------------------------------------------------++{-+-- TODO: this takes way to long for large values (10 ^ 60000 - 1)+testBounds ∷ Text → (ℤ → Maybe Text) → (ℤ, ℤ) → Test+testBounds name conversion bounds@(lo, hi) =+ testGroup name+ [ testCase "lower bound" $ assertBool "conversion error" $ checkConv lo+ , testCase "upper bound" $ assertBool "conversion error" $ checkConv hi+ -- , testProperty "in between" $ forAll (choose bounds) checkConv+ ]+ where+ checkConv ∷ ℤ → Bool+ checkConv = isJust ∘ conversion+-}++testInf ∷ (GR.Inflection → GR.Inflection) → (GR.Inflection → Bool) → Assertion+testInf set test = assertBool "False" $ test $ set GR.defaultInflection++intLog_pow10 ∷ Positive ℤ → Bool+intLog_pow10 (Positive x) = x ≡ intLog (dec x)++intLog_pow10m1 ∷ NonNegative ℤ → Bool+intLog_pow10m1 (NonNegative x) = x - 1 ≡ intLog (dec x) - 1++intLog_mul ∷ Positive ℤ → Positive ℤ → Bool+intLog_mul (Positive x) (Positive y) = intLog (dec x ⋅ dec y) ≡ intLog (dec x) + intLog (dec y)++mkTests ∷ ∀ α. (Show α)+ ⇒ String+ → (GR.Inflection → α → Maybe Text)+ → TestData α+ → Test+mkTests name f = testGroup name ∘ map perInflection+ where+ perInflection ∷ (String, GR.Inflection, [(α, Text)]) → Test+ perInflection (infName, inf, xs) = testGroup infName $ map (perValue inf) xs++ perValue ∷ GR.Inflection → (α, Text) → Test+ perValue inf (n, s) = testCase (show n) $ testConversion f inf n s++-- | Tests whether the test data contains duplicates (different+-- numbers with the same representation).+testUnique ∷ ∀ α. (Show α) ⇒ String → TestData α → Test+testUnique name = testGroup name ∘ map perInflection+ where+ perInflection ∷ (String, inf, [(α, Text)]) → Test+ perInflection (infName, _, xs) = testCase infName $ unique xs++ unique ∷ [(α, Text)] → Assertion+ unique xs = when (length ys > 0)+ $ assertFailure+ $ intercalate "\n" $ map msg ys+ where+ ys ∷ [[(α, Text)]]+ ys = filter ((1 <) ∘ length)+ $ groupBy ((≡) `on` snd)+ $ sortBy (compare `on` snd) xs++ msg ∷ [(α, Text)] → String+ msg xs = let (_, s) = head xs+ in printf "The string \"%s\" is associated with multiple values: %s"+ (T.unpack s)+ (intercalate ", " $ map (show ∘ fst) xs)++testConversion ∷ (Show α)+ ⇒ (GR.Inflection → α → Maybe Text)+ → GR.Inflection+ → α+ → Text+ → Assertion+testConversion f inf n s =+ let r = f inf n+ in when (r ≢ Just s)+ $ assertFailure+ $ printf "Expected %s = \"%s\" but got \"%s\""+ (show n)+ (T.unpack s)+ (T.unpack $ fromMaybe "no result" r)
+ src/Text/Numeral.hs view
@@ -0,0 +1,72 @@+{-# LANGUAGE PackageImports #-}++module Text.Numeral+ ( -- * Overview+ -- $overview++ -- ** Expression language+ -- $dsl++ -- ** Rules+ -- $rules++ -- ** Rendering+ -- $render++ module Text.Numeral.Exp.Reified+ , module Text.Numeral.Render+ , module Text.Numeral.Rules+ )+ where++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "this" Text.Numeral.Exp.Reified+import "this" Text.Numeral.Render+import "this" Text.Numeral.Rules++-------------------------------------------------------------------------------+-- Documentation+-------------------------------------------------------------------------------++{- $overview++The general idea behind this package is to take a number, convert that+number to an abstract representation of its spoken form and finally+render that representation to a 'Text' value.++-}++{- $dsl++Numerals are represented by a small expression language defined in the+"Text.Numeral.Exp" module. This language is also reified as the+concrete type 'Exp' in the "Text.Numeral.Exp.Reified" module.++-}++{- $rules++Conversion from numbers to numerals is the responsibility of+rules. The 'Rule' type itself and a number of useful rules are defined+in the "Text.Numeral.Rules" module. All rules are completely+polymorphic in their types. Their result types are only constrained by+the type classes that make up the numeral expression language.++-}++{- $render++Finally, the "Text.Numeral.Render" module is responsible for+converting the numeral expression language to a 'Text' value. This+happens via the 'render' function. Render is parametrised with a+'Repr' value and with an 'Inflection'. The 'Repr' contains all the+knowledge on how to convert the abstract expression to a concrete+'Text' value. The 'Inflection' is used for languages where number+words change based on a number of grammatical categories such as case,+gender or number. The expression itself is passed as a concrete 'Exp'+value.++-}
+ src/Text/Numeral/BigNum.hs view
@@ -0,0 +1,153 @@+{-# LANGUAGE NoImplicitPrelude+ , OverloadedStrings+ , PackageImports+ , UnicodeSyntax+ #-}++module Text.Numeral.BigNum+ ( cardinal+ , rule+ , cardinalRepr+ , symMap+ , forms++ , PostfixRepr+ , scaleRepr+ , pelletierRepr++ , quantityName+ , ordQuantityName+ ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( otherwise )+import "base" Data.Function ( ($), const, fix )+import "base" Data.Functor ( (<$>) )+import "base" Data.Maybe ( Maybe(Nothing, Just) )+import "base" Prelude ( Integral, (-) )+import "base-unicode-symbols" Data.Eq.Unicode ( (≡) )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.List.Unicode ( (∈) )+import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ )+import "containers-unicode-symbols" Data.Map.Unicode ( (∪) )+import "this" Text.Numeral+import "this" Text.Numeral.Misc ( dec )+import qualified "containers" Data.Map as M ( Map, fromList, lookup )+import qualified "this" Text.Numeral.Exp as E+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- Language of Big Numbers+--------------------------------------------------------------------------------++cardinal ∷ (Integral α) ⇒ inf → α → Maybe Text+cardinal inf = render cardinalRepr inf ∘ (pos $ fix rule)++rule ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ Rule α β+rule = findRule ( 1, lit )+ [ ( 11, add 10 L )+ , ( 20, mul 10 L L)+ , ( 100, lit )+ , ( 101, add 100 L )+ , ( 200, mul 100 R L)+ , (1000, lit )+ , (1001, add 1000 L )+ , (2000, mul 1000 R L)+ ]+ (dec 4 - 1)++cardinalRepr ∷ Repr inf+cardinalRepr =+ defaultRepr { reprValue = \_ n → M.lookup n symMap+ , reprAdd = Just $ \_ _ _ → ""+ , reprMul = Just $ \_ _ _ → ""+ }++symMap ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text)+symMap = M.fromList+ [ (1, forms "m" "un" "un" "" "")+ , (2, forms "b" "duo" "duo" "vi" "du")+ , (3, forms "tr" "tre" "tres" "tri" "tre")+ , (4, forms "quadr" "quattuor" "quattuor" "quadra" "quadri")+ , (5, forms "quint" "quin" "quinqua" "quinqua" "quin")+ , (6, forms "sext" "sex" "ses" "sexa" "ses")+ , (7, forms "sept" "septen" "septem" "septua" "septin")+ , (8, forms "oct" "octo" "octo" "octo" "octin")+ , (9, forms "non" "novem" "novem" "nona" "non")+ , (10, \c → case c of+ CtxAdd _ (Lit 100) _ → "deci"+ CtxMul _ _ (CtxAdd L (Lit 100) _) → "ginta"+ CtxMul {} → "gint"+ _ → "dec"+ )+ , (100, \c → case c of+ CtxMul _ (Lit n) _+ | n ∈ [2,3,6] → "cent"+ | otherwise → "gent"+ _ → "cent"+ )+ , (1000, const "millin")+ ]++forms ∷ Text → Text → Text → Text → Text → Ctx (Exp i) → Text+forms t a1 a2 m1 m2 ctx =+ case ctx of+ CtxAdd _ (Lit 10) _ → a1+ CtxAdd {} → a2+ CtxMul _ (Lit 10) _ → m1+ CtxMul {} → m2+ _ → t+++--------------------------------------------------------------------------------+-- Representations of scales+--------------------------------------------------------------------------------++-- | Function that renders the postfix part of a large number name. Or+-- more simply put, this calculates the \"illion\" part of+-- \"million\", \"billion\", etc.+type PostfixRepr i = i -- ^ Current inflection.+ → Ctx (Exp i) -- ^ Context.+ → Text -- ^ Postfix representation.++scaleRepr ∷ PostfixRepr i+ → [(ℤ, Ctx (Exp i) → Text)] -- ^ Additional symbol map entries.+ → ScaleRepr i+scaleRepr pf syms inf _ _ e ctx = (⊕ pf inf ctx) <$> render repr inf e+ where+ repr = cardinalRepr { reprValue = \_ n → M.lookup n syms' }+ syms' = M.fromList syms ∪ symMap++pelletierRepr ∷ PostfixRepr i -- ^Postfix for offset 0 names.+ → PostfixRepr i -- ^Postfix for offset 3 names.+ → [(ℤ, Ctx (Exp i) → Text)] -- ^ Additional symbol map entries.+ → ScaleRepr i+pelletierRepr pf0 pf3 syms inf+ b o e ctx | o ≡ 0 = scaleRepr pf0 syms inf b o e ctx+ | o ≡ 3 = scaleRepr pf3 syms inf b o e ctx+ | otherwise = Nothing++quantityName ∷ Text → Text → PostfixRepr i+quantityName s p _ ctx =+ case ctx of+ CtxMul _ (Lit 1) _ → s+ CtxMul {} → p+ _ → s++ordQuantityName ∷ Text → Text → Text → Text → PostfixRepr i+ordQuantityName sc so pc po _ ctx =+ case ctx of+ CtxMul _ (Lit 1) _ | outside → so+ | otherwise → sc+ CtxMul {} | outside → po+ | otherwise → pc+ _ | outside → so+ | otherwise → sc+ where+ outside = isOutside R ctx
+ src/Text/Numeral/Entry.hs view
@@ -0,0 +1,56 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++module Text.Numeral.Entry+ ( Conversion(..)+ , Entry(..)+ , emptyEntry+ ) where++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Maybe ( Maybe(Nothing) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ )+import "this" Text.Numeral.Exp.Reified ( Exp )+import "this" Text.Numeral.Grammar.Reified ( Inflection )+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- Language entry+--------------------------------------------------------------------------------++data Conversion α = Conversion+ { toNumeral ∷ Inflection → α → Maybe Text+ , toStructure ∷ α → Exp Inflection+ }++data Entry = Entry+ { entIso639_1 ∷ Maybe Text+ , entIso639_2 ∷ [Text]+ , entIso639_3 ∷ Maybe Text+ , entNativeNames ∷ [Text]+ , entEnglishName ∷ Maybe Text+ , entVariant ∷ Maybe Text+ , entCardinal ∷ Maybe (Conversion ℤ)+ , entOrdinal ∷ Maybe (Conversion ℤ)+ , entPartitive ∷ Maybe (Conversion (ℤ, ℤ))+ , entMultiplicative ∷ Maybe (Conversion ℤ)+ }++emptyEntry ∷ Entry+emptyEntry = Entry+ { entIso639_1 = Nothing+ , entIso639_2 = []+ , entIso639_3 = Nothing+ , entNativeNames = []+ , entEnglishName = Nothing+ , entVariant = Nothing+ , entCardinal = Nothing+ , entOrdinal = Nothing+ , entPartitive = Nothing+ , entMultiplicative = Nothing+ }
+ src/Text/Numeral/Exp.hs view
@@ -0,0 +1,144 @@+{-# LANGUAGE NoImplicitPrelude+ , PackageImports+ , TypeFamilies+ , TypeSynonymInstances+ , UnicodeSyntax+ #-}++module Text.Numeral.Exp+ ( Unknown(unknown, isUnknown)+ , Lit(lit)+ , Neg(neg)+ , Add(add)+ , Mul(mul)+ , Sub(sub)+ , Frac(frac)+ , Scale(scale)+ , Dual(dual)+ , Plural(plural)+ , Inflection(..)+ ) where++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( Bool(False) )+import "base" Data.Function ( const )+import "base" Prelude ( (+), (*), (^), subtract, negate, fromInteger, error )+import "base-unicode-symbols" Prelude.Unicode ( ℤ, (⋅) )+++-------------------------------------------------------------------------------+-- Expressions+-------------------------------------------------------------------------------++-- | An unknown value. This is used to signal that a value can not be+-- represented in the expression language.+--+-- Law: isUnknown unknown == True+class Unknown α where+ unknown ∷ α+ isUnknown ∷ α → Bool++-- | A literal value.+--+-- Example in English:+--+-- > "three" = lit 3+class Lit α where lit ∷ ℤ → α++-- | Negation of a value.+--+-- Example in English:+--+-- > "minus two" = neg (lit 2)+class Neg α where neg ∷ α → α++-- | Addition of two values.+--+-- Example in English:+--+-- > "fifteen" = lit 5 `add` lit 10+class Add α where add ∷ α → α → α++-- | Multiplication of two values.+--+-- Example in English:+--+-- > "thirty" = lit 3 `mul` lit 10+class Mul α where mul ∷ α → α → α++-- | One value subtracted from another value.+--+-- Example in Latin:+--+-- > "duodēvīgintī" = lit 2 `sub` (lit 2 `mul` lit 10)+class Sub α where sub ∷ α → α → α++-- | A fraction.+--+-- Example in English:+--+-- > "two thirds" = `frac` (lit 2) (lit 3)+class Frac α where frac ∷ α → α → α++-- | A step in a scale of large values.+--+-- Should be interpreted as @10 ^ (rank * base + offset)@.+--+-- Example in English:+--+-- > "quadrillion" = scale 3 3 4+class Scale α where+ scale ∷ ℤ -- ^ Base.+ → ℤ -- ^ Offset.+ → α -- ^ Rank.+ → α++-- | A dual of a value.+--+-- This is used in some languages that express some values as the dual+-- of a smaller value. For instance, in Hebrew the number 20 is+-- expressed as the dual of 10.+class Dual α where dual ∷ α → α++-- | A plural of a value.+--+-- This is used in some languages that express some values as the+-- plural of a smaller value. For instance, in Hebrew the numbers+-- [30,40..90] are expressed as the plurals of [3..9].+class Plural α where plural ∷ α → α++-- | A change of inflection.+--+-- This is used in a language like Spanish where the inflection of a+-- number word is not always constant. Specifically, in Spanish, large+-- number names always have the masculine gender. So 'millón',+-- 'billón' and the like are all masculine. This can result in the+-- following number word: 10000001 = "un (masculine) millón una+-- (feminine)"+class Inflection α where+ type Inf α+ inflection ∷ (Inf α → Inf α) → α → α++infixl 6 `add`+infixl 6 `sub`+infixl 7 `mul`+++-------------------------------------------------------------------------------+-- Integer instances+-------------------------------------------------------------------------------++instance Unknown ℤ where+ unknown = error "unknown"+ isUnknown = const False+instance Lit ℤ where lit = fromInteger+instance Neg ℤ where neg = negate+instance Add ℤ where add = (+)+instance Mul ℤ where mul = (*)+instance Sub ℤ where sub = subtract+instance Scale ℤ where scale b o r = 10 ^ (r⋅b + o)++-- TODO: instances for ℚ?
+ src/Text/Numeral/Exp/Reified.hs view
@@ -0,0 +1,111 @@+{-# LANGUAGE CPP+ , NoImplicitPrelude+ , PackageImports+ , TypeFamilies+ , UnicodeSyntax+ #-}++module Text.Numeral.Exp.Reified ( Exp(..), showExp, Side(L, R) ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( Bool(False, True) )+import "base" Data.Eq ( Eq )+import "base" Data.List ( (++) )+import "base" Prelude ( String )+import "base" Text.Show ( Show, show )+import "base-unicode-symbols" Prelude.Unicode ( ℤ )+import qualified "this" Text.Numeral.Exp as E+++-------------------------------------------------------------------------------+-- Reified expression type+-------------------------------------------------------------------------------++-- | An expression that represents the structure of a numeral.+data Exp i+ -- | An unknown value.+ = Unknown+ -- | A literal value.+ | Lit ℤ+ -- | Negation of an expression.+ | Neg (Exp i)+ -- | Addition of two expressions.+ | Add (Exp i) (Exp i)+ -- | Multiplication of two expressions.+ | Mul (Exp i) (Exp i)+ -- | One expression subtracted from another expression.+ | Sub (Exp i) (Exp i)+ -- | A fraction.+ | Frac (Exp i) (Exp i)+ -- | A step in a scale of large values.+ | Scale ℤ ℤ (Exp i)+ -- | A dual form of an expression.+ | Dual (Exp i)+ -- | A plural form of an expression.+ | Plural (Exp i)+ -- | A change of inflection.+ | Inflection (i → i) (Exp i)++infixl 6 `Add`+infixl 6 `Sub`+infixl 7 `Mul`++showExp ∷ Exp i → String+showExp Unknown = "Unknown"+showExp (Lit n) = "Lit " ++ show n+showExp (Neg x) = "Neg (" ++ showExp x ++ ")"+showExp (Add x y) = "Add (" ++ showExp x ++ ") (" ++ showExp y ++ ")"+showExp (Mul x y) = "Mul (" ++ showExp x ++ ") (" ++ showExp y ++ ")"+showExp (Sub x y) = "Sub (" ++ showExp x ++ ") (" ++ showExp y ++ ")"+showExp (Frac x y) = "Frac (" ++ showExp x ++ ") (" ++ showExp y ++ ")"+showExp (Scale b o r) = "Scale " ++ show b ++ " " ++ show o ++ " (" ++ showExp r ++ ")"+showExp (Dual x) = "Dual (" ++ showExp x ++ ")"+showExp (Plural x) = "Plural (" ++ showExp x ++ ")"+showExp (Inflection _ x) = "Inflection <func> (" ++ showExp x ++ ")"+++-- | Precisely the 'Unknown' constructor.+instance E.Unknown (Exp i) where+ unknown = Unknown+ isUnknown Unknown = True+ isUnknown _ = False+-- | Precisely the 'Lit' constructor.+instance E.Lit (Exp i) where lit = Lit+-- | Precisely the 'Neg' constructor.+instance E.Neg (Exp i) where neg = Neg+-- | Precisely the 'Add' constructor.+instance E.Add (Exp i) where add = Add+-- | Precisely the 'Mul' constructor.+instance E.Mul (Exp i) where mul = Mul+-- | Precisely the 'Sub' constructor.+instance E.Sub (Exp i) where sub = Sub+-- | Precisely the 'Frac' constructor.+instance E.Frac (Exp i) where frac = Frac+-- | Precisely the 'Scale' constructor.+instance E.Scale (Exp i) where scale = Scale+-- | Precisely the 'Dual' constructor.+instance E.Dual (Exp i) where dual = Dual+-- | Precisely the 'Plural' constructor.+instance E.Plural (Exp i) where plural = Plural+-- | Precisely the 'Inflection' constructor.+instance E.Inflection (Exp i) where+#if __GLASGOW_HASKELL__ < 704+ type E.Inf (Exp i) = i+#else+ type Inf (Exp i) = i+#endif+ inflection = Inflection+++-------------------------------------------------------------------------------+-- Side+-------------------------------------------------------------------------------++-- | A side or direction, either 'L'eft or 'R'ight.+data Side = L -- ^ Left.+ | R -- ^ Right.+ deriving (Eq, Show)
+ src/Text/Numeral/Grammar.hs view
@@ -0,0 +1,329 @@+{-# LANGUAGE NoImplicitPrelude+ , UnicodeSyntax+ , PackageImports+ #-}++module Text.Numeral.Grammar+ ( -- * Inflection+ Inflection+ -- * Grammatical categories+ -- ** Case+ , NoCase (noCase, hasNoCase)+ , Ablative (ablative, isAblative)+ , Abessive (abessive, isAbessive)+ , Accusative (accusative, isAccusative)+ , Comitative (comitative, isComitative)+ , Dative (dative, isDative)+ , Delative (delative, isDelative)+ , Distributive (distributive, isDistributive)+ , DistributiveTemporal (distributiveTemporal, isDistributiveTemporal)+ , Essive (essive, isEssive)+ , Genitive (genitive, isGenitive)+ , Instrumental (instrumental, isInstrumental)+ , Instructive (instructive, isInstructive)+ , Lative (lative, isLative)+ , Locative (locative, isLocative)+ , Multiplicative (multiplicative, isMultiplicative)+ , Nominative (nominative, isNominative)+ , Partitive (partitive, isPartitive)+ , SuperEssive (superEssive, isSuperEssive)+ , Sublative (sublative, isSublative)+ , Translative (translative, isTranslative)+ , Vocative (vocative, isVocative)+ -- *** Locative cases+ , LocativeInessive (locativeInessive, isLocativeInessive)+ , LocativeElative (locativeElative, isLocativeElative)+ , LocativeIllative (locativeIllative, isLocativeIllative)+ , LocativeAdessive (locativeAdessive, isLocativeAdessive)+ , LocativeAblative (locativeAblative, isLocativeAblative)+ , LocativeAllative (locativeAllative, isLocativeAllative)+ -- ** Gender+ , NoGender (noGender, hasNoGender)+ , Neuter (neuter, isNeuter)+ , Masculine (masculine, isMasculine)+ , Feminine (feminine, isFeminine)+ , Common (common, isCommon)+ -- ** Number+ , NoNumber (noNumber, hasNoNumber)+ , Singular (singular, isSingular)+ , Dual (dual, isDual)+ , Trial (trial, isTrial)+ , Paucal (paucal, isPaucal)+ , Plural (plural, isPlural)+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Bool ( Bool )+++--------------------------------------------------------------------------------+-- Inflection+--------------------------------------------------------------------------------++-- | Base class for various kinds of inflections.+class Inflection α+++--------------------------------------------------------------------------------+-- Case+--------------------------------------------------------------------------------++class Inflection α ⇒ NoCase α where+ noCase ∷ α → α+ hasNoCase ∷ α → Bool++-- | The ablative case (abbreviated abl) indicates movement from+-- something, or cause.+class Inflection α ⇒ Ablative α where+ ablative ∷ α → α+ isAblative ∷ α → Bool++-- | In linguistics, abessive (abbreviated abe or abess), caritive and privative+-- (abbreviated priv) are names for a grammatical case expressing the lack or+-- absence of the marked noun.+class Inflection α ⇒ Abessive α where+ abessive ∷ α → α+ isAbessive ∷ α → Bool++-- | The accusative case (abbreviated acc) indicates the direct object+-- of a verb.+class Inflection α ⇒ Accusative α where+ accusative ∷ α → α+ isAccusative ∷ α → Bool++-- | The comitative case (abbreviated com), also known as the associative case+-- (abbreviated ass), is a grammatical case that denotes companionship, and is+-- used where English would typically use preposition "with" in the sense of "in+-- company with" or "together with" (other uses of "with," e.g. with the meaning+-- of "using," "by means of" (I cut bread with a knife) would correspond to the+-- instrumental case or related cases).+class Inflection α ⇒ Comitative α where+ comitative ∷ α → α+ isComitative ∷ α → Bool++-- | The dative case (abbreviated dat, or sometimes d when it is a+-- core argument) indicates the indirect object of a verb.+class Inflection α ⇒ Dative α where+ dative ∷ α → α+ isDative ∷ α → Bool++-- | The delative case (abbreviated del; from Latin deferre "to bear or bring+-- away or down") in the Hungarian language can originally express the movement+-- from the surface of something (e.g. "off the table"), but it is used in+-- several other meanings (e.g. "about people"), some of them related to the+-- original (e.g. "from the post office").+class Inflection α ⇒ Delative α where+ delative ∷ α → α+ isDelative ∷ α → Bool++-- | The distributive case (abbreviated distr) is used on nouns for the meanings+-- of per or each.+class Inflection α ⇒ Distributive α where+ distributive ∷ α → α+ isDistributive ∷ α → Bool++-- | The distributive-temporal case specifies when something is done.+class Inflection α ⇒ DistributiveTemporal α where+ distributiveTemporal ∷ α → α+ isDistributiveTemporal ∷ α → Bool++-- | The essive or similaris case (abbreviated ess) carries the meaning of a+-- temporary location or state of being, often equivalent to the English "as a+-- (child)".+class Inflection α ⇒ Essive α where+ essive ∷ α → α+ isEssive ∷ α → Bool++-- | The genitive case (abbreviated gen; also called the possessive+-- case or second case), which roughly corresponds to English's+-- possessive case and preposition of, indicates the possessor of+-- another noun.+class Inflection α ⇒ Genitive α where+ genitive ∷ α → α+ isGenitive ∷ α → Bool++-- | The instrumental case (abbreviated ins or instr; also called the+-- eighth case) indicates an object used in performing an action.+class Inflection α ⇒ Instrumental α where+ instrumental ∷ α → α+ isInstrumental ∷ α → Bool++-- | In the Finnish language and Estonian language, the instructive case has the+-- basic meaning of "by means of". It is a comparatively rarely used case,+-- though it is found in some commonly used expressions, such as omin silmin →+-- "with one's own eyes".+class Inflection α ⇒ Instructive α where+ instructive ∷ α → α+ isInstructive ∷ α → Bool++-- | Lative (abbreviated lat) is a case which indicates motion to a location. It+-- corresponds to the English prepositions "to" and "into". The lative case+-- belongs to the group of the general local cases together with the locative+-- and separative case. The term derives from the Latin lat-, the participle+-- stem of ferre, "to bring".+class Inflection α ⇒ Lative α where+ lative ∷ α → α+ isLative ∷ α → Bool++-- | The locative case (abbreviated loc) indicates a location.+class Inflection α ⇒ Locative α where+ locative ∷ α → α+ isLocative ∷ α → Bool++-- | The multiplicative case is a grammatical case used for marking a number of+-- something ("three times").+class Inflection α ⇒ Multiplicative α where+ multiplicative ∷ α → α+ isMultiplicative ∷ α → Bool++-- | The nominative case (abbreviated nom) indicates the subject of a+-- finite verb.+class Inflection α ⇒ Nominative α where+ nominative ∷ α → α+ isNominative ∷ α → Bool++-- | The partitive case (abbreviated ptv or more ambiguously part)+-- denotes "partialness", "without result", or "without specific+-- identity". It is also used in contexts where a subgroup is selected+-- from a larger group, or with numbers.+class Inflection α ⇒ Partitive α where+ partitive ∷ α → α+ isPartitive ∷ α → Bool++-- | The Superessive case (abbreviated supe) is a grammatical declension+-- indicating location on top of, or on the surface of something. Its name comes+-- from Latin supersum, superesse: to be over and above.+class Inflection α ⇒ SuperEssive α where+ superEssive ∷ α → α+ isSuperEssive ∷ α → Bool++-- | The term sublative case (abbreviated subl) is used to refer to grammatical+-- cases expressing different situations: In Hungarian, it expresses the+-- destination of the movement, originally to the surface of something (e.g. sit+-- down on the ground, climb the tree), but in other figurative meanings as well+-- (e.g. to university, for two nights), while in Tsez and other Northeast+-- Caucasian languages it denotes a movement towards the bottomsides or the area+-- under an object. The sublative case is used in the Finnish, Tsez and+-- Hungarian languages.+class Inflection α ⇒ Sublative α where+ sublative ∷ α → α+ isSublative ∷ α → Bool++-- | The translative case (abbreviated transl) is a grammatical case that+-- indicates a change in state of a noun, with the general sense of "becoming X"+-- or "change to X".+class Inflection α ⇒ Translative α where+ translative ∷ α → α+ isTranslative ∷ α → Bool++-- | The vocative case indicates an addressee.+class Inflection α ⇒ Vocative α where+ vocative ∷ α → α+ isVocative ∷ α → Bool+++--------------------------------------------------------------------------------+-- Locative cases+--------------------------------------------------------------------------------++-- | Inessive case (abbreviated ine; from Latin inesse "to be in or at") is a+-- locative grammatical case. This case carries the basic meaning of "in".+class Locative α ⇒ LocativeInessive α where+ locativeInessive ∷ α → α+ isLocativeInessive ∷ α → Bool++-- | Elative (abbreviated ela; from Latin efferre "to bring or carry out") is a+-- locative case with the basic meaning "out of".+class Locative α ⇒ LocativeElative α where+ locativeElative ∷ α → α+ isLocativeElative ∷ α → Bool++-- | Illative (abbreviated ill; from Latin illatus "brought in") is, in the+-- Finnish language, Estonian language and the Hungarian language, the third of+-- the locative cases with the basic meaning of "into (the inside of)".+class Locative α ⇒ LocativeIllative α where+ locativeIllative ∷ α → α+ isLocativeIllative ∷ α → Bool++-- | In Uralic languages, such as Finnish, Estonian and Hungarian, the adessive+-- case (abbreviated ade; from Latin adesse "to be present") is the fourth of+-- the locative cases with the basic meaning of "on".+class Locative α ⇒ LocativeAdessive α where+ locativeAdessive ∷ α → α+ isLocativeAdessive ∷ α → Bool++-- | In linguistics, ablative case (abbreviated abl) is a name given to cases in+-- various languages whose common characteristic is that they mark motion away+-- from something, though the details in each language may differ. The name+-- "ablative" derives from the Latin ablatus, the (irregular) perfect passive+-- participle of auferre "to carry away".+class Locative α ⇒ LocativeAblative α where+ locativeAblative ∷ α → α+ isLocativeAblative ∷ α → Bool++-- | Allative case (abbreviated all; from Latin allāt-, afferre "to bring to")+-- is a type of the locative cases used in several languages. The term allative+-- is generally used for the lative case in the majority of languages which do+-- not make finer distinctions.+class Locative α ⇒ LocativeAllative α where+ locativeAllative ∷ α → α+ isLocativeAllative ∷ α → Bool+++--------------------------------------------------------------------------------+-- Gender+--------------------------------------------------------------------------------++class Inflection α ⇒ NoGender α where+ noGender ∷ α → α+ hasNoGender ∷ α → Bool++class Inflection α ⇒ Neuter α where+ neuter ∷ α → α+ isNeuter ∷ α → Bool++class Inflection α ⇒ Masculine α where+ masculine ∷ α → α+ isMasculine ∷ α → Bool++class Inflection α ⇒ Feminine α where+ feminine ∷ α → α+ isFeminine ∷ α → Bool++class Inflection α ⇒ Common α where+ common ∷ α → α+ isCommon ∷ α → Bool+++--------------------------------------------------------------------------------+-- Number+--------------------------------------------------------------------------------++class Inflection α ⇒ NoNumber α where+ noNumber ∷ α → α+ hasNoNumber ∷ α → Bool++class Inflection α ⇒ Singular α where+ singular ∷ α → α+ isSingular ∷ α → Bool++class Inflection α ⇒ Dual α where+ dual ∷ α → α+ isDual ∷ α → Bool++class Inflection α ⇒ Trial α where+ trial ∷ α → α+ isTrial ∷ α → Bool++class Inflection α ⇒ Paucal α where+ paucal ∷ α → α+ isPaucal ∷ α → Bool++class Inflection α ⇒ Plural α where+ plural ∷ α → α+ isPlural ∷ α → Bool+
+ src/Text/Numeral/Grammar/Reified.hs view
@@ -0,0 +1,277 @@+{-# LANGUAGE NamedFieldPuns+ , NoImplicitPrelude+ , UnicodeSyntax+ , PackageImports+ #-}++module Text.Numeral.Grammar.Reified+ ( -- * Inflection+ Inflection(..)+ , defaultInflection+ -- * Grammatical categories+ , Case(..)+ , Gender(..)+ , Number(..)+ ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( Bool(False, True) )+import "base" Data.Eq ( Eq )+import "base" Data.Function ( ($) )+import "base" Data.Maybe ( Maybe(Nothing, Just) )+import "base" Text.Show ( Show )+import "base-unicode-symbols" Data.Eq.Unicode ( (≡) )+import qualified "this" Text.Numeral.Grammar as G+++-------------------------------------------------------------------------------+-- Inflection+-------------------------------------------------------------------------------++data Inflection = Inflection { iCase ∷ Maybe Case+ , iGender ∷ Maybe Gender+ , iNumber ∷ Maybe Number+ } deriving (Show, Eq)++instance G.Inflection Inflection++defaultInflection ∷ Inflection+defaultInflection = Inflection Nothing Nothing Nothing+++-------------------------------------------------------------------------------+-- Grammatical categories+-------------------------------------------------------------------------------++data Case = Abessive+ | Ablative+ | Accusative+ | Comitative+ | Dative+ | Delative+ | Distributive+ | DistributiveTemporal+ | Essive+ | Genitive+ | Instrumental+ | Instructive+ | Lative+ | Locative (Maybe Locative)+ | Multiplicative+ | Nominative+ | Partitive+ | Sublative+ | SuperEssive+ | Translative+ | Vocative+ deriving (Eq, Show)++data Locative = LocativeIllative+ | LocativeInessive+ | LocativeElative+ | LocativeAllative+ | LocativeAdessive+ | LocativeAblative+ deriving (Eq, Show)++data Gender = Neuter+ | Masculine+ | Feminine+ | Common+ deriving (Eq, Show)++data Number = Singular+ | Dual+ | Trial+ | Paucal+ | Plural+ deriving (Eq, Show)+++-------------------------------------------------------------------------------+-- Case instances+-------------------------------------------------------------------------------++instance G.NoCase Inflection where+ noCase inf = inf { iCase = Nothing }+ hasNoCase (Inflection {iCase}) = iCase ≡ Nothing++instance G.Ablative Inflection where+ ablative inf = inf { iCase = Just Ablative }+ isAblative (Inflection {iCase}) = iCase ≡ Just Ablative++instance G.Abessive Inflection where+ abessive inf = inf { iCase = Just Abessive }+ isAbessive (Inflection {iCase}) = iCase ≡ Just Abessive++instance G.Accusative Inflection where+ accusative inf = inf { iCase = Just Accusative }+ isAccusative (Inflection {iCase}) = iCase ≡ Just Accusative++instance G.Comitative Inflection where+ comitative inf = inf { iCase = Just Comitative }+ isComitative (Inflection {iCase}) = iCase ≡ Just Comitative++instance G.Dative Inflection where+ dative inf = inf { iCase = Just Dative }+ isDative (Inflection {iCase}) = iCase ≡ Just Dative++instance G.Delative Inflection where+ delative inf = inf { iCase = Just Delative }+ isDelative (Inflection {iCase}) = iCase ≡ Just Delative++instance G.Distributive Inflection where+ distributive inf = inf { iCase = Just Distributive }+ isDistributive (Inflection {iCase}) = iCase ≡ Just Distributive++instance G.DistributiveTemporal Inflection where+ distributiveTemporal inf = inf { iCase = Just DistributiveTemporal }+ isDistributiveTemporal (Inflection {iCase}) = iCase ≡ Just DistributiveTemporal++instance G.Essive Inflection where+ essive inf = inf { iCase = Just Essive }+ isEssive (Inflection {iCase}) = iCase ≡ Just Essive++instance G.Genitive Inflection where+ genitive inf = inf { iCase = Just Genitive }+ isGenitive (Inflection {iCase}) = iCase ≡ Just Genitive++instance G.Instrumental Inflection where+ instrumental inf = inf { iCase = Just Instrumental }+ isInstrumental (Inflection {iCase}) = iCase ≡ Just Instrumental++instance G.Instructive Inflection where+ instructive inf = inf { iCase = Just Instructive }+ isInstructive (Inflection {iCase}) = iCase ≡ Just Instructive++instance G.Lative Inflection where+ lative inf = inf { iCase = Just Lative }+ isLative (Inflection {iCase}) = iCase ≡ Just Lative++instance G.Locative Inflection where+ locative inf = inf { iCase = Just (Locative Nothing) }+ isLocative (Inflection {iCase}) =+ case iCase of+ Just (Locative _) → True+ _ → False++instance G.Multiplicative Inflection where+ multiplicative inf = inf { iCase = Just Multiplicative }+ isMultiplicative (Inflection {iCase}) = iCase ≡ Just Multiplicative++instance G.Nominative Inflection where+ nominative inf = inf { iCase = Just Nominative }+ isNominative (Inflection {iCase}) = iCase ≡ Just Nominative++instance G.Partitive Inflection where+ partitive inf = inf { iCase = Just Partitive }+ isPartitive (Inflection {iCase}) = iCase ≡ Just Partitive++instance G.SuperEssive Inflection where+ superEssive inf = inf { iCase = Just SuperEssive }+ isSuperEssive (Inflection {iCase}) = iCase ≡ Just SuperEssive++instance G.Sublative Inflection where+ sublative inf = inf { iCase = Just Sublative }+ isSublative (Inflection {iCase}) = iCase ≡ Just Sublative++instance G.Translative Inflection where+ translative inf = inf { iCase = Just Translative }+ isTranslative (Inflection {iCase}) = iCase ≡ Just Translative++instance G.Vocative Inflection where+ vocative inf = inf { iCase = Just Vocative }+ isVocative (Inflection {iCase}) = iCase ≡ Just Vocative+++-------------------------------------------------------------------------------+-- Locative case instances+-------------------------------------------------------------------------------++instance G.LocativeInessive Inflection where+ locativeInessive inf = inf {iCase = Just $ Locative $ Just LocativeInessive}+ isLocativeInessive (Inflection {iCase}) =+ iCase ≡ (Just $ Locative $ Just LocativeInessive)++instance G.LocativeElative Inflection where+ locativeElative inf = inf {iCase = Just $ Locative $ Just LocativeElative}+ isLocativeElative (Inflection {iCase}) =+ iCase ≡ (Just $ Locative $ Just LocativeElative)++instance G.LocativeIllative Inflection where+ locativeIllative inf = inf {iCase = Just $ Locative $ Just LocativeIllative}+ isLocativeIllative (Inflection {iCase}) =+ iCase ≡ (Just $ Locative $ Just LocativeIllative)++instance G.LocativeAdessive Inflection where+ locativeAdessive inf = inf {iCase = Just $ Locative $ Just LocativeAdessive}+ isLocativeAdessive (Inflection {iCase}) =+ iCase ≡ (Just $ Locative $ Just LocativeAdessive)++instance G.LocativeAblative Inflection where+ locativeAblative inf = inf {iCase = Just $ Locative $ Just LocativeAblative}+ isLocativeAblative (Inflection {iCase}) =+ iCase ≡ (Just $ Locative $ Just LocativeAblative)++instance G.LocativeAllative Inflection where+ locativeAllative inf = inf {iCase = Just $ Locative $ Just LocativeAllative}+ isLocativeAllative (Inflection {iCase}) =+ iCase ≡ (Just $ Locative $ Just LocativeAllative)+++-------------------------------------------------------------------------------+-- Gender instances+-------------------------------------------------------------------------------++instance G.NoGender Inflection where+ noGender inf = inf { iGender = Nothing }+ hasNoGender (Inflection {iGender}) = iGender ≡ Nothing++instance G.Neuter Inflection where+ neuter inf = inf { iGender = Just Neuter }+ isNeuter (Inflection {iGender}) = iGender ≡ Just Neuter++instance G.Masculine Inflection where+ masculine inf = inf { iGender = Just Masculine }+ isMasculine (Inflection {iGender}) = iGender ≡ Just Masculine++instance G.Feminine Inflection where+ feminine inf = inf { iGender = Just Feminine }+ isFeminine (Inflection {iGender}) = iGender ≡ Just Feminine++instance G.Common Inflection where+ common inf = inf { iGender = Just Common }+ isCommon (Inflection {iGender}) = iGender ≡ Just Common+++-------------------------------------------------------------------------------+-- Number instances+-------------------------------------------------------------------------------++instance G.NoNumber Inflection where+ noNumber inf = inf { iNumber = Nothing }+ hasNoNumber (Inflection {iNumber}) = iNumber ≡ Nothing++instance G.Singular Inflection where+ singular inf = inf { iNumber = Just Singular }+ isSingular (Inflection {iNumber}) = iNumber ≡ Just Singular++instance G.Dual Inflection where+ dual inf = inf { iNumber = Just Dual }+ isDual (Inflection {iNumber}) = iNumber ≡ Just Dual++instance G.Trial Inflection where+ trial inf = inf { iNumber = Just Trial }+ isTrial (Inflection {iNumber}) = iNumber ≡ Just Trial++instance G.Paucal Inflection where+ paucal inf = inf { iNumber = Just Paucal }+ isPaucal (Inflection {iNumber}) = iNumber ≡ Just Paucal++instance G.Plural Inflection where+ plural inf = inf { iNumber = Just Plural }+ isPlural (Inflection {iNumber}) = iNumber ≡ Just Plural
+ src/Text/Numeral/Language/AF.hs view
@@ -0,0 +1,207 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] af++[@ISO639-2@] afr++[@ISO639-3@] afr++[@Native name@] Afrikaans++[@English name@] Afrikaans+-}++module Text.Numeral.Language.AF+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ , ordinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Bool ( otherwise )+import "base" Data.Function ( ($), const, fix )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Data.Ord ( (<) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- AF+--------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "af"+ , entIso639_2 = ["afr"]+ , entIso639_3 = Just "afr"+ , entNativeNames = ["Afrikaans"]+ , entEnglishName = Just "Afrikaans"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ , entOrdinal = Just Conversion+ { toNumeral = ordinal+ , toStructure = struct+ }+ }++cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++ordinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+ordinal inf = ordinalRepr inf ∘ struct++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ )+ ⇒ α → β+struct = pos+ $ fix+ $ findRule ( 0, lit )+ [ ( 13, add 10 L )+ , ( 20, mul 10 L L)+ , ( 100, step1 100 10 R L)+ , (1000, step1 1000 1000 R L)+ ]+ (dec 6 - 1)+ `combine` pelletierScale1 R L BN.rule++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++genericRepr ∷ Repr i+genericRepr = defaultRepr+ { reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprNeg = Just $ \_ _ → "min "+ }+ where+ (_ ⊞ Lit 10) _ = ""+ (Lit n ⊞ _) _ | n < 10 = "-en-"+ | otherwise = ""+ (_ ⊞ _) _ = " "++ (_ ⊡ Lit _) _ = ""+ (_ ⊡ _ ) _ = " "++cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render genericRepr+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.pelletierRepr (\_ _ → "iljoen")+ (\_ _ → "iljard")+ []+ }+ where+ syms =+ M.fromList+ [ (0, const "nul")+ , (1, const "een")+ , (2, forms "twee" "twin")+ , (3, forms "drie" "der")+ , (4, forms "vier" "veer")+ , (5, const "vyf")+ , (6, const "ses")+ , (7, forms "sewe" "sewen")+ , (8, \c → case c of+ CtxMul _ (Lit 10) _ → "tag"+ _ → "ag"+ )+ , (9, \c → case c of+ CtxAdd _ (Lit 10) _ → "negen"+ CtxMul _ (Lit 10) _ → "neën"+ _ → "nege"+ )+ , (10, \c → case c of+ CtxMul R _ _ → "tig"+ _ → "tien"+ )+ , (11, const "elf")+ , (12, const "twaalf")+ , (100, const "honderd")+ , (1000, const "duisend")+ ]++ forms ∷ s → s → Ctx (Exp i) → s+ forms n t ctx = case ctx of+ CtxMul _ (Lit 10) _ → t+ CtxAdd _ (Lit 10) _ → t+ CtxAdd _ (Lit _) _ → n+ _ → n++ordinalRepr ∷ i → Exp i → Maybe Text+ordinalRepr = render genericRepr+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.pelletierRepr (\_ _ → "iljoen")+ (\_ _ → "iljard")+ []+ }+ where+ syms =+ M.fromList+ [ (0, const "nul")+ , (1, \c → case c of+ CtxEmpty → "eerste"+ _ | isOutside R c → "eende"+ | otherwise → "een"+ )+ , (2, forms "tweede" "twee" "twin")+ , (3, forms "derde" "drie" "der")+ , (4, forms "vierde" "vier" "veer")+ , (5, \c → if isOutside R c then "vyfde" else "vyf")+ , (6, \c → if isOutside R c then "sesde" else "ses")+ , (7, forms "sewende" "sewe" "sewen")+ , (8, \c → case c of+ _ | isOutside R c → "agtste"+ CtxMul _ (Lit 10) _ → "tag"+ _ → "ag"+ )+ , (9, \c → case c of+ _ | isOutside R c → "negende"+ CtxAdd _ (Lit 10) _ → "negen"+ CtxMul _ (Lit 10) _ → "neën"+ _ → "nege"+ )+ , (10, \c → case c of+ CtxMul R _ _ | isOutside R c → "tigste"+ | otherwise → "tig"+ _ | isOutside R c → "tiende"+ | otherwise → "tien"+ )+ , (11, \c → if isOutside R c then "elfde" else "elf")+ , (12, \c → if isOutside R c then "twaalfde" else "twaalf")+ , (100, \c → if isOutside R c then "honderste" else "honderd")+ , (1000, \c → if isOutside R c then "duisendste" else "duisend")+ ]++ forms ∷ s → s → s → Ctx (Exp i) → s+ forms o c t ctx = case ctx of+ _ | isOutside R ctx → o+ CtxMul _ (Lit 10) _ → t+ CtxAdd _ (Lit 10) _ → t+ CtxAdd _ (Lit _) _ → c+ _ → c
src/Text/Numeral/Language/AMP.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] -@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.AMP- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -28,28 +33,34 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) ------------------------------------------------------------------------------- -- AMP ------------------------------------------------------------------------------- -{--Sources:- http://www.sf.airnet.ne.jp/~ts/language/number/alamblak.html--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_3 = Just "amp"+ , entEnglishName = Just "Alamblak"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ α → β+struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ findRule ( 1, lit )@@ -63,9 +74,12 @@ ] 399 -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (1, 399)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just (⊞) , reprMul = Just $ \_ _ _ → " " }
+ src/Text/Numeral/Language/BG.hs view
@@ -0,0 +1,185 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] bg++[@ISO639-2@] bul++[@ISO639-3@] bul++[@Native name@] Български език++[@English name@] Bulgarian+-}++module Text.Numeral.Language.BG+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Bool ( otherwise )+import "base" Data.Function ( ($), const, fix )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.Ord.Unicode ( (≤) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- BG+--------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "bg"+ , entIso639_2 = ["bul"]+ , entIso639_3 = Just "bul"+ , entNativeNames = ["Български език"]+ , entEnglishName = Just "Bulgarian"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++cardinal ∷ (G.Neuter i, G.Feminine i, G.Masculine i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ , E.Inflection β, G.Masculine (E.Inf β)+ )+ ⇒ α → β+struct = pos $ fix $ rule `combine` shortScale1_bg+ where+ rule = findRule ( 0, lit )+ [ ( 13, add 10 L )+ , ( 20, mul 10 R L )+ , ( 100, step 100 10 R L)+ , (1000, step 1000 1000 R L)+ ]+ (dec 6 - 1)++-- | Like 'shortScale1' but forces the right-hand-side to have+-- masculine gender.+shortScale1_bg ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ , E.Inflection β, G.Masculine (E.Inf β)+ )+ ⇒ Rule α β+shortScale1_bg = mulScale_ bgMul 3 3 R L rule+ where+ bgMul f m scale' _ = masculineMul (f m) scale'+ masculineMul x y = E.inflection G.masculine $ E.mul x y+ rule = findRule (1, lit) [] 14++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 48 - 1 in (negate x, x)++cardinalRepr ∷ (G.Neuter i, G.Feminine i, G.Masculine i) ⇒ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprScale = shortScaleRepr+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprNeg = Just $ \_ _ → "минус "+ }+ where+ (Lit 100 ⊞ Lit _) _ = " и "+ (_ ⊞ Add _ (Lit 10)) _ = " и "+ (_ ⊞ Mul _ (Lit 10)) _ = " и "+ (_ ⊞ Lit 10) _ = ""+ ((_ `Mul` Lit _) ⊞ Lit _) _ = " и "+ (Inflection _ _ ⊞ Lit _) _ = " и "+ (_ ⊞ _ ) _ = " "++ (_ ⊡ Lit n) _ | n ≤ 100 = ""+ (_ ⊡ _ ) _ = " "++ syms inf =+ M.fromList+ [ (0, const "нула")+ , (1, const $ if G.isFeminine inf+ then "една"+ else if G.isMasculine inf+ then "един"+ else "едно"+ )+ , (2, \c → case c of+ CtxMul _ (Lit 10) _ → "два"+ CtxMul _ (Lit 100) _ → "две"+ CtxMul _ (Lit 1000) _ → "две"+ _ | G.isMasculine inf → "два"+ | otherwise → "две"+ )+ , (3, const "три")+ , (4, const "четири")+ , (5, const "пет")+ , (6, const "шест")+ , (7, const "седем")+ , (8, const "осем")+ , (9, const "девет")+ , (10, \c → case c of+ CtxAdd _ (Lit n) _ | n ≤ 9 → "надесет"+ _ → "десет"+ )+ , (11, const "единадесет")+ , (12, const "дванадесет")+ , (100, \c → case c of+ CtxMul _ (Lit 2) _ → "ста"+ CtxMul _ (Lit 3) _ → "ста"+ CtxMul R _ _ → "стотин"+ _ → "сто"+ )+ , (1000, \c → case c of+ CtxMul R _ _ → "хиляди"+ _ → "хиляда"+ )+ ]++shortScaleRepr ∷ i → ℤ → ℤ → (Exp i) → Ctx (Exp i) → Maybe Text+shortScaleRepr inf b o e+ = case e of+ Lit 2 → BN.scaleRepr (BN.quantityName "илиард" "илиарда") syms inf b o e+ _ → BN.scaleRepr (BN.quantityName "илион" "илиона") syms inf b o e+ where+ syms = [ ( 1, const "м")+ , ( 2, const "м")+ , ( 3, const "тр")+ , ( 4, const "квадр")+ , ( 5, const "квинт")+ , ( 6, const "секст")+ , ( 7, const "септ")+ , ( 8, const "окт")+ , ( 9, const "нон")+ , (10, const "дец")+ , (11, const "индец")+ , (12, const "дуодец")+ , (13, const "тридец")+ , (14, const "куадродец")+ ]
src/Text/Numeral/Language/CHN.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] -@@ -11,14 +10,20 @@ [@ISO639-3@] chn -[@Native name@] -+[@Native name@] chinuk wawa [@English name@] Chinook Jargon -} module Text.Numeral.Language.CHN- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -28,23 +33,36 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- CHN -------------------------------------------------------------------------------- -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+entry ∷ Entry+entry = emptyEntry+ { entIso639_2 = ["chn"]+ , entIso639_3 = Just "chn"+ , entNativeNames = ["chinuk wawa"]+ , entEnglishName = Just "Chinook Jargon"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ α → β+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ findRule ( 0, lit )@@ -53,9 +71,12 @@ ] 100 -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (0, 100)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just $ \_ _ _ → " pe " , reprMul = Just $ \_ _ _ → " " }
+ src/Text/Numeral/Language/CHR.hs view
@@ -0,0 +1,244 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] chr++[@ISO639-3@] chr++[@Native name@] ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ (Tsalagi Gawonihisdi)++[@English name@] Cherokee+-}++module Text.Numeral.Language.CHR+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ -- * Transliteration+ , transliterate+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Char ( Char )+import "base" Data.Function ( ($), const, fix )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral, (-), String )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+import qualified "text" Data.Text as T ( concatMap, singleton )+++--------------------------------------------------------------------------------+-- CHR+--------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_2 = ["chr"]+ , entIso639_3 = Just "chr"+ , entNativeNames = let n = "ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ" in [n, transliterate n]+ , entEnglishName = Just "Cherokee"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β+struct = checkPos+ $ fix+ $ findRule ( 0, lit )+ [ ( 11, add 10 L )+ , ( 20, step 10 10 R L)+ , ( 100, step1 100 10 R L)+ , (1000, step1 1000 1000 R L)+ ]+ (dec 6 - 1)++bounds ∷ (Integral α) ⇒ (α, α)+bounds = (0, dec 6 - 1)++cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \_ n → M.lookup n syms+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ }+ where+ (Mul _ _ ⊞ _) _ = " "+ (Lit 100 ⊞ _) _ = " "+ (_ ⊞ _) _ = ""++ (Lit _ ⊡ Lit 100) CtxEmpty = ""+ (Lit _ ⊡ Lit 100) _ = " "+ (_ ⊡ Lit 1000) _ = " "+ (_ ⊡ _ ) _ = ""++ syms =+ M.fromList+ [ (0, const "Ꮭ ᎪᏍᏗ")+ , (1, \c → case c of+ CtxAdd L (Lit 10) _ → "Ꮜ"+ CtxAdd R _ _ → "ᏌᏬ"+ _ → "ᏐᏬ"+ )+ , (2, const "ᏔᎵ")+ , (3, \c → case c of+ CtxAdd L (Lit 10) _ → "ᏦᎦ"+ CtxMul _ (Lit 100) CtxEmpty → "Ꮶ"+ CtxMul _ (Lit 100) _ → "ᏦᎢ"+ _ → "ᏦᎢ"+ )+ , (4, \c → case c of+ CtxAdd L (Lit 10) _ → "ᏂᎦ"+ _ → "ᏅᎩ"+ )+ , (5, \c → case c of+ CtxAdd L (Lit 10) _ → "ᎯᏍᎦ"+ _ → "ᎯᏍᎩ"+ )+ , (6, \c → case c of+ CtxAdd L (Lit 10) _ → "ᏓᎳ"+ _ → "ᏑᏓᎵ"+ )+ , (7, \c → case c of+ CtxAdd L (Lit 10) _ → "ᎦᎵᏆ"+ CtxMul _ (Lit 100) CtxEmpty → "ᎦᎵᏆ"+ CtxMul _ (Lit 100) _ → "ᎦᎵᏉᎩ"+ CtxMul _ _ _ → "ᎦᎵᏆ"+ _ → "ᎦᎵᏉᎩ"+ )+ , (8, \c → case c of+ CtxAdd L (Lit 10) _ → "ᏁᎳ"+ CtxMul _ (Lit 100) CtxEmpty → "ᏧᏁᎵ"+ _ → "ᏧᏁᎳ"+ )+ , (9, \c → case c of+ CtxMul _ (Lit 100) _ → "ᏐᏁᎵ"+ _ → "ᏐᏁᎳ"+ )+ , (10, \c → case c of+ CtxAdd R (Lit _) _ → "Ꮪ"+ CtxMul R (Lit _) (CtxAdd {}) → "ᏍᎪ"+ _ → "ᏍᎪᎯ"+ )+ , (100, const "ᏍᎪᎯᏥᏆ")+ , (1000, const "ᎢᏯᎦᏴᎵ")+ ]++-- | Transliterates a string written in the Cherokee syllabary to the+-- latin alphabet.+transliterate ∷ Text → Text+transliterate xs = T.concatMap f xs+ where+ f ∷ Char → Text+ f 'Ꭰ' = "a"+ f 'Ꭱ' = "e"+ f 'Ꭲ' = "i"+ f 'Ꭳ' = "o"+ f 'Ꭴ' = "u"+ f 'Ꭵ' = "v"+ f 'Ꭶ' = "ga"+ f 'Ꭷ' = "ka"+ f 'Ꭸ' = "ge"+ f 'Ꭹ' = "gi"+ f 'Ꭺ' = "go"+ f 'Ꭻ' = "gu"+ f 'Ꭼ' = "gv"+ f 'Ꭽ' = "ha"+ f 'Ꭾ' = "he"+ f 'Ꭿ' = "hi"+ f 'Ꮀ' = "ho"+ f 'Ꮁ' = "hu"+ f 'Ꮂ' = "hv"+ f 'Ꮃ' = "la"+ f 'Ꮄ' = "le"+ f 'Ꮅ' = "li"+ f 'Ꮆ' = "lo"+ f 'Ꮇ' = "lu"+ f 'Ꮈ' = "lv"+ f 'Ꮉ' = "ma"+ f 'Ꮊ' = "me"+ f 'Ꮋ' = "mi"+ f 'Ꮌ' = "mo"+ f 'Ꮍ' = "mu"+ f 'Ꮎ' = "na"+ f 'Ꮏ' = "hna"+ f 'Ꮐ' = "nah"+ f 'Ꮑ' = "ne"+ f 'Ꮒ' = "ni"+ f 'Ꮓ' = "no"+ f 'Ꮔ' = "nu"+ f 'Ꮕ' = "nv"+ f 'Ꮖ' = "qua"+ f 'Ꮗ' = "que"+ f 'Ꮘ' = "qui"+ f 'Ꮙ' = "quo"+ f 'Ꮚ' = "quu"+ f 'Ꮛ' = "quv"+ f 'Ꮝ' = "s"+ f 'Ꮜ' = "sa"+ f 'Ꮞ' = "se"+ f 'Ꮟ' = "si"+ f 'Ꮠ' = "so"+ f 'Ꮡ' = "su"+ f 'Ꮢ' = "sv"+ f 'Ꮣ' = "da"+ f 'Ꮤ' = "ta"+ f 'Ꮥ' = "de"+ f 'Ꮦ' = "te"+ f 'Ꮧ' = "di"+ f 'Ꮨ' = "ti"+ f 'Ꮩ' = "do"+ f 'Ꮪ' = "du"+ f 'Ꮫ' = "dv"+ f 'Ꮬ' = "dla"+ f 'Ꮭ' = "tla"+ f 'Ꮮ' = "tle"+ f 'Ꮯ' = "tli"+ f 'Ꮰ' = "tlo"+ f 'Ꮱ' = "tlu"+ f 'Ꮲ' = "tlv"+ f 'Ꮳ' = "tsa"+ f 'Ꮴ' = "tse"+ f 'Ꮵ' = "tsi"+ f 'Ꮶ' = "tso"+ f 'Ꮷ' = "tsu"+ f 'Ꮸ' = "tsv"+ f 'Ꮹ' = "wa"+ f 'Ꮺ' = "we"+ f 'Ꮻ' = "wi"+ f 'Ꮼ' = "wo"+ f 'Ꮽ' = "wu"+ f 'Ꮾ' = "wv"+ f 'Ꮿ' = "ya"+ f 'Ᏸ' = "ye"+ f 'Ᏹ' = "yi"+ f 'Ᏺ' = "yo"+ f 'Ᏻ' = "yu"+ f 'Ᏼ' = "yv"+ f c = T.singleton c+
+ src/Text/Numeral/Language/CLM.hs view
@@ -0,0 +1,115 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2B@] -++[@ISO639-3@] clm++[@Native name@] nəxʷsƛ̕ay̕əmúcən++[@English name@] Klallam+-}++module Text.Numeral.Language.CLM+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( ($), const, fix )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- CLM+--------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_3 = Just "clm"+ , entNativeNames = ["nəxʷsƛ̕ay̕əmúcən"]+ , entEnglishName = Just "Klallam"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β+struct = fix+ $ findRule ( 1, lit )+ [ ( 11, add 10 R )+ , ( 20, lit )+ , ( 21, add 20 R )+ , ( 30, step 10 10 R L )+ , ( 100, lit )+ , ( 101, step 100 10 R L)+ , (1000, mul 100 R L )+ ]+ 1000++bounds ∷ (Integral α) ⇒ (α, α)+bounds = (1, 1000)++cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \_ n → M.lookup n syms+ , reprAdd = Just $ \_ _ _ → " ʔiʔ "+ , reprMul = Just (⊡)+ }+ where+ (_ ⊡ Lit 100) _ = " "+ (_ ⊡ _ ) _ = ""++ syms =+ M.fromList+ [ (1, const "nə́c̕uʔ")+ , (2, const "čə́saʔ")+ , (3, forms "ɬíxʷ" "ɬxʷ" )+ , (4, forms "ŋús" "ŋəs" )+ , (5, forms "ɬq̕áčš" "ɬq̕čš" )+ , (6, forms "t̕x̣ə́ŋ" "t̕x̣əŋ" )+ , (7, forms "c̕úʔkʷs" "c̕aʔkʷs")+ , (8, forms "táʔcs" "taʔcs" )+ , (9, forms "tə́kʷxʷ" "təkʷxʷ")+ , (10, \c → case c of+ CtxMul R _ _ → "ɬšáʔ"+ _ → "ʔúpən"+ )+ , (20, const "nəc̕xʷk̕ʷə́s")+ , (100, const "snáč̕əwəč")+ ]++ forms ∷ s+ → s+ → Ctx (Exp i)+ → s+ forms n t ctx = case ctx of+ CtxMul _ (Lit 10) _ → t+ _ → n
+ src/Text/Numeral/Language/CS.hs view
@@ -0,0 +1,154 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] cs++[@ISO639-2B@] cze++[@ISO639-2T@] ces++[@ISO639-3@] ces++[@Native name@] Čeština++[@English name@] Czech+-}++module Text.Numeral.Language.CS+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( otherwise )+import "base" Data.Function ( const )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Eq.Unicode ( (≡) )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.Ord.Unicode ( (≤) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "this" Text.Numeral.Language.PL ( struct )+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- CS+-------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "cs"+ , entIso639_2 = ["cze", "ces"]+ , entIso639_3 = Just "ces"+ , entNativeNames = ["Čeština"]+ , entEnglishName = Just "Czech"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.pelletierRepr (quantityRepr "ilión" "ilióny" "iliónů")+ (quantityRepr "iliarda" "iliarda" "iliarda")+ []+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ }+ where+ (Lit n ⊞ Lit 10) _ | n ≤ 9 = ""+ (_ ⊞ _ ) _ = " "++ (_ ⊡ Lit 10 ) _ = ""+ (_ ⊡ Lit 100) _ = " "+ (_ ⊡ _ ) _ = " "++ quantityRepr ∷ Text → Text → Text → BN.PostfixRepr i+ quantityRepr s p1 p2 _ ctx =+ case ctx of+ CtxMul _ (Lit 1) _ → s+ CtxMul _ (Lit n) _ | n ≤ 4 → p1+ CtxMul {} → p2+ _ → s++ syms =+ M.fromList+ [ (0, const "nula")+ , (1, \c → case c of+ CtxAdd _ (Lit 10) _ → "jede"+ CtxAdd {} → "jedna"+ _ → "jeden"+ )+ , (2, \c → case c of+ CtxMul _ (Lit 100) _ → "dvě"+ _ → "dva"+ )+ , (3, const "tři")+ , (4, \c → case c of+ CtxAdd _ (Lit 10) _ → "ctr"+ _ → "čtyři"+ )+ , (5, \c → case c of+ CtxAdd _ (Lit 10) _ → "pat"+ CtxMul _ (Lit 10) _ → "pa"+ _ → "pět"+ )+ , (6, \c → case c of+ CtxMul _ (Lit 10) _ → "še"+ _ → "šest"+ )+ , (7, const "sedm")+ , (8, const "osm")+ , (9, \c → case c of+ CtxAdd _ (Lit 10) _ → "devate"+ CtxMul _ (Lit 10) _ → "devá"+ _ → "devět"+ )+ , (10, \c → case c of+ CtxAdd R (Lit n) _+ | n ≤ 9 → "náct"+ CtxMul R (Lit n) _+ | n ≤ 4 → "cet"+ | otherwise → "desát"+ _ → "deset"+ )+ , (100, \c → case c of+ CtxMul _ (Lit n) _+ | n ≡ 2 → "stě"+ | n ≤ 4 → "sta"+ | n ≤ 9 → "set"+ _ → "sto"+ )+ , (1000, \c → case c of+ CtxMul _ (Lit n) _ | n ≤ 4 → "tisíce"+ _ → "tisíc"+ )+ ]
src/Text/Numeral/Language/DE.hs view
@@ -1,14 +1,16 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] de [@ISO639-2B@] ger +[@ISO639-2T@] deu+ [@ISO639-3@] deu [@Native name@] Deutsch@@ -17,8 +19,15 @@ -} module Text.Numeral.Language.DE- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ , ordinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -29,62 +38,94 @@ import "base" Data.Bool ( otherwise ) import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-), Integer )+import "base" Prelude ( Integral, (-), negate ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.List.Unicode ( (∈) )-import "base-unicode-symbols" Data.Ord.Unicode ( (≥) )+import "base-unicode-symbols" Data.Ord.Unicode ( (≤), (≥) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.BigNum as BN-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) ------------------------------------------------------------------------------- -- DE ------------------------------------------------------------------------------- -{--Sources:- http://de.wikipedia.org/wiki/Zahlennamen--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "de"+ , entIso639_2 = ["ger", "deu"]+ , entIso639_3 = Just "deu"+ , entNativeNames = ["Deutsch"]+ , entEnglishName = Just "German"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ , entOrdinal = Just Conversion+ { toNumeral = ordinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β+ordinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+ordinal inf = ordinalRepr inf ∘ struct++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β ) ⇒ α → β-struct = pos $ fix $ rule `combine` pelletierScale R L BN.rule+struct = pos+ $ fix+ $ findRule ( 0, lit )+ [ ( 13, add 10 L )+ , ( 20, mul 10 L L)+ , ( 100, step 100 10 R L)+ , (1000, step 1000 1000 R L)+ ]+ (dec 6 - 1)+ `combine` pelletierScale R L BN.rule++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++genericRepr ∷ Repr i+genericRepr = defaultRepr+ { reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprNeg = Just $ \_ _ → "minus "+ } where- rule = findRule ( 0, lit )- [ ( 13, add 10 L )- , ( 20, mul 10 L L)- , ( 100, step1 100 10 R L)- , (1000, step 1000 1000 R L)- ]- (dec 6 - 1)+ (Lit n ⊞ (_ `Mul` Lit 10)) _ | n ≤ 9 = "und"+ (_ ⊞ _ ) _ = "" -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s-cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms- , reprScale = pelletierRepr- , reprAdd = Just (⊞)- , reprMul = Just $ \_ _ _ → ""- , reprNeg = Just $ \_ _ → "minus "+ (_ ⊡ Scale _ _ _) _ = " "+ (_ ⊡ _) _ = ""+++cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render genericRepr+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.pelletierRepr (BN.quantityName "illion" "illionen")+ (BN.quantityName "illiarde" "illiarden")+ bigNumSyms } where- (_ ⊞ (_ `Mul` Lit 10)) _ = "und"- (_ ⊞ _ ) _ = ""- syms = M.fromList [ (0, const "null") , (1, \c → case c of- CtxAdd {} → "ein"+ CtxAdd R _ _ → "eins"+ CtxAdd L _ _ → "ein" CtxMul _ (Lit n) _ | n ≥ dec 6 → "eine" | n ≥ 100 → "ein"@@ -111,7 +152,7 @@ , (9, const "neun") , (10, \c → case c of CtxMul _ (Lit 3) _ → "ßig"- CtxMul _ (Lit _) _ → "zig"+ CtxMul R (Lit _) _ → "zig" _ → "zehn" ) , (11, const "elf")@@ -120,23 +161,81 @@ , (1000, const "tausend") ] -pelletierRepr ∷ (IsString s, Monoid s)- ⇒ Integer → Integer → Exp → Ctx Exp → Maybe s-pelletierRepr =- BN.pelletierRepr- "illion" "illion"- "illiarde" "illiarde"- [ (8, BN.forms "okt" "okto" "okto" "okto" "oktin")- , (10, \c → case c of- CtxAdd _ (Lit 100) _ → "dezi"- CtxMul _ _ (CtxAdd _ (Lit 100) _) → "ginta"- CtxMul {} → "gint"- _ → "dez"- )- , (100, \c → case c of- CtxMul _ (Lit n) _- | n ∈ [2,3,6] → "zent"- | otherwise → "gent"- _ → "zent"- )- ]+ordinalRepr ∷ i → Exp i → Maybe Text+ordinalRepr = render genericRepr+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.pelletierRepr (BN.ordQuantityName "illion" "illionste"+ "illion" "illionste"+ )+ (BN.ordQuantityName "illiarde" "illiardste"+ "illiarde" "illiardste"+ )+ bigNumSyms+ }+ where+ syms =+ M.fromList+ [ (0, \c → case c of+ CtxEmpty → "nullte"+ _ → "null"+ )+ , (1, \c → case c of+ _ | isOutside R c → "erste"+ CtxAdd {} → "ein"+ CtxMul _ (Lit n) _+ | n ≥ dec 6 → "eine"+ | n ≥ 100 → "ein"+ _ → "eins"+ )+ , (2, \c → case c of+ _ | isOutside R c → "zweite"+ CtxMul _ (Lit 10) _ → "zwan"+ _ → "zwei"+ )+ , (3, \c → if isOutside R c then "dritte" else "drei")+ , (4, \c → if isOutside R c then "vierte" else "vier")+ , (5, \c → if isOutside R c then "fünfte" else "fünf")+ , (6, \c → case c of+ _ | isOutside R c → "sechste"+ CtxAdd _ (Lit 10) _ → "sech"+ CtxMul _ (Lit 10) _ → "sech"+ _ → "sechs"+ )+ , (7, \c → case c of+ _ | isOutside R c → "siebte"+ CtxAdd _ (Lit 10) _ → "sieb"+ CtxMul _ (Lit 10) _ → "sieb"+ _ → "sieben"+ )+ , (8, \c → if isOutside R c then "achte" else "acht")+ , (9, \c → if isOutside R c then "neunte" else "neun")+ , (10, \c → case c of+ CtxMul _ (Lit 3) _ | isOutside R c → "ßigste"+ | otherwise → "ßig"+ CtxMul R (Lit _) _ | isOutside R c → "zigste"+ | otherwise → "zig"+ _ | isOutside R c → "zehnte"+ | otherwise → "zehn"+ )+ , (11, \c → if isOutside R c then "elfte" else "elf")+ , (12, \c → if isOutside R c then "zwölfte" else "zwölf")+ , (100, \c → if isOutside R c then "hundertste" else "hundert")+ , (1000, \c → if isOutside R c then "tausendste" else "tausend")+ ]++bigNumSyms ∷ [(ℤ, Ctx (Exp i) → Text)]+bigNumSyms =+ [ (8, BN.forms "okt" "okto" "okto" "okto" "oktin")+ , (10, \c → case c of+ CtxAdd _ (Lit 100) _ → "dezi"+ CtxMul _ _ (CtxAdd _ (Lit 100) _) → "ginta"+ CtxMul {} → "gint"+ _ → "dez"+ )+ , (100, \c → case c of+ CtxMul _ (Lit n) _+ | n ∈ [2,3,6] → "zent"+ | otherwise → "gent"+ _ → "zent"+ )+ ]
src/Text/Numeral/Language/EN.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] en@@ -17,14 +17,23 @@ -} module Text.Numeral.Language.EN- ( uk_cardinal- , ukPelletier_cardinal+ ( -- * Language entries+ gb_entry+ , us_entry+ -- * Conversions+ , gb_cardinal+ , gb_ordinal+ , gbPelletier_cardinal , us_cardinal+ , us_ordinal+ -- * Structure , shortScaleStruct- , longScaleStruct , pelletierScaleStruct+ -- * Bounds+ , bounds ) where + -------------------------------------------------------------------------------- -- Imports --------------------------------------------------------------------------------@@ -32,60 +41,93 @@ import "base" Data.Bool ( otherwise ) import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid ) import "base" Data.Ord ( (<) )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-), Integer )-import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) +import "base" Prelude ( (+), (-), div, subtract, negate, (^), error, Integral )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ, (⋅) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.Exp.Classes as C-import qualified "numerals-base" Text.Numeral.BigNum as BN ( rule, scaleRepr, pelletierRepr )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- EN -------------------------------------------------------------------------------- -uk_cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-uk_cardinal = render uk_cardinalRepr' ∘ shortScaleStruct+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "en"+ , entIso639_2 = ["eng"]+ , entIso639_3 = Just "eng"+ , entNativeNames = ["English"]+ , entEnglishName = Just "English"+ } -ukPelletier_cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s)- ⇒ α → Maybe s-ukPelletier_cardinal = render uk_cardinalRepr' { reprScale = pelletierRepr }- ∘ pelletierScaleStruct+gb_entry ∷ Entry+gb_entry = entry+ { entVariant = Just "en-GB"+ , entCardinal = Just Conversion+ { toNumeral = gb_cardinal+ , toStructure = shortScaleStruct+ }+ , entOrdinal = Just Conversion+ { toNumeral = gb_ordinal+ , toStructure = shortScaleStruct+ }+ }++us_entry ∷ Entry+us_entry = entry+ { entVariant = Just "en-US"+ , entCardinal = Just Conversion+ { toNumeral = us_cardinal+ , toStructure = shortScaleStruct+ }+ , entOrdinal = Just Conversion+ { toNumeral = us_ordinal+ , toStructure = shortScaleStruct+ }+ }++gb_cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+gb_cardinal inf = render (cardinalRepr "minus " gb_add) inf ∘ shortScaleStruct++gb_ordinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+gb_ordinal inf = render (ordinalRepr gb_add) inf ∘ shortScaleStruct++gbPelletier_cardinal ∷ (Inflection i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+gbPelletier_cardinal inf = render (cardinalRepr "minus " gb_add) { reprScale = pelletierRepr } inf+ ∘ pelletierScaleStruct where- pelletierRepr = BN.pelletierRepr "illion" "illion"- "illiard" "illiard"+ pelletierRepr = BN.pelletierRepr (\_ _ → "illion")+ (\_ _ → "illiard") [] -us_cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-us_cardinal = render (cardinalRepr (⊞)) ∘ shortScaleStruct- where- ((_ `Mul` Lit 10) ⊞ _) _ = "-"- ((_ `Mul` _ ) ⊞ _) _ = " "- (_ ⊞ _) _ = ""+us_cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+us_cardinal inf = render (cardinalRepr "negative " us_add) inf ∘ shortScaleStruct -shortScaleStruct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β+us_ordinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+us_ordinal inf = render (ordinalRepr us_add) inf ∘ shortScaleStruct++shortScaleStruct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β ) ⇒ α → β shortScaleStruct = pos $ fix $ rule `combine` shortScale1 R L BN.rule -longScaleStruct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β- )- ⇒ α → β-longScaleStruct = pos $ fix $ rule `combine` longScale1 R L BN.rule--pelletierScaleStruct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β+pelletierScaleStruct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β ) ⇒ α → β pelletierScaleStruct = pos $ fix $ rule `combine` pelletierScale1 R L BN.rule -rule ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ Rule α β+rule ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ Rule α β rule = findRule ( 0, lit ) [ ( 13, add 10 L ) , ( 20, mul 10 R L)@@ -94,53 +136,131 @@ ] (dec 6 - 1) -uk_cardinalRepr' ∷ (Monoid s, IsString s) ⇒ Repr s-uk_cardinalRepr' = cardinalRepr (⊞)- where- ((_ `Mul` Lit 10) ⊞ _) _ = "-"- ((_ `Mul` _ ) ⊞ x) _- | eval x < (100 ∷ Integer) = " and "- | otherwise = " "- (_ ⊞ _) _ = ""+bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 30003 - 1 in (negate x, x) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ (Exp → Exp → Ctx Exp → s) → Repr s-cardinalRepr f =+genericRepr ∷ (Exp i → Exp i → Ctx (Exp i) → Text) -- ^ Add representation.+ → Repr i+genericRepr f = defaultRepr- { reprValue = \n → M.lookup n syms- , reprScale = BN.scaleRepr "illion" "illion" []- , reprAdd = Just f+ { reprAdd = Just f , reprMul = Just (⊞)- , reprNeg = Just $ \_ _ → "minus " } where (_ ⊞ Lit 10) _ = "" (_ ⊞ _ ) _ = " " +eval ∷ Exp i → ℤ+eval (Lit x) = x+eval (Add x y) = eval x + eval y+eval (Mul x y) = eval x ⋅ eval y+eval (Sub x y) = subtract (eval x) (eval y)+eval (Neg x) = negate (eval x)+eval (Frac n d) = eval n `div` eval d+eval (Scale b o r) = 10 ^ (eval r ⋅ b + o)+eval (Dual x) = eval x+eval (Plural x) = eval x+eval (Inflection _ x) = eval x+eval Unknown = error "eval: unknown"+++gb_add ∷ Exp i → Exp i → Ctx (Exp i) → Text+((_ `Mul` Lit 10) `gb_add` _) _ = "-"+((_ `Mul` _ ) `gb_add` x) _+ | eval x < (100 ∷ ℤ) = " and "+ | otherwise = " "+(_ `gb_add` _) _ = ""++us_add ∷ Exp i → Exp i → Ctx (Exp i) → Text+((_ `Mul` Lit 10) `us_add` _) _ = "-"+((_ `Mul` _ ) `us_add` _) _ = " "+(_ `us_add` _) _ = ""++cardinalRepr ∷ Text -- ^ Negative number prefix.+ → (Exp i → Exp i → Ctx (Exp i) → Text)+ → Repr i+cardinalRepr neg f =+ (genericRepr f)+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.scaleRepr (\_ _ → "illion") []+ , reprNeg = Just $ \_ _ → neg+ }+ where+ syms =+ M.fromList+ [ (0, const "zero")+ , (1, const "one")+ , (2, ten "two" "two" "twen")+ , (3, ten "three" "thir" "thir")+ , (4, ten "four" "four" "for")+ , (5, ten "five" "fif" "fif")+ , (6, const "six")+ , (7, const "seven")+ , (8, ten "eight" "eigh" "eigh")+ , (9, const "nine")+ , (10, \c → case c of+ CtxAdd _ (Lit _) _ → "teen"+ CtxMul R _ _ → "ty"+ _ → "ten"+ )+ , (11, const "eleven")+ , (12, const "twelve")+ , (100, const "hundred")+ , (1000, const "thousand")+ ]++ ten ∷ s → s → s → Ctx (Exp i) → s+ ten n a m = \c → case c of+ CtxAdd _ (Lit 10) _ → a+ CtxMul _ (Lit 10) _ → m+ _ → n++ordinalRepr ∷ (Exp i → Exp i → Ctx (Exp i) → Text) → Repr i+ordinalRepr f = (genericRepr f)+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.scaleRepr (BN.ordQuantityName "illion" "illionth"+ "illion" "illionth"+ )+ []+ }+ where syms = M.fromList- [ (0, const "zero")- , (1, const "one")- , (2, ten "two" "two" "twen")- , (3, ten "three" "thir" "thir")- , (4, ten "four" "four" "for")- , (5, ten "five" "fif" "fif")- , (6, const "six")- , (7, const "seven")- , (8, ten "eight" "eigh" "eigh")- , (9, const "nine")+ [ (0, const "zeroth")+ , (1, \c → case c of+ _ | isOutside R c → "first"+ | otherwise → "one"+ )+ , (2, ten "second" "two" "two" "twen")+ , (3, ten "third" "three" "thir" "thir")+ , (4, ten "fourth" "four" "four" "for")+ , (5, ten "fifth" "five" "fif" "fif")+ , (6, \c → if isOutside R c then "sixth" else "six")+ , (7, \c → if isOutside R c then "seventh" else "seven")+ , (8, ten "eighth" "eight" "eigh" "eigh")+ , (9, \c → if isOutside R c then "ninth" else "nine") , (10, \c → case c of- CtxAdd _ (Lit _) _ → "teen"- CtxMul R _ _ → "ty"- _ → "ten"+ CtxAdd _ (Lit _) _ | isOutside R c → "teenth"+ | otherwise → "teen"+ CtxMul R _ _ | isOutside R c → "tieth"+ | otherwise → "ty"+ _ | isOutside R c → "tenth"+ | otherwise → "ten" )- , (11, const "eleven")- , (12, const "twelve")- , (100, const "hundred")- , (1000, const "thousand")+ , (11, \c → if isOutside R c then "eleventh" else "eleven")+ , (12, \c → if isOutside R c then "twelfth" else "twelf")+ , (100, \c → if isOutside R c then "hundreth" else "hundred")+ , (1000, \c → if isOutside R c then "thousandth" else "thousand") ] - ten ∷ s → s → s → Ctx Exp → s- ten n a m = \c → case c of- CtxAdd _ (Lit 10) _ → a- CtxMul _ (Lit 10) _ → m- _ → n+ ten ∷ s -- ^ Ordinal form.+ → s -- ^ Cardinal form; normal.+ → s -- ^ Cardinal form; added to ten.+ → s -- ^ Cardinal form; multiplied with ten.+ → Ctx (Exp i)+ → s+ ten o n a m ctx = case ctx of+ _ | isOutside R ctx → o+ CtxAdd _ (Lit 10) _ → a+ CtxMul _ (Lit 10) _ → m+ _ → n
src/Text/Numeral/Language/EO.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] eo@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.EO- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -28,23 +33,37 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- EO -------------------------------------------------------------------------------- -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "eo"+ , entIso639_2 = ["epo"]+ , entIso639_3 = Just "epo"+ , entNativeNames = ["Esperanto"]+ , entEnglishName = Just "Esperanto"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ α → β+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ findRule ( 0, lit )@@ -53,9 +72,12 @@ ] 1000 -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (0, 1000)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just $ \_ _ _ → " " , reprMul = Just $ \_ _ _ → "" }
src/Text/Numeral/Language/ES.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] es@@ -17,47 +17,66 @@ -} module Text.Numeral.Language.ES- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where ------------------------------------------------------------------------------- -- Imports ------------------------------------------------------------------------------- +import "base" Data.Bool ( otherwise ) import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid ) import "base" Data.Ord ( (<) )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-), Integer )+import "base" Prelude ( (-), negate, Integral ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.BigNum as BN-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) ------------------------------------------------------------------------------- -- ES ------------------------------------------------------------------------------- --- Sources:--- http://www.sf.airnet.ne.jp/~ts/language/number/spanish.html--- http://spanish.about.com/cs/forbeginners/a/cardinalnum_beg.htm--- http://www.learn-spanish-help.com/count-in-spanish.html--- http://www.donquijote.org/spanishlanguage/numbers/numbers1.asp--- http://en.wiktionary.org/wiki/Appendix:Spanish_numerals+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "es"+ , entIso639_2 = ["spa"]+ , entIso639_3 = Just "spa"+ , entNativeNames = ["Español"]+ , entEnglishName = Just "Spanish"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ ( G.Feminine i, G.Masculine i+ , Integral α, E.Scale α+ )+ ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β+struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ , E.Inflection β, G.Masculine (E.Inf β) ) ⇒ α → β-struct = pos (fix $ rule `combine` longScale R L BN.rule)+struct = pos $ fix $ rule `combine` longScale1_es where rule = findRule ( 0, lit ) [ ( 11, add 10 L )@@ -70,9 +89,25 @@ ] (dec 6 - 1) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+-- | Like 'longScale1' with the difference that all scale elements are+-- masculine.+longScale1_es ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Add β, E.Mul β, E.Scale β+ , E.Inflection β, G.Masculine (E.Inf β)+ )+ ⇒ Rule α β+longScale1_es = mulScale1_es 6 0 R L BN.rule+ where+ mulScale1_es = mulScale_ $ \f m s _ → masculineMul (f m) s+ masculineMul x y = E.inflection (G.masculine) $ E.mul x y++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr ∷ ( G.Feminine i, G.Masculine i)+ ⇒ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \inf n → M.lookup n (syms inf) , reprScale = longScaleRepr , reprAdd = Just (⊞) , reprMul = Just (⊡)@@ -88,12 +123,16 @@ (_ ⊡ Lit n) _ | n < 1000 = "" (_ ⊡ _ ) _ = " " - syms =+ syms inf = M.fromList [ (0, const "cero") , (1, \c → case c of- CtxAdd _ (Lit 10) _ → "on"- _ → "uno"+ CtxAdd _ (Lit 10) _ → "on"+ CtxAdd _ (Lit 20) _+ | G.isMasculine inf → "ún"+ _ | G.isFeminine inf → "una"+ | G.isMasculine inf → "un"+ | otherwise → "uno" ) , (2, \c → case c of CtxAdd _ (Lit 10) _ → "do"@@ -148,20 +187,21 @@ _ → "veinte" ) , (100, \c → case c of- CtxEmpty → "cien"- CtxAdd {} → "ciento"- CtxMul _ (Lit 5) _ → "ientos"- CtxMul L _ _ → "cien"- _ → "cientos"+ CtxEmpty → "cien"+ CtxAdd {} → "ciento"+ CtxMul _ (Lit 5) _+ | G.isFeminine inf → "ientas"+ | otherwise → "ientos"+ CtxMul L _ _ → "cien"+ _ | G.isFeminine inf → "cientas"+ | otherwise → "cientos" ) , (1000, const "mil") ] -longScaleRepr ∷ (IsString s, Monoid s)- ⇒ Integer → Integer → Exp → Ctx Exp → Maybe s+longScaleRepr ∷ i → ℤ → ℤ → (Exp i) → Ctx (Exp i) → Maybe Text longScaleRepr =- BN.scaleRepr "illón" "illones"+ BN.scaleRepr (BN.quantityName "illón" "illones") [ (4, BN.forms "cuatr" "cuator" "cuator" "cuatra" "cuatri") , (9, BN.forms "non" "noven" "noven" "nona" "non") ]-
+ src/Text/Numeral/Language/Entries.hs view
@@ -0,0 +1,117 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++module Text.Numeral.Language.Entries ( entries ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "this" Text.Numeral.Entry ( Entry(..) )+import qualified "this" Text.Numeral.Language.AF as AF+import qualified "this" Text.Numeral.Language.AMP as AMP+import qualified "this" Text.Numeral.Language.BG as BG+import qualified "this" Text.Numeral.Language.CHN as CHN+import qualified "this" Text.Numeral.Language.CHR as CHR+import qualified "this" Text.Numeral.Language.CLM as CLM+import qualified "this" Text.Numeral.Language.CS as CS+-- import qualified "this" Text.Numeral.Language.CY as CY+-- import qualified "this" Text.Numeral.Language.DA as DA+import qualified "this" Text.Numeral.Language.DE as DE+import qualified "this" Text.Numeral.Language.EN as EN+import qualified "this" Text.Numeral.Language.EO as EO+import qualified "this" Text.Numeral.Language.ES as ES+-- import qualified "this" Text.Numeral.Language.ET as ET+import qualified "this" Text.Numeral.Language.FI as FI+import qualified "this" Text.Numeral.Language.FR as FR+import qualified "this" Text.Numeral.Language.FUR as FUR+import qualified "this" Text.Numeral.Language.GSW as GSW+import qualified "this" Text.Numeral.Language.GV as GV+import qualified "this" Text.Numeral.Language.HE as HE+import qualified "this" Text.Numeral.Language.HOP as HOP+-- import qualified "this" Text.Numeral.Language.HR as HR+-- import qualified "this" Text.Numeral.Language.HU as HU+import qualified "this" Text.Numeral.Language.IT as IT+import qualified "this" Text.Numeral.Language.JA as JA+import qualified "this" Text.Numeral.Language.LA as LA+import qualified "this" Text.Numeral.Language.LLD as LLD+import qualified "this" Text.Numeral.Language.MG as MG+import qualified "this" Text.Numeral.Language.NL as NL+import qualified "this" Text.Numeral.Language.NO as NO+import qualified "this" Text.Numeral.Language.NQM as NQM+import qualified "this" Text.Numeral.Language.OJ as OJ+-- import qualified "this" Text.Numeral.Language.PAA as PAA+import qualified "this" Text.Numeral.Language.PDC as PDC+import qualified "this" Text.Numeral.Language.PL as PL+import qualified "this" Text.Numeral.Language.PT as PT+-- import qualified "this" Text.Numeral.Language.RO as RO+import qualified "this" Text.Numeral.Language.RU as RU+import qualified "this" Text.Numeral.Language.SCO as SCO+import qualified "this" Text.Numeral.Language.SV as SV+import qualified "this" Text.Numeral.Language.TR as TR+import qualified "this" Text.Numeral.Language.WO as WO+import qualified "this" Text.Numeral.Language.YOR as YOR+import qualified "this" Text.Numeral.Language.ZH as ZH+++--------------------------------------------------------------------------------+-- Language entries+--------------------------------------------------------------------------------++entries ∷ [Entry]+entries =+ [ AF.entry+ , AMP.entry+ , BG.entry+ , CHN.entry+ , CHR.entry+ , CLM.entry+ , CS.entry+--, CY.entry+--, DA.entry+ , DE.entry+ , EN.gb_entry+ , EN.us_entry+ , EO.entry+ , ES.entry+--, ET.entry+ , FI.entry+ , FR.entry+ , FUR.entry+ , GSW.entry+ , GV.entry+ , HE.entry+ , HOP.entry+--, HR.entry+--, HU.entry+ , IT.entry+ , JA.daiji_entry+ , JA.kanji_entry+ , JA.on'yomi_entry+ , JA.preferred_entry+ , LA.entry+ , LLD.entry+ , MG.entry+ , NL.entry+ , NO.entry+ , NQM.entry+ , OJ.entry+--, PAA.entry+ , PDC.entry+ , PL.entry+ , PT.entry+--, RO.entry+ , RU.entry+ , SCO.entry+ , SV.entry+ , TR.entry+ , WO.entry+ , YOR.entry+ , ZH.finance_simpl_entry+ , ZH.finance_trad_entry+ , ZH.pinyin_entry+ , ZH.simpl_entry+ , ZH.trad_entry+ ]
+ src/Text/Numeral/Language/FI.hs view
@@ -0,0 +1,960 @@+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] fi++[@ISO639-2B@] fin++[@ISO639-3@] fin++[@Native name@] suomi++[@English name@] Finnish+-}++module Text.Numeral.Language.FI+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ , ordinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( otherwise )+import "base" Data.Function ( ($), fix, flip )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Num, Integral, (-), negate, divMod )+import "base-unicode-symbols" Data.Bool.Unicode ( (∧) )+import "base-unicode-symbols" Data.Eq.Unicode ( (≡) )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.Ord.Unicode ( (≤) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- FI+-------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "fi"+ , entIso639_2 = ["fin"]+ , entIso639_3 = Just "fin"+ , entNativeNames = ["suomi"]+ , entEnglishName = Just "Finnish"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ , entOrdinal = Just Conversion+ { toNumeral = ordinal+ , toStructure = struct+ }+ }++cardinal ∷ ( G.Singular i, G.Plural i+ , G.Abessive i+ , G.Accusative i+ , G.Comitative i+ , G.Delative i+ , G.Distributive i+ , G.DistributiveTemporal i+ , G.Essive i+ , G.Genitive i+ , G.Instructive i+ , G.Lative i+ , G.LocativeInessive i+ , G.LocativeElative i+ , G.LocativeIllative i+ , G.LocativeAdessive i+ , G.LocativeAblative i+ , G.LocativeAllative i+ , G.Multiplicative i+ , G.Nominative i+ , G.Partitive i+ , G.Sublative i+ , G.SuperEssive i+ , G.Translative i+ , Integral α, E.Scale α+ )+ ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++ordinal ∷ ( G.Singular i, G.Plural i+ , G.Abessive i+ , G.Accusative i+ , G.Comitative i+ , G.Delative i+ , G.Distributive i+ , G.DistributiveTemporal i+ , G.Essive i+ , G.Genitive i+ , G.Instructive i+ , G.Lative i+ , G.LocativeInessive i+ , G.LocativeElative i+ , G.LocativeIllative i+ , G.LocativeAdessive i+ , G.LocativeAblative i+ , G.LocativeAllative i+ , G.Multiplicative i+ , G.Nominative i+ , G.Partitive i+ , G.Sublative i+ , G.SuperEssive i+ , G.Translative i+ , Integral α, E.Scale α+ )+ ⇒ i → α → Maybe Text+ordinal inf = ordinalRepr inf ∘ struct++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Add β, E.Mul β+ , E.Inflection β, E.Scale β+ , G.Singular (E.Inf β)+ , G.Nominative (E.Inf β)+ , G.Accusative (E.Inf β)+ , G.Partitive (E.Inf β)+ )+ ⇒ α → β+struct = fix $ rule `combine` pelletierScale R L BN.rule+ where+ rule = findRule ( 0, lit)+ [ ( 11, add 10 L)+ , ( 20, fi_mul 10)+ , ( 100, step 100 10 R L)+ , (1000, step 1000 1000 R L)+ ]+ (dec 6 - 1)++-- | Like the normal 'mul' rule with the difference that the value+-- that is multiplied is changed to the partitive case.+fi_mul ∷ ( Integral α+ , E.Add β, E.Mul β, E.Inflection β+ , G.Singular (E.Inf β)+ , G.Nominative (E.Inf β)+ , G.Accusative (E.Inf β)+ , G.Partitive (E.Inf β)+ )+ ⇒ α → Rule α β+fi_mul val =+ \f n → let (m, a) = n `divMod` val+ mval = E.mul (f m) (E.inflection toPartitive $ f val)+ in if a ≡ 0+ then mval+ else (flip E.add) (f a) mval+ where+ toPartitive ∷ (G.Singular i, G.Nominative i, G.Accusative i, G.Partitive i)+ ⇒ i → i+ toPartitive inf | G.isSingular inf ∧ G.isNominative inf = G.partitive inf+ | G.isSingular inf ∧ G.isAccusative inf = G.partitive inf+ | otherwise = inf++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 15 - 1 in (negate x, x)++cardinalRepr ∷ ( G.Singular i, G.Plural i+ , G.Abessive i+ , G.Accusative i+ , G.Comitative i+ , G.Delative i+ , G.Distributive i+ , G.DistributiveTemporal i+ , G.Essive i+ , G.Genitive i+ , G.Instructive i+ , G.Lative i+ , G.LocativeInessive i+ , G.LocativeElative i+ , G.LocativeIllative i+ , G.LocativeAdessive i+ , G.LocativeAblative i+ , G.LocativeAllative i+ , G.Multiplicative i+ , G.Nominative i+ , G.Partitive i+ , G.Sublative i+ , G.SuperEssive i+ , G.Translative i+ )+ ⇒ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprScale = BN.pelletierRepr+ (BN.quantityName "iljoona" "iljoonaa")+ (BN.quantityName "iljardi" "iljardia")+ []+ , reprAdd = Just $ \_ _ _ → ""+ , reprMul = Just $ \_ _ _ → ""+ }+ where+ syms inf =+ M.fromList+ [ (0, \c → infForms inf c+ -- singular+ "nolla" {- nom -} "nolla" {- acc -}+ "nollan" {- gen -} "nollaa" {- ptv -}+ "nollana" {- ess -} "nollaksi" {- transl -}+ "nollassa" {- ine -} "nollasta" {- ela -}+ "nollaan" {- ill -} "nollalla" {- ade -}+ "nollalta" {- abl -} "nollalle" {- all -}+ "nollatta" {- abe -}+ "?" {- other -}+ -- plural+ "nollat" {- nom -} "nollat" {- acc -}+ "nollien" {- gen -} "nollia" {- ptv -}+ "nollina" {- ess -} "nolliksi" {- transl -}+ "nollissa" {- ine -} "nollista" {- ela -}+ "nolliin" {- ill -} "nollilla" {- ade -}+ "nollilta" {- abl -} "nollille" {- all -}+ "nollitta" {- abe -} "nolline" {- com -}+ "nollin" {- instr -}+ "?" {- other -}+ )+ , (1, \c → infForms inf c+ -- singular+ "yksi" {- nom -} "yksi" {- acc -}+ "yhden" {- gen -} "yhtä" {- ptv -}+ "yhtenä" {- ess -} "yhdeksi" {- transl -}+ "yhdessä" {- ine -} "yhdestä" {- ela -}+ "yhteen" {- ill -} "yhdellä" {- ade -}+ "yhdeltä" {- abl -} "yhdelle" {- all -}+ "yhdettä" {- abe -}+ (case inf of+ _ | G.isSuperEssive inf → "yhtäällä"+ | G.isDelative inf → "yhtäältä"+ | G.isSublative inf → "yhtäälle"+ | G.isLative inf → "yhä"+ | G.isMultiplicative inf → "yhdesti"+ | otherwise → "?"+ )+ -- plural+ "yhdet" {- nom -} "yhdet" {- acc -}+ "yksien" {- gen -} "yksiä" {- ptv -}+ "yksinä" {- ess -} "yksiksi" {- transl -}+ "yksissä" {- ine -} "yksistä" {- ela -}+ "yksiin" {- ill -} "yksillä" {- ade -}+ "yksiltä" {- abl -} "yksille" {- all -}+ "yksittä" {- abe -} "yksine" {- com -}+ "yksin" {- instr -}+ (case inf of+ _ | G.isDistributive inf → "yksittäin"+ | otherwise → "?"+ )+ )+ , (2, \c → infForms inf c+ -- singular+ "kaksi" {- nom -} "kaksi" {- acc -}+ "kahden" {- gen -} "kahta" {- ptv -}+ "kahtena" {- ess -} "kahdeksi" {- transl -}+ "kahdessa" {- ine -} "kahdesta" {- ela -}+ "kahteen" {- ill -} "kahdella" {- ade -}+ "kahdelta" {- abl -} "kahdelle" {- all -}+ "kahdetta" {- abe -}+ (case inf of+ _ | G.isInstructive inf → "kahden"+ | G.isSuperEssive inf → "kahtaalla"+ | G.isDelative inf → "kahtaalta"+ | G.isSublative inf → "kahtaalle"+ | G.isLative inf → "kahtia"+ | G.isMultiplicative inf → "kahdesti"+ | otherwise → "?"+ )+ -- plural+ "kahdet" {- nom -} "kahdet" {- acc -}+ "kaksien" {- gen -} "kaksia" {- ptv -}+ "kaksina" {- ess -} "kaksiksi" {- transl -}+ "kaksissa" {- ine -} "kaksista" {- ela -}+ "kaksiin" {- ill -} "kaksilla" {- ade -}+ "kaksilta" {- abl -} "kaksille" {- all -}+ "kaksitta" {- abe -} "kaksine" {- com -}+ "kaksin" {- instr -}+ (case inf of+ _ | G.isDistributive inf → "kaksittain"+ | otherwise → "?"+ )+ )+ , (3, \c → infForms inf c+ -- singular+ "kolme" {- nom -} "kolme" {- acc -}+ "kolmen" {- gen -} "kolmea" {- ptv -}+ "kolmena" {- ess -} "kolmeksi" {- transl -}+ "kolmessa" {- ine -} "kolmesta" {- ela -}+ "kolmeen" {- ill -} "kolmella" {- ade -}+ "kolmelta" {- abl -} "kolmelle" {- all -}+ "kolmetta" {- abe -}+ (case inf of+ _ | G.isInstructive inf → "kolmen"+ | G.isLative inf → "kolmia"+ | G.isMultiplicative inf → "kolmesti"+ | otherwise → "?"+ )+ -- plural+ "kolmet" {- nom -} "kolmet" {- acc -}+ "kolmien" {- gen -} "kolmia" {- ptv -}+ "kolmina" {- ess -} "kolmiksi" {- transl -}+ "kolmissa" {- ine -} "kolmista" {- ela -}+ "kolmiin" {- ill -} "kolmilla" {- ade -}+ "kolmilta" {- abl -} "kolmille" {- all -}+ "kolmitta" {- abe -} "kolmine" {- com -}+ "kolmin" {- instr -}+ (case inf of+ _ | G.isDistributive inf → "kolmittain"+ | G.isDistributiveTemporal inf → "kolmisin"+ | otherwise → "?"+ )+ )+ , (4, \c → infForms inf c+ -- singular+ "neljä" {- nom -} "neljä" {- acc -}+ "neljän" {- gen -} "neljää" {- ptv -}+ "neljänä" {- ess -} "neljäksi" {- transl -}+ "neljässä" {- ine -} "neljästä" {- ela -}+ "neljään" {- ill -} "neljällä" {- ade -}+ "neljältä" {- abl -} "neljälle" {- all -}+ "neljättä" {- abe -}+ "?" {- other -}+ -- plural+ "neljät" {- nom -} "neljät" {- acc -}+ "neljien" {- gen -} "neljiä" {- ptv -}+ "neljinä" {- ess -} "neljiksi" {- transl -}+ "neljissä" {- ine -} "neljistä" {- ela -}+ "neljiin" {- ill -} "neljillä" {- ade -}+ "neljiltä" {- abl -} "neljille" {- all -}+ "neljittä" {- abe -} "neljine" {- com -}+ "neljin" {- instr -}+ "?" {- other -}+ )+ , (5, \c → infForms inf c+ -- singular+ "viisi" {- nom -} "viisi" {- acc -}+ "viiden" {- gen -} "viittä" {- ptv -}+ "viitenä" {- ess -} "viideksi" {- transl -}+ "viidessä" {- ine -} "viidestä" {- ela -}+ "viiteen" {- ill -} "viidellä" {- ade -}+ "viideltä" {- abl -} "viidelle" {- all -}+ "viidettä" {- abe -}+ "?" {- other -}+ -- plural+ "viidet" {- nom -} "viidet" {- acc -}+ "viisien" {- gen -} "viisiä" {- ptv -}+ "viisinä" {- ess -} "viisiksi" {- transl -}+ "viisissä" {- ine -} "viisistä" {- ela -}+ "viisiin" {- ill -} "viisillä" {- ade -}+ "viisiltä" {- abl -} "viisille" {- all -}+ "viisittä" {- abe -} "viisine" {- com -}+ "viisin" {- instr -}+ "?" {- other -}+ )+ , (6, \c → infForms inf c+ -- singular+ "kuusi" {- nom -} "kuusi" {- acc -}+ "kuuden" {- gen -} "kuutta" {- ptv -}+ "kuutena" {- ess -} "kuudeksi" {- transl -}+ "kuudessa" {- ine -} "kuudesta" {- ela -}+ "kuuteen" {- ill -} "kuudella" {- ade -}+ "kuudelta" {- abl -} "kuudelle" {- all -}+ "kuudetta" {- abe -}+ "?" {- other -}+ -- plural+ "kuudet" {- nom -} "kuudet" {- acc -}+ "kuusien" {- gen -} "kuusia" {- ptv -}+ "kuusina" {- ess -} "kuusiksi" {- transl -}+ "kuusissa" {- ine -} "kuusista" {- ela -}+ "kuusiin" {- ill -} "kuusilla" {- ade -}+ "kuusilta" {- abl -} "kuusille" {- all -}+ "kuusitta" {- abe -} "kuusine" {- com -}+ "kuusin" {- instr -}+ "?" {- other -}+ )+ , (7, \c → infForms inf c+ -- singular+ "seitsemän" {- nom -} "seitsemän" {- acc -}+ "seitsemän" {- gen -} "seitsemää" {- ptv -}+ "seitsemänä" {- ess -} "seitsemäksi" {- transl -}+ "seitsemässä" {- ine -} "seitsemästä" {- ela -}+ "seitsemään" {- ill -} "seitsemällä" {- ade -}+ "seitsemältä" {- abl -} "seitsemälle" {- all -}+ "seitsemättä" {- abe -}+ "?" {- other -}+ -- plural+ "seitsemät" {- nom -} "seitsemät" {- acc -}+ "seitsemien" {- gen -} "seitsemiä" {- ptv -}+ "seitseminä" {- ess -} "seitsemiksi" {- transl -}+ "seitsemissä" {- ine -} "seitsemistä" {- ela -}+ "seitsemiin" {- ill -} "seitsemillä" {- ade -}+ "seitsemiltä" {- abl -} "seitsemille" {- all -}+ "seitsemittä" {- abe -} "seitsemine" {- com -}+ "seitsemin" {- instr -}+ "?" {- other -}+ )+ , (8, \c → infForms inf c+ -- singular+ "kahdeksan" {- nom -} "kahdeksan" {- acc -}+ "kahdeksan" {- gen -} "kahdeksaa" {- ptv -}+ "kahdeksana" {- ess -} "kahdeksaksi" {- transl -}+ "kahdeksassa" {- ine -} "kahdeksasta" {- ela -}+ "kahdeksaan" {- ill -} "kahdeksalla" {- ade -}+ "kahdeksalta" {- abl -} "kahdeksalle" {- all -}+ "kahdeksatta" {- abe -}+ "?" {- other -}+ -- plural+ "kahdeksat" {- nom -} "kahdeksat" {- acc -}+ "kahdeksien" {- gen -} "kahdeksia" {- ptv -}+ "kahdeksina" {- ess -} "kahdeksiksi" {- transl -}+ "kahdeksissa" {- ine -} "kahdeksista" {- ela -}+ "kahdeksiin" {- ill -} "kahdeksilla" {- ade -}+ "kahdeksilta" {- abl -} "kahdeksille" {- all -}+ "kahdeksitta" {- abe -} "kahdeksine" {- com -}+ "kahdeksin" {- instr -}+ "?" {- other -}+ )+ , (9, \c → infForms inf c+ -- singular+ "yhdeksän" {- nom -} "yhdeksän" {- acc -}+ "yhdeksän" {- gen -} "yhdeksää" {- ptv -}+ "yhdeksänä" {- ess -} "yhdeksäksi" {- transl -}+ "yhdeksässä" {- ine -} "yhdeksästä" {- ela -}+ "yhdeksään" {- ill -} "yhdeksällä" {- ade -}+ "yhdeksältä" {- abl -} "yhdeksälle" {- all -}+ "yhdeksättä" {- abe -}+ "?" {- other -}+ -- plural+ "yhdeksät" {- nom -} "yhdeksät" {- acc -}+ "yhdeksien" {- gen -} "yhdeksiä" {- ptv -}+ "yhdeksinä" {- ess -} "yhdeksiksi" {- transl -}+ "yhdeksissä" {- ine -} "yhdeksistä" {- ela -}+ "yhdeksiin" {- ill -} "yhdeksillä" {- ade -}+ "yhdeksiltä" {- abl -} "yhdeksille" {- all -}+ "yhdeksittä" {- abe -} "yhdeksine" {- com -}+ "yhdeksin" {- instr -}+ "?" {- other -}+ )++ , (10, \c → case c of+ CtxAdd _ (Lit _) _ → "toista" -- singular partitive ordinal 2+ _ → infForms inf c+ -- singular+ "kymmenen" {- nom -} "kymmenen" {- acc -}+ "kymmenen" {- gen -} "kymmentä" {- ptv -}+ "kymmenenä" {- ess -} "kymmeneksi" {- transl -}+ "kymmenessä" {- ine -} "kymmenestä" {- ela -}+ "kymmeneen" {- ill -} "kymmenellä" {- ade -}+ "kymmeneltä" {- abl -} "kymmenelle" {- all -}+ "kymmenettä" {- abe -}+ "?" {- other -}+ -- plural+ "kymmenet" {- nom -} "kymmenet" {- acc -}+ "kymmenien" {- gen -} "kymmeniä" {- ptv -}+ "kymmeninä" {- ess -} "kymmeniksi" {- transl -}+ "kymmenissä" {- ine -} "kymmenistä" {- ela -}+ "kymmeniin" {- ill -} "kymmenillä" {- ade -}+ "kymmeniltä" {- abl -} "kymmenille" {- all -}+ "kymmenittä" {- abe -} "kymmenine" {- com -}+ "kymmenin" {- instr -}+ "?" {- other -}+ )+ , (100, \c → case c of+ CtxMul _ (Lit n) _+ | n ≤ 9 → "sataa"+ _ → infForms inf c+ -- singular+ "sata" {- nom -} "sata" {- acc -}+ "sadan" {- gen -} "sataa" {- ptv -}+ "satana" {- ess -} "sadaksi" {- transl -}+ "sadassa" {- ine -} "sadasta" {- ela -}+ "sataan" {- ill -} "sadalla" {- ade -}+ "sadalta" {- abl -} "sadalle" {- all -}+ "sadatta" {- abe -}+ "?" {- other -}+ -- plural+ "sadat" {- nom -} "sadat" {- acc -}+ "satojen" {- gen -} "satoja" {- ptv -}+ "satoina" {- ess -} "sadoiksi" {- transl -}+ "sadoissa" {- ine -} "sadoista" {- ela -}+ "satoihin" {- ill -} "sadoilla" {- ade -}+ "sadoilta" {- abl -} "sadoille" {- all -}+ "sadoitta" {- abe -} "satoine" {- com -}+ "sadoin" {- instr -}+ "?" {- other -}+ )+ , (1000, \c → case c of+ CtxMul {} → "tuhatta"+ _ → infForms inf c+ -- singular+ "tuhat" {- nom -} "tuhat" {- acc -}+ "tuhannen" {- gen -} "tuhatta" {- ptv -}+ "tuhantena" {- ess -} "tuhanneksi" {- transl -}+ "tuhannessa" {- ine -} "tuhannesta" {- ela -}+ "tuhanteen" {- ill -} "tuhannella" {- ade -}+ "tuhannelta" {- abl -} "tuhannelle" {- all -}+ "tuhannetta" {- abe -}+ "?" {- other -}+ -- plural+ "tuhannet" {- nom -} "tuhannet" {- acc -}+ "tuhansien" {- gen -} "tuhansia" {- ptv -}+ "tuhansina" {- ess -} "tuhansiksi" {- transl -}+ "tuhansissa" {- ine -} "tuhansista" {- ela -}+ "tuhansiin" {- ill -} "tuhansilla" {- ade -}+ "tuhansilta" {- abl -} "tuhansille" {- all -}+ "tuhansitta" {- abe -} "tuhansine" {- com -}+ "tuhansin" {- instr -}+ "?" {- other -}+ )+ ]++ordinalRepr ∷ ( G.Singular i, G.Plural i+ , G.Abessive i+ , G.Accusative i+ , G.Comitative i+ , G.Delative i+ , G.Distributive i+ , G.DistributiveTemporal i+ , G.Essive i+ , G.Genitive i+ , G.Instructive i+ , G.Lative i+ , G.LocativeInessive i+ , G.LocativeElative i+ , G.LocativeIllative i+ , G.LocativeAdessive i+ , G.LocativeAblative i+ , G.LocativeAllative i+ , G.Multiplicative i+ , G.Nominative i+ , G.Partitive i+ , G.Sublative i+ , G.SuperEssive i+ , G.Translative i+ )+ ⇒ i → Exp i → Maybe Text+ordinalRepr = render defaultRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprScale = BN.pelletierRepr+ (BN.quantityName "iljoona" "iljoonaa")+ (BN.quantityName "iljardi" "iljardia")+ []+ , reprAdd = Just $ \_ _ _ → ""+ , reprMul = Just $ \_ _ _ → ""+ }+ where+ syms inf =+ M.fromList+ [ (0, \c → infForms inf c+ -- singular+ "nollas" {- nom -} "nollas" {- acc -}+ "nollannen" {- gen -} "nollatta" {- ptv -}+ "nollantena" {- ess -} "nollanneksi" {- transl -}+ "nollannessa" {- ine -} "nollannesta" {- ela -}+ "nollanteen" {- ill -} "nollannella" {- ade -}+ "nollannelta" {- abl -} "nollannelle" {- all -}+ "nollannetta" {- abe -}+ "?" {- other -}+ -- plural+ "nollannet" {- nom -} "nollannet" {- acc -}+ "nollansien" {- gen -} "nollansia" {- ptv -}+ "nollansina" {- ess -} "nollansiksi" {- transl -}+ "nollansissa" {- ine -} "nollansista" {- ela -}+ "nollansiin" {- ill -} "nollansilla" {- ade -}+ "nollansilta" {- abl -} "nollansille" {- all -}+ "nollansitta" {- abe -} "nollansine" {- com -}+ "nollansin" {- instr -}+ "?" {- other -}+ )+ , (1, \c → case c of+ CtxAdd _ (Lit 10) _ →+ infForms inf c+ -- singular+ "yhdes" {- nom -} "yhdes" {- acc -}+ "yhdennen" {- gen -} "yhdettä" {- ptv -}+ "yhdennessä" {- ess -} "yhdenneksi" {- transl -}+ "yhdennessä" {- ine -} "yhdennestä" {- ela -}+ "yhdenteen" {- ill -} "yhdennellä" {- ade -}+ "yhdenneltä" {- abl -} "yhdennelle" {- all -}+ "yhdennettä" {- abe -}+ "?" {- other -}+ -- plural+ "yhdennet" {- nom -} "yhdennet" {- acc -}+ "yhdensien" {- gen -} "yhdensiä" {- ptv -}+ "yhdensinä" {- ess -} "yhdensiksi" {- transl -}+ "yhdensissä" {- ine -} "yhdensistä" {- ela -}+ "yhdensiin" {- ill -} "yhdensillä" {- ade -}+ "yhdensitlä" {- abl -} "yhdensiin" {- all -}+ "yhdensittä" {- abe -} "yhdensine" {- com -}+ "yhdensin" {- instr -}+ "?" {- other -}+ _ → infForms inf c+ -- singular+ "ensimmäinen" {- nom -} "ensimmäinen" {- acc -}+ "ensimmäisen" {- gen -} "ensimmäistä" {- ptv -}+ "ensimmmäisenä" {- ess -} "ensimmäiseksi" {- transl -}+ "ensimmäisessä" {- ine -} "ensimmäisestä" {- ela -}+ "ensimmäiseen" {- ill -} "ensimmäisellä" {- ade -}+ "ensimmäiseltä" {- abl -} "ensimmäiselle" {- all -}+ "ensimmäisettä" {- abe -}+ "?" {- other -}+ -- plural+ "ensimmäiset" {- nom -} "ensimmäiset" {- acc -}+ "ensimmäisten" {- gen -} "ensimmäisiä" {- ptv -}+ "ensimmäisinä" {- ess -} "ensimmäisiksi" {- transl -}+ "ensimmäisissä" {- ine -} "ensimmäisistä" {- ela -}+ "ensimmäisiin" {- ill -} "ensimmäisillä" {- ade -}+ "ensimmäisiltä" {- abl -} "ensimmäisille" {- all -}+ "ensimmäisittä" {- abe -} "ensimmäisine" {- com -}+ "ensimmäisin" {- instr -}+ "?" {- other -}+ )+ , (2, \c → case c of+ CtxAdd _ (Lit 10) _ →+ infForms inf c+ -- singular+ "kahdes" {- nom -} "kahdes" {- acc -}+ "kahdennen" {- gen -} "kahdetta" {- ptv -}+ "kahdentena" {- ess -} "kahdenneksi" {- transl -}+ "kahdennessa" {- ine -} "kahdennesta" {- ela -}+ "kahdenteen" {- ill -} "kahdennella" {- ade -}+ "kahdennelta" {- abl -} "kahdennelle" {- all -}+ "kahdennetta" {- abe -}+ "?" {- other -}+ -- plural+ "kahdennet" {- nom -} "kahdennet" {- acc -}+ "kahdensien" {- gen -} "kahdensia" {- ptv -}+ "kahdensina" {- ess -} "kahdensiksi" {- transl -}+ "kahdensissa" {- ine -} "kahdensista" {- ela -}+ "kahdensiin" {- ill -} "kahdensilla" {- ade -}+ "kahdensilta" {- abl -} "kahdensille" {- all -}+ "kahdensitta" {- abe -} "kahdensine" {- com -}+ "kahdensin" {- instr -}+ "?" {- other -}+ _ → infForms inf c+ -- singular+ "toinen" {- nom -} "toinen" {- acc -}+ "toisen" {- gen -} "toista" {- ptv -}+ "toisena" {- ess -} "toiseksi" {- transl -}+ "toisessa" {- ine -} "toisesta" {- ela -}+ "toiseen" {- ill -} "toisella" {- ade -}+ "toiselta" {- abl -} "toiselle" {- all -}+ "toisetta" {- abe -}+ "?" {- other -}+ -- plural+ "toiset" {- nom -} "toiset" {- acc -}+ "toisten" {- gen -} "toisia" {- ptv -}+ "toisina" {- ess -} "toisiksi" {- transl -}+ "toisissa" {- ine -} "toisista" {- ela -}+ "toisiin" {- ill -} "toisilla" {- ade -}+ "toisilta" {- abl -} "toisille" {- all -}+ "toisitta" {- abe -} "toisine" {- com -}+ "toisin" {- instr -}+ "?" {- other -}+ )+ , (3, \c → infForms inf c+ -- singular+ "kolmas" {- nom -} "kolmas" {- acc -}+ "kolmannen" {- gen -} "kolmatta" {- ptv -}+ "kolmantena" {- ess -} "kolmanneksi" {- transl -}+ "kolmannessa" {- ine -} "kolmannesta" {- ela -}+ "kolmanteen" {- ill -} "kolmannella" {- ade -}+ "kolmannelta" {- abl -} "kolmannelle" {- all -}+ "kolmannetta" {- abe -}+ "?" {- other -}+ -- plural+ "kolmannet" {- nom -} "kolmannet" {- acc -}+ "kolmansien" {- gen -} "kolmansia" {- ptv -}+ "kolmansina" {- ess -} "kolmansiksi" {- transl -}+ "kolmansissa" {- ine -} "kolmansista" {- ela -}+ "kolmansiin" {- ill -} "kolmansilla" {- ade -}+ "kolmansilta" {- abl -} "kolmansille" {- all -}+ "kolmansitta" {- abe -} "kolmansine" {- com -}+ "kolmansin" {- instr -}+ "?" {- other -}+ )+ , (4, \c → infForms inf c+ -- singular+ "neljäs" {- nom -} "neljäs" {- acc -}+ "neljännen" {- gen -} "neljättä" {- ptv -}+ "neljäntenä" {- ess -} "neljänneksi" {- transl -}+ "neljännessä" {- ine -} "neljännestä" {- ela -}+ "neljänteen" {- ill -} "neljännellä" {- ade -}+ "neljänneltä" {- abl -} "neljännelle" {- all -}+ "neljännettä" {- abe -}+ (case inf of+ _ | G.isComitative inf → "neljänsine"+ | G.isInstructive inf → "neljänsin"+ | otherwise → "?"+ )+ -- plural+ "neljännet" {- nom -} "neljännet" {- acc -}+ "neljänsien" {- gen -} "neljänsiä" {- ptv -}+ "neljänsinä" {- ess -} "neljänsiksi" {- transl -}+ "neljänsissä" {- ine -} "neljänsistä" {- ela -}+ "neljänsiin" {- ill -} "neljänsillä" {- ade -}+ "neljänsiltä" {- abl -} "neljänsille" {- all -}+ "neljänsittä" {- abe -} "neljänsine" {- com -}+ "neljänsin" {- instr -}+ "?" {- other -}+ )+ , (5, \c → infForms inf c+ -- singular+ "viides" {- nom -} "viides" {- acc -}+ "viidennen" {- gen -} "viidettä" {- ptv -}+ "viidentenä" {- ess -} "viidenneksi" {- transl -}+ "viidennessä" {- ine -} "viidennestä" {- ela -}+ "viidenteen" {- ill -} "viidennellä" {- ade -}+ "viidenneltä" {- abl -} "viidennelle" {- all -}+ "viidennettä" {- abe -}+ "?" {- other -}+ -- plural+ "viidennet" {- nom -} "viidennet" {- acc -}+ "viidensien" {- gen -} "viidensiä" {- ptv -}+ "viidensinä" {- ess -} "viidensiksi" {- transl -}+ "viidensissä" {- ine -} "viidensistä" {- ela -}+ "viidensiin" {- ill -} "viidensillä" {- ade -}+ "viidensiltä" {- abl -} "viidensille" {- all -}+ "viidensittä" {- abe -} "viidensine" {- com -}+ "viidensin" {- instr -}+ "?" {- other -}+ )+ , (6, \c → infForms inf c+ -- singular+ "kuudes" {- nom -} "kuudes" {- acc -}+ "kuudennen" {- gen -} "kuudetta" {- ptv -}+ "kuudentena" {- ess -} "kuudenneksi" {- transl -}+ "kuudennessa" {- ine -} "kuudennesta" {- ela -}+ "kuudenteen" {- ill -} "kuudennella" {- ade -}+ "kuudennelta" {- abl -} "kuudennelle" {- all -}+ "kuudennetta" {- abe -}+ "?" {- other -}+ -- plural+ "kuudennet" {- nom -} "kuudennet" {- acc -}+ "kuudensien" {- gen -} "kuudensia" {- ptv -}+ "kuudensina" {- ess -} "kuudensiksi" {- transl -}+ "kuudensissa" {- ine -} "kuudensista" {- ela -}+ "kuudensiin" {- ill -} "kuudensilla" {- ade -}+ "kuudensilta" {- abl -} "kuudensille" {- all -}+ "kuudensitta" {- abe -} "kuudensine" {- com -}+ "kuudensin" {- instr -}+ "?" {- other -}+ )+ , (7, \c → infForms inf c+ -- singular+ "seitsemäs" {- nom -} "seitsemäs" {- acc -}+ "seitsemännen" {- gen -} "seitsemättä" {- ptv -}+ "seitsemäntenä" {- ess -} "seitsemänneksi" {- transl -}+ "seitsemännessä" {- ine -} "seitsemännestä" {- ela -}+ "seitsemänteen" {- ill -} "seitsemännellä" {- ade -}+ "seitsemänneltä" {- abl -} "seitsemännelle" {- all -}+ "seitsemännettä" {- abe -}+ "?" {- other -}+ -- plural+ "seitsemännet" {- nom -} "seitsemännet" {- acc -}+ "seitsemänsien" {- gen -} "seitsemänsiä" {- ptv -}+ "seitsemänsinä" {- ess -} "seitsemänsiksi" {- transl -}+ "seitsemänsissä" {- ine -} "seitsemänsistä" {- ela -}+ "seitsemänsiin" {- ill -} "seitsemänsillä" {- ade -}+ "seitsemänsiltä" {- abl -} "seitsemänsille" {- all -}+ "seitsemänsittä" {- abe -} "seitsemänsine" {- com -}+ "seitsemänsin" {- instr -}+ "?" {- other -}+ )+ , (8, \c → infForms inf c+ -- singular+ "kahdeksas" {- nom -} "kahdeksas" {- acc -}+ "kahdeksannen" {- gen -} "kahdeksatta" {- ptv -}+ "kahdeksantena" {- ess -} "kahdeksanneksi" {- transl -}+ "kahdeksannessa" {- ine -} "kahdeksannesta" {- ela -}+ "kahdeksanteen" {- ill -} "kahdeksannella" {- ade -}+ "kahdeksannelta" {- abl -} "kahdeksannelle" {- all -}+ "kahdeksannetta" {- abe -}+ "?" {- other -}+ -- plural+ "kahdeksannet" {- nom -} "kahdeksannet" {- acc -}+ "kahdeksansien" {- gen -} "kahdeksansia" {- ptv -}+ "kahdeksansina" {- ess -} "kahdeksansiksi" {- transl -}+ "kahdeksansissa" {- ine -} "kahdeksansista" {- ela -}+ "kahdeksansiin" {- ill -} "kahdeksansilla" {- ade -}+ "kahdeksansilta" {- abl -} "kahdeksansille" {- all -}+ "kahdeksansitta" {- abe -} "kahdeksansine" {- com -}+ "kahdeksansin" {- instr -}+ "?" {- other -}+ )+ , (9, \c → infForms inf c+ -- singular+ "yhdeksäs" {- nom -} "yhdeksäs" {- acc -}+ "yhdeksännen" {- gen -} "yhdeksättä" {- ptv -}+ "yhdeksäntenä" {- ess -} "yhdeksänneksi" {- transl -}+ "yhdeksännessä" {- ine -} "yhdeksännestä" {- ela -}+ "yhdeksänteen" {- ill -} "yhdeksännellä" {- ade -}+ "yhdeksänneltä" {- abl -} "yhdeksännelle" {- all -}+ "yhdeksännettä" {- abe -}+ "?" {- other -}+ -- plural+ "yhdeksännet" {- nom -} "yhdeksännet" {- acc -}+ "yhdeksänsien" {- gen -} "yhdeksänsiä" {- ptv -}+ "yhdeksänsinä" {- ess -} "yhdeksänsiksi" {- transl -}+ "yhdeksänsissä" {- ine -} "yhdeksänsistä" {- ela -}+ "yhdeksänsiin" {- ill -} "yhdeksänsillä" {- ade -}+ "yhdeksänsiltä" {- abl -} "yhdeksänsille" {- all -}+ "yhdeksänsittä" {- abe -} "yhdeksänsine" {- com -}+ "yhdeksänsin" {- instr -}+ "?" {- other -}+ )+ , (10, \c → case c of+ CtxAdd _ (Lit _) _ → "toista" -- singular partitive ordinal 2+ _ → infForms inf c+ -- singular+ "kymmenes" {- nom -} "kymmenes" {- acc -}+ "kymmenennen" {- gen -} "kymmenettä" {- ptv -}+ "kymmenentenä" {- ess -} "kymmenenneksi" {- transl -}+ "kymmenennessä" {- ine -} "kymmenennestä" {- ela -}+ "kymmenenteen" {- ill -} "kymmenennellä" {- ade -}+ "kymmenenneltä" {- abl -} "kymmenennelle" {- all -}+ "kymmenennettä" {- abe -}+ "?" {- other -}+ -- plural+ "kymmenennet" {- nom -} "kymmenennet" {- acc -}+ "kymmenensien" {- gen -} "kymmenensiä" {- ptv -}+ "kymmenensinä" {- ess -} "kymmenensiksi" {- transl -}+ "kymmenensissä" {- ine -} "kymmenensistä" {- ela -}+ "kymmenensiin" {- ill -} "kymmenensillä" {- ade -}+ "kymmenensiltä" {- abl -} "kymmenensille" {- all -}+ "kymmenensittä" {- abe -} "kymmenensine" {- com -}+ "kymmenensin" {- instr -}+ "?" {- other -}+ )+ , (100, \c → case c of+ _ → infForms inf c+ -- singular+ "sadas" {- nom -} "sadas" {- acc -}+ "sadannen" {- gen -} "sadatta" {- ptv -}+ "sadantena" {- ess -} "sadanneksi" {- transl -}+ "sadannessa" {- ine -} "sadannesta" {- ela -}+ "sadanteen" {- ill -} "sadannella" {- ade -}+ "sadannelta" {- abl -} "sadannelle" {- all -}+ "sadannetta" {- abe -}+ "?" {- other -}+ -- plural+ "sadannet" {- nom -} "sadannet" {- acc -}+ "sadansien" {- gen -} "sadansia" {- ptv -}+ "sadansina" {- ess -} "sadansiksi" {- transl -}+ "sadansissa" {- ine -} "sadansista" {- ela -}+ "sadansiin" {- ill -} "sadansilla" {- ade -}+ "sadansilta" {- abl -} "sadansille" {- all -}+ "sadansitta" {- abe -} "sadansine" {- com -}+ "sadansin" {- instr -}+ "?" {- other -}+ )+ , (1000, \c → case c of+ _ → infForms inf c+ -- singular+ "tuhannes" {- nom -} "tuhannes" {- acc -}+ "tuhannennen" {- gen -} "tuhannetta" {- ptv -}+ "tuhannentena" {- ess -} "tuhannenneksi" {- transl -}+ "tuhannennessa" {- ine -} "tuhannennesta" {- ela -}+ "tuhannenteen" {- ill -} "tuhannennella" {- ade -}+ "tuhannennelta" {- abl -} "tuhannennelle" {- all -}+ "tuhannennetta" {- abe -}+ "?" {- other -}+ -- plural+ "tuhannennet" {- nom -} "tuhannennet" {- acc -}+ "tuhannensien" {- gen -} "tuhannensia" {- ptv -}+ "tuhannensina" {- ess -} "tuhannensiksi" {- transl -}+ "tuhannensissa" {- ine -} "tuhannensista" {- ela -}+ "tuhannensiin" {- ill -} "tuhannensilla" {- ade -}+ "tuhannensilta" {- abl -} "tuhannensille" {- all -}+ "tuhannensitta" {- abe -} "tuhannensine" {- com -}+ "tuhannensin" {- instr -}+ "?" {- other -}+ )+ ]++infForms ∷ ( G.Singular i, G.Plural i+ , G.Abessive i+ , G.Accusative i+ , G.Comitative i+ , G.Delative i+ , G.Distributive i+ , G.DistributiveTemporal i+ , G.Essive i+ , G.Genitive i+ , G.Instructive i+ , G.Lative i+ , G.LocativeInessive i+ , G.LocativeElative i+ , G.LocativeIllative i+ , G.LocativeAdessive i+ , G.LocativeAblative i+ , G.LocativeAllative i+ , G.Multiplicative i+ , G.Nominative i+ , G.Partitive i+ , G.Sublative i+ , G.SuperEssive i+ , G.Translative i+ )+ ⇒ i → Ctx (Exp i)+ → Text → Text → Text → Text → Text → Text → Text → Text → Text → Text+ → Text → Text → Text → Text → Text → Text → Text → Text → Text → Text+ → Text → Text → Text → Text → Text → Text → Text → Text → Text → Text → Text+infForms inf _+ s_nom s_acc s_gen s_ptv s_ess s_transl+ s_ine s_ela s_ill s_ade s_abl s_all s_abe+ s_other+ p_nom p_acc p_gen p_ptv p_ess p_transl+ p_ine p_ela p_ill p_ade p_abl p_all p_abe p_com p_instr+ p_other+ | G.isSingular inf = singularForms+ | G.isPlural inf = pluralForms+ | otherwise = "?"+ where+ singularForms+ | G.isNominative inf = s_nom+ | G.isAccusative inf = s_acc+ | G.isGenitive inf = s_gen+ | G.isPartitive inf = s_ptv+ | G.isEssive inf = s_ess+ | G.isTranslative inf = s_transl+ | G.isLocativeInessive inf = s_ine+ | G.isLocativeElative inf = s_ela+ | G.isLocativeIllative inf = s_ill+ | G.isLocativeAdessive inf = s_ade+ | G.isLocativeAblative inf = s_abl+ | G.isLocativeAllative inf = s_all+ | G.isAbessive inf = s_abe+ | otherwise = s_other+ pluralForms+ | G.isNominative inf = p_nom+ | G.isAccusative inf = p_acc+ | G.isGenitive inf = p_gen+ | G.isPartitive inf = p_ptv+ | G.isEssive inf = p_ess+ | G.isTranslative inf = p_transl+ | G.isLocativeInessive inf = p_ine+ | G.isLocativeElative inf = p_ela+ | G.isLocativeIllative inf = p_ill+ | G.isLocativeAdessive inf = p_ade+ | G.isLocativeAblative inf = p_abl+ | G.isLocativeAllative inf = p_all+ | G.isAbessive inf = p_abe+ | G.isComitative inf = p_com+ | G.isInstructive inf = p_instr+ | otherwise = p_other
src/Text/Numeral/Language/FR.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] fr@@ -17,8 +17,16 @@ -} module Text.Numeral.Language.FR- ( cardinal- , struct+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ , ordinal+ -- * Structure+ , cardinalStruct+ , ordinalStruct+ -- * Bounds+ , bounds ) where @@ -29,60 +37,84 @@ import "base" Data.Bool ( otherwise ) import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid ) import "base" Data.Ord ( (<) )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-), Integer )+import "base" Prelude ( Integral, (-), negate ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.Ord.Unicode ( (≤), (≥) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.BigNum as BN-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- FR -------------------------------------------------------------------------------- -{--Sources:- http://www.sf.airnet.ne.jp/~ts/language/number/french.html- http://www.french-linguistics.co.uk/tutorials/numbers/--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "fr"+ , entIso639_2 = ["fre"]+ , entIso639_3 = Just "fra"+ , entNativeNames = ["Français"]+ , entEnglishName = Just "French"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = cardinalStruct+ }+ , entOrdinal = Just Conversion+ { toNumeral = ordinal+ , toStructure = ordinalStruct+ }+ } -cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (G.Feminine i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ cardinalStruct -struct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β- )- ⇒ α → β-struct = pos $ fix $ rule `combine` pelletierScale1 R L BN.rule- where- rule = findRule ( 0, lit )- [ ( 11, add 10 L )- , ( 17, add 10 R )- , ( 20, lit )- , ( 21, add 20 R )- , ( 30, mul 10 R L)- , ( 70, add 60 R )- , ( 80, mul 20 R L)- , ( 89, add 80 R )- , ( 100, step 100 10 R L)- , (1000, step 1000 1000 R L)- ]- (dec 6 - 1)+ordinal ∷ (G.Feminine i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+ordinal inf = ordinalRepr inf ∘ ordinalStruct -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s-cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms- , reprScale = pelletierRepr- , reprAdd = Just (⊞)- , reprMul = Just (⊡)- , reprNeg = Just $ \_ _ → "moins "- }+cardinalStruct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ )+ ⇒ α → β+cardinalStruct = pos $ fix $ rule `combine` pelletierScale1 R L BN.rule++ordinalStruct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ )+ ⇒ α → β+ordinalStruct = pos $ fix $ rule `combine` pelletierScale R L BN.rule++rule ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ Rule α β+rule = findRule ( 0, lit )+ [ ( 11, add 10 L )+ , ( 17, add 10 R )+ , ( 20, lit )+ , ( 21, add 20 R )+ , ( 30, mul 10 R L)+ , ( 70, add 60 R )+ , ( 80, mul 20 R L)+ , ( 89, add 80 R )+ , ( 100, step 100 10 R L)+ , (1000, step 1000 1000 R L)+ ]+ (dec 6 - 1)++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++genericRepr ∷ Repr i+genericRepr = defaultRepr+ { reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprNeg = Just $ \_ _ → "moins "+ } where (Lit n ⊞ Lit 10) _ | n ≤ 6 = "" (Lit 10 ⊞ Lit n ) _ | n ≥ 7 = "-"@@ -97,10 +129,22 @@ (_ ⊡ Lit 20) _ = "-" (_ ⊡ _ ) _ = " " - syms =+cardinalRepr ∷ (G.Feminine i) ⇒ i → Exp i → Maybe Text+cardinalRepr = render genericRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprScale = BN.pelletierRepr (BN.quantityName "illion" "illions")+ (BN.quantityName "illiard" "illiards")+ bigNumSyms+ }+ where+ syms inf = M.fromList [ (0, const "zéro")- , (1, ten "un" "on" "un")+ , (1, \c → case c of+ CtxAdd _ (Lit 10) _ → "on"+ _ | G.isFeminine inf → "une"+ | otherwise → "un"+ ) , (2, ten "deux" "dou" "deux") , (3, ten "trois" "trei" "tren") , (4, ten "quatre" "quator" "quar")@@ -132,17 +176,84 @@ CtxMul _ (Lit 10) _ → m _ → n -pelletierRepr ∷ (IsString s, Monoid s)- ⇒ Integer → Integer → Exp → Ctx Exp → Maybe s-pelletierRepr = BN.pelletierRepr- "illion" "illions"- "illiard" "illiards"- [ (1, BN.forms "m" "uno" "uno" "" "")- , (3, BN.forms "tr" "tré" "tres" "tri" "tre")- , (10, \c → case c of- CtxAdd _ (Lit 100) _ → "deci"- CtxMul _ _ (CtxAdd _ (Lit 100) _) → "ginta"- CtxMul {} → "gint"- _ → "déc"- )- ]+ordinalRepr ∷ (G.Feminine i) ⇒ i → Exp i → Maybe Text+ordinalRepr = render genericRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprScale = BN.pelletierRepr ( BN.ordQuantityName "illion" "illionième"+ "illions" "illionième"+ )+ ( BN.ordQuantityName "illiard" "illiardième"+ "illiards" "illiardième"+ )+ bigNumSyms+ }+ where+ syms inf =+ M.fromList+ [ (0, \c → case c of+ CtxEmpty → "zéroth"+ _ → "zéro"+ )+ , (1, \c → case c of+ CtxEmpty+ | G.isFeminine inf → "première"+ | otherwise → "premier"+ CtxAdd _ (Lit 10) _ → "on"+ _ | isOutside R c → if G.isFeminine inf+ then "uneième"+ else "unième"+ | G.isFeminine inf → "une"+ | otherwise → "un"+ )+ , (2, ten "deuxième" "deux" "dou" "deux")+ , (3, ten "troisième" "trois" "trei" "tren")+ , (4, ten "quatrième" "quatre" "quator" "quar")+ , (5, ten "cinquième" "cinq" "quin" "cinqu")+ , (6, ten "sixième" "six" "sei" "soix")+ , (7, \c → if isOutside R c then "septième" else "sept")+ , (8, \c → if isOutside R c then "huitième" else "huit")+ , (9, \c → if isOutside R c then "neuvième" else "neuf")+ , (10, \c → case c of+ CtxAdd R (Lit _) _ | isOutside R c → "zième"+ | otherwise → "ze"+ CtxAdd L (Lit _) _ → "dix"+ CtxMul _ (Lit 3) _ | isOutside R c → "tième"+ | otherwise → "te"+ CtxMul R _ _ | isOutside R c → "antième"+ | otherwise → "ante"+ _ | isOutside R c → "dixième"+ | otherwise → "dix"+ )+ , (20, \c → case c of+ _ | isOutside R c → "vingtième"+ CtxMul _ _ CtxEmpty → "vingts"+ _ → "vingt"+ )+ , (100, \c → case c of+ _ | isOutside R c → "centième"+ CtxMul R _ CtxEmpty → "cents"+ _ → "cent"+ )+ , (1000, \c → if isOutside R c then "millième" else "mille")+ ]++ ten o n a m ctx =+ case ctx of+ CtxAdd _ (Lit 10) _ | isOutside R ctx → o+ | otherwise → a+ CtxMul _ (Lit 10) _ | isOutside R ctx → o+ | otherwise → m+ _ | isOutside R ctx → o+ | otherwise → n++bigNumSyms ∷ [(ℤ, Ctx (Exp i) → Text)]+bigNumSyms =+ [ (1, BN.forms "m" "uno" "uno" "" "")+ , (3, BN.forms "tr" "tré" "tres" "tri" "tre")+ , (10, \c → case c of+ CtxAdd _ (Lit 100) _ → "deci"+ CtxMul _ _ (CtxAdd _ (Lit 100) _) → "ginta"+ CtxMul {} → "gint"+ _ → "déc"+ )+ ]
+ src/Text/Numeral/Language/FUR.hs view
@@ -0,0 +1,145 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] fur++[@ISO639-3@] fur++[@Native name@] Furlan++[@English name@] Friulan+-}++module Text.Numeral.Language.FUR+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Bool ( otherwise )+import "base" Data.Function ( ($), const, fix )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.Ord.Unicode ( (≤) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import qualified "this" Text.Numeral.Language.IT as IT ( rule )+import "this" Text.Numeral.Render.Utils ( addCtx, mulCtx )+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- FUR+--------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_2 = ["fur"]+ , entIso639_3 = Just "fur"+ , entNativeNames = ["Furlan", "marilenghe"]+ , entEnglishName = Just "Friulan"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++cardinal ∷ (G.Masculine i, G.Feminine i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Add β, E.Mul β, E.Scale β+ )+ ⇒ α → β+struct = fix $ IT.rule `combine` pelletierScale1 R L BN.rule++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 12 - 1 in (negate x, x)++cardinalRepr ∷ (G.Feminine i, G.Masculine i) ⇒ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprScale = BN.pelletierRepr+ (BN.quantityName "ilion" "ilions")+ (BN.quantityName "iliart" "iliarts")+ []+ }+ where+ ( Lit 20 ⊞ _ ) _ = "e"+ ( Lit 100 ⊞ _ ) _ = " e "+ ( Lit 1000 ⊞ ( Lit 100 `Add` _)) _ = " "+ ( Lit 1000 ⊞ (_ `Mul` Lit 100 `Add` _)) _ = " "+ ( Lit 1000 ⊞ _ ) _ = " e "+ ((_ `Mul` Lit 100) ⊞ _ ) _ = " e "+ ((_ `Mul` Lit 1000) ⊞ ( Lit 100 `Add` _)) _ = " "+ ((_ `Mul` Lit 1000) ⊞ (_ `Mul` Lit 100 `Add` _)) _ = " "+ ((_ `Mul` Lit 1000) ⊞ _ ) _ = " e "+ (_ ⊞ _ ) _ = ""++ (_ ⊡ Lit 1000) _ = " "+ (_ ⊡ Scale {}) _ = " "+ (_ ⊡ _ ) _ = ""++ syms inf =+ M.fromList+ [ (0, const "zero")+ , (1, \c → case c of+ _ | G.isFeminine inf → "une"+ | otherwise → "un"+ )+ , (2, addCtx 10 "do" $ mulCtx 100 "dus"+ $ \c → case c of+ _ | G.isFeminine inf → "dôs"+ | otherwise → "doi"+ )+ , (3, addCtx 10 "tre" $ mulCtx 10 "tr"+ $ mulCtx 100 "tres" $ const "trê"+ )+ , (4, addCtx 10 "cutuar" $ mulCtx 10 "cuar" $ const "cuatri")+ , (5, addCtx 10 "cuin" $ mulCtx 10 "cincu" $ const "cinc")+ , (6, addCtx 10 "se" $ mulCtx 10 "sess" $ const "sîs")+ , (7, mulCtx 10 "set" $ const "siet")+ , (8, mulCtx 10 "ot" $ const "vot")+ , (9, mulCtx 10 "nov" $ const "nûf")+ , (10, \c → case c of+ CtxAdd R (Lit n) _+ | n ≤ 7 → "dis"+ CtxAdd L _ _ → "dise"+ CtxMul _ (Lit 3) _ → "ente"+ CtxMul _ (Lit n) _+ | n ≤ 9 → "ante"+ _ → "dîs"+ )+ , (20, const "vincj")+ , (100, \c → case c of+ CtxMul _ (Lit n) _+ | n ≤ 3 → "inte"+ | otherwise → "cent"+ _ → "cent"+ )+ , (1000, const "mil")+ ]
+ src/Text/Numeral/Language/GSW.hs view
@@ -0,0 +1,126 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] gse++[@ISO639-3@] gse++[@Native name@] Schwyzerdütsch++[@English name@] Swiss German+-}++module Text.Numeral.Language.GSW+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( ($), const )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Language.DE ( struct )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- GSW+--------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_2 = ["gse"]+ , entIso639_3 = Just "gse"+ , entNativeNames = ["Schwyzerdütsch"]+ , entEnglishName = Just "Swiss German"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 6 - 1 in (negate x, x)++genericRepr ∷ Repr i+genericRepr = defaultRepr+ { reprAdd = Just (⊞)+ , reprMul = Just $ \_ _ _ → ""+ }+ where+ (_ ⊞ (_ `Mul` Lit 10)) _ = "e"+ (Lit 100 ⊞ Lit 1) _ = "und"+ (_ ⊞ _ ) _ = ""++cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render genericRepr+ { reprValue = \_ n → M.lookup n syms }+ where+ syms =+ M.fromList+ [ (1, \c → case c of+ CtxAdd _ (Lit 100) _ → "äis"+ CtxAdd {} → "ein"+ _ → "eis"+ )+ , (2, \c → case c of+ CtxMul _ (Lit 10) _ → "zwän"+ _ → "zwöi"+ )+ , (3, \c → case c of+ CtxAdd _ (Lit 10) _ → "dry"+ CtxMul _ (Lit 10) _ → "drys"+ _ → "drü"+ )+ , (4, const "vier")+ , (5, const "füf")+ , (6, \c → case c of+ CtxMul _ (Lit 10) _ → "sëch"+ _ → "sächs"+ )+ , (7, \c → case c of+ CtxAdd _ (_ `Mul` Lit 10) _ → "siben"+ _ → "sibe"+ )+ , (8, \c → case c of+ CtxMul _ (Lit 10) _ → "ach"+ _ → "acht"+ )+ , (9, \c → case c of+ CtxAdd _ (_ `Mul` Lit 10) _ → "nün"+ _ → "nüün"+ )+ , (10, \c → case c of+ CtxMul _ (Lit 3) _ → "sg"+ CtxMul {} → "zg"+ _ → "zäh"+ )+ , (11, const "euf")+ , (12, const "zwüof")+ , (100, const "hundert")+ ]
src/Text/Numeral/Language/GV.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] gv@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.GV- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -28,30 +33,37 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) ------------------------------------------------------------------------------- -- GV ------------------------------------------------------------------------------- -{--Sources:- http://www.sf.airnet.ne.jp/~ts/language/number/manx.html- http://www.gaelg.iofm.net/LESSONS/P/P19.html- http://www.gaelg.iofm.net/LESSONS/mona/Lessons.pdf--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "gv"+ , entIso639_2 = ["glv"]+ , entIso639_3 = Just "glv"+ , entNativeNames = ["Gaelg"]+ , entEnglishName = Just "Manx"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ α → β+struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ findRule ( 1, lit )@@ -66,9 +78,12 @@ ] 1000 -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (1, 1000)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just (⊞) , reprMul = Just $ \_ _ _ → " " }
+ src/Text/Numeral/Language/HE.hs view
@@ -0,0 +1,172 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] he++[@ISO639-2@] heb++[@ISO639-3@] heb++[@Native name@] עִבְרִית++[@English name@] Modern Hebrew+-}++module Text.Numeral.Language.HE+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( ($), fix )+import "base" Data.List ( concat )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral, (+), div, negate )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) )+import "base-unicode-symbols" Data.Ord.Unicode ( (≤) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- HE+--------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "he"+ , entIso639_2 = ["heb"]+ , entIso639_3 = Just "heb"+ , entNativeNames = ["עִבְרִית"]+ , entEnglishName = Just "Modern Hebrew"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ ( Integral α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Dual β, E.Plural β+ )+ ⇒ α → β+struct = pos+ $ fix+ $ findRule ( 0, lit)+ ( [ (11, add 10 L)+ , (20, dual ∘ mapRule (`div` 10) lit)+ , (21, add 20 R)+ ]+ ⊕ concat [ [ (n, plural ∘ mapRule (`div` 10) lit)+ , (n+1, add n R)+ ]+ | n ← [20,30..90]+ ]+ ⊕ [ (100, step 100 10 R L)+ , (200, dual ∘ mapRule (`div` 2) lit)+ , (201, add 200 R)+ , (300, step 100 10 R L)+ ]+ )+ 1000++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = 1000 in (negate x, x)++-- TODO: Handle inflection, mainly masculine and feminine+-- gender. Maybe get rid of Dual and Plural in the expression language+-- and use grammatical number for that.+cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \_ n → M.lookup n syms+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprNeg = Just $ \_ _ → "מינוס "+ , reprAddCombine = Just addCombine+ }+ where+ (_ ⊞ Lit 10) _ = "ה"+ (Dual _ ⊞ _ ) _ = " ו"+ (Plural _ ⊞ _ ) _ = " ו"+ (_ ⊞ _ ) _ = " "++ (_ ⊡ Lit 10) _ = ""+ (_ ⊡ _ ) _ = " "++ addCombine a x _ y (Lit 10) = x ⊕ " " ⊕ y ⊕ a+ addCombine a x _ y _ = x ⊕ a ⊕ y++ syms =+ M.fromList+ [ (0, \c → case c of+ _ → "אפס"+ )+ , (1, \c → case c of+ _ → "אחת"+ )+ , (2, \c → case c of+ CtxAdd _ (Lit 10) _ → "שתים"+ CtxDual {} → "עשרים"+ _ → "שתיים"+ )+ , (3, \c → case c of+ CtxPlural {} → "שלושים"+ _ → "שלוש"+ )+ , (4, \c → case c of+ CtxPlural {} → "ארבעים"+ _ → "ארבע"+ )+ , (5, \c → case c of+ CtxPlural {} → "חמישים"+ _ → "חמש"+ )+ , (6, \c → case c of+ CtxPlural {} → "ששים"+ _ → "שש"+ )+ , (7, \c → case c of+ CtxPlural {} → "שבעים"+ _ → "שבע"+ )+ , (8, \c → case c of+ CtxPlural {} → "שמונים"+ _ → "שמונה"+ )+ , (9, \c → case c of+ CtxPlural {} → "תשעים"+ _ → "תשע"+ )+ , (10, \c → case c of+ CtxMul _ (Lit n) _ | n ≤ 9 → ""+ _ → "עשר"+ )+ , (100, \c → case c of+ CtxDual {} → "מאתיים"+ CtxMul {} → "מאות"+ _ → "מאה"+ )+ , (1000, \c → case c of+ _ → "אלף"+ )+ ]
+ src/Text/Numeral/Language/HOP.hs view
@@ -0,0 +1,128 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] hop++[@Native name@] Hopilàvayi++[@English name@] Hopi+-}++module Text.Numeral.Language.HOP+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( ($), const, fix )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.List.Unicode ( (∈) )+import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Entry+import "this" Text.Numeral.Render.Utils ( mulCtx )+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- HOP+--------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_3 = Just "hop"+ , entNativeNames = ["Hopilàvayi"]+ , entEnglishName = Just "Hopi"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++cardinal ∷ (Integral α, E.Scale α)⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ ( Integral α+ , E.Unknown β, E.Lit β, E.Add β, E.Mul β+ )+ ⇒ α → β+struct = fix+ $ findRule ( 0, lit)+ [ (11, add 10 R)+ , (20, lit)+ , (21, add 20 R)+ , (30, mul 10 R L)+ ]+ (100)++bounds ∷ (Integral α) ⇒ (α, α)+bounds = (1, 100)++cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprAdd = Just (⊞)+ , reprAddCombine = Just addCombine+ , reprMul = Just $ \_ _ _ → " "+ }+ where+ (Lit n ⊞ _) _ | n ∈ [10, 20] = " niikyang "+ (Mul _ (Lit 10) ⊞ _) _ = " niikyang "+ (_ ⊞ _) _ = " "++ addCombine a x (Lit n) y _ | n ∈ [10, 20] = x ⊕ a ⊕ y ⊕ " siikya’ta"+ addCombine a x (Mul _ (Lit 10)) y _ = x ⊕ a ⊕ y ⊕ " siikya’ta"+ addCombine a x _ y _ = x ⊕ a ⊕ y++ syms _ =+ M.fromList+ [ (1, \c → case c of+ CtxAdd {} → "suk"+ _ → "suukya’"+ )+ , (2, \c → case c of+ CtxAdd {} → "löqmuy"+ _ → "lööyöm"+ )+ , (3, \c → case c of+ CtxAdd {} → "paykomuy"+ CtxMul {} → "payiv"+ _ → "pàayom"+ )+ , (4, \c → case c of+ CtxAdd {} → "naalöqmuy"+ CtxMul {} → "naalöv"+ _ → "naalöyöm"+ )+ , (5, mulCtx 10 "tsivotsikiv" $ const "tsivot")+ , (6, mulCtx 10 "navaysikiv" $ const "navay")+ , (7, mulCtx 10 "tsange’sikiv" $ const "tsange’")+ , (8, mulCtx 10 "nanalsikiv" $ const "nanalt")+ , (9, mulCtx 10 "peve’sikiv" $ const "pevt")+ , (10, \c → case c of+ CtxMul L _ _ → "palotsikiv"+ _ → "pakwt"+ )+ , (20, const "sunat")+ ]
src/Text/Numeral/Language/IT.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] it@@ -17,8 +16,16 @@ -} module Text.Numeral.Language.IT- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ , ordinal+ -- * Structure , struct+ , rule+ -- * Bounds+ , bounds ) where @@ -26,59 +33,84 @@ -- Imports -------------------------------------------------------------------------------- +import "base" Data.Bool ( otherwise ) import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-), Integer )+import "base" Data.Ord ( Ord )+import "base" Prelude ( Integral, (-), negate ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.List.Unicode ( (∈) ) import "base-unicode-symbols" Data.Ord.Unicode ( (≥) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.BigNum as BN-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- IT -------------------------------------------------------------------------------- --- Sources:--- http://www.sf.airnet.ne.jp/~ts/language/number/italian.html--- http://www.orbilat.com/Languages/Italian/Grammar/Italian-Numerals.html--- http://italian.about.com/library/weekly/aa042600a.htm--- http://www.suite101.com/content/how-to-count-in-italian-a146487+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "it"+ , entIso639_2 = ["ita"]+ , entIso639_3 = Just "ita"+ , entNativeNames = ["Italiano"]+ , entEnglishName = Just "Italian"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ , entOrdinal = Just Conversion+ { toNumeral = ordinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (G.Masculine i, G.Feminine i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β+ordinal ∷ (G.Masculine i, G.Feminine i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+ordinal inf = ordinalRepr inf ∘ struct++rule ∷ ( Integral α, Ord α+ , E.Unknown β, E.Lit β, E.Add β, E.Mul β+ )+ ⇒ Rule α β+rule = findRule ( 0, lit )+ [ ( 11, add 10 L )+ , ( 17, add 10 R )+ , ( 20, lit )+ , ( 21, add 20 R )+ , ( 30, mul 10 R L)+ , ( 100, step 100 10 R L)+ , (1000, step 1000 1000 R L)+ ]+ (dec 6 - 1)++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β ) ⇒ α → β struct = pos $ fix $ rule `combine` pelletierScale R L BN.rule- where- rule = findRule ( 0, lit )- [ ( 11, add 10 L )- , ( 17, add 10 R )- , ( 20, lit )- , ( 21, add 20 R )- , ( 30, mul 10 R L)- , ( 100, step 100 10 R L)- , (1000, step 1000 1000 R L)- ]- (dec 6 - 1) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s-cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms- , reprScale = pelletierRepr- , reprAdd = Just (⊞)- , reprMul = Just (⊡)- , reprNeg = Just $ \_ _ → "meno "- }+bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++genericRepr ∷ Repr i+genericRepr = defaultRepr+ { reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprNeg = Just $ \_ _ → "meno "+ } where (Lit 10 ⊞ Lit 7) _ = "as" (Lit 10 ⊞ Lit 9) _ = "an"@@ -90,53 +122,39 @@ (_ ⊡ Scale _ _ _) _ = " " (_ ⊡ _ ) _ = "" - syms =+cardinalRepr ∷ (G.Feminine i, G.Masculine i) ⇒ i → Exp i → Maybe Text+cardinalRepr = render genericRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprScale = BN.pelletierRepr+ (BN.quantityName "ilione" "ilioni")+ (BN.quantityName "iliardo" "iliardi")+ bigNumSyms+ }+ where+ syms inf = M.fromList [ (0, const "zero") , (1, \c → case c of- CtxAdd _ (Lit 10) _ → "un"- _ → "uno"- )- , (2, \c → case c of- CtxAdd _ (Lit 10) _ → "do"- _ → "due"+ CtxAdd _ (Lit 10) _ → "un"+ _ | G.isFeminine inf → "una"+ | G.isMasculine inf → "un"+ | otherwise → "uno" )+ , (2, forms "due" "do" "du") , (3, \c → case c of CtxAdd R _ _ → "tré" CtxMul _ (Lit 10) _ → "tren" _ → "tre" )- , (4, \c → case c of- CtxAdd _ (Lit 10) _ → "quattor"- CtxMul _ (Lit 10) _ → "quar"- _ → "quattro"- )- , (5, \c → case c of- CtxAdd _ (Lit 10) _ → "quin"- CtxMul _ (Lit 10) _ → "cinqu"- _ → "cinque"- )- , (6, \c → case c of- CtxAdd _ (Lit 10) _ → "se"- CtxMul _ (Lit 10) _ → "sess"- _ → "sei"- )- , (7, \c → case c of- CtxMul _ (Lit 10) _ → "sett"- _ → "sette"- )- , (8, \c → case c of- CtxMul _ (Lit 10) _ → "ott"- _ → "otto"- )- , (9, \c → case c of- CtxMul _ (Lit 10) _ → "nov"- _ → "nove"- )+ , (4, forms "quattro" "quattor" "quar")+ , (5, forms "cinque" "quin" "cinqu")+ , (6, forms "sei" "se" "sess")+ , (7, forms "sette" "sette" "sett")+ , (8, forms "otto" "otto" "ott")+ , (9, forms "nove" "nove" "nov") , (10, \c → case c of CtxAdd _ (Lit _) _ → "dici"- -- Last vowel removed because of a- -- phonetic rule:+ -- Last vowel removed because of a phonetic rule: CtxMul _ (Lit _) (CtxAdd _ (Lit n) _) | n ∈ [1,8] → "t" CtxMul R (Lit _) _ → "ta"@@ -162,12 +180,93 @@ ) ] -pelletierRepr ∷ (IsString s, Monoid s)- ⇒ Integer → Integer → Exp → Ctx Exp → Maybe s-pelletierRepr = BN.pelletierRepr- "ilione" "ilioni"- "iliardo" "iliardi"- [ (6, BN.forms "sest" "sex" "ses" "sexa" "ses")- , (7, BN.forms "sett" "septen" "septem" "septua" "septin")- , (8, BN.forms "ott" "otto" "otto" "otto" "ottin")- ]+ forms ∷ s → s → s → Ctx (Exp i) → s+ forms n a m c = case c of+ CtxAdd _ (Lit 10) _ → a+ CtxMul _ (Lit 10) _ → m+ _ → n++ordinalRepr ∷ (G.Feminine i) ⇒ i → Exp i → Maybe Text+ordinalRepr = render genericRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprScale = BN.pelletierRepr+ ( BN.ordQuantityName "ilione" "ilionesimo"+ "ilioni" "ilionesimo"+ )+ ( BN.ordQuantityName "iliardo" "iliardesimo"+ "iliardi" "iliardesimo"+ )+ bigNumSyms+ }+ where+ syms inf =+ M.fromList+ [ (0, const "zero")+ , (1, forms "prima" "primo" "unesimo" "uno" "un" "un")+ , (2, forms "seconda" "secondo" "duesimo" "due" "do" "due")+ , (3, \c → case c of+ CtxEmpty+ | G.isFeminine inf → "terza"+ | otherwise → "terzo"+ _ | isOutside R c → "treesimo"+ CtxAdd R _ _ → "tré"+ CtxMul _ (Lit 10) _ → "tren"+ _ → "tre"+ )+ , (4, forms "quarta" "quarto" "quattresimo" "quattro" "quattor" "quar")+ , (5, forms "quinta" "quinto" "cinquesimo" "cinque" "quin" "cinqu")+ , (6, forms "sesta" "sesto" "seiesimo" "sei" "se" "sess")+ , (7, forms "settimo" "settimo" "settesimo" "sette" "sette" "sett")+ , (8, forms "ottave" "ottavo" "ottesimo" "otto" "otto" "ott")+ , (9, forms "nono" "nono" "novesimo" "nove" "nove" "nov")+ , (10, \c → case c of+ CtxAdd _ (Lit _) _ | isOutside R c → "dicesimo"+ | otherwise → "dici"+ -- Last vowel removed because of a phonetic rule:+ CtxMul _ (Lit _) (CtxAdd _ (Lit n) _)+ | n ∈ [1,8] → "t"+ CtxMul R (Lit _) _ | isOutside R c → "tesimo"+ | otherwise → "ta"+ _ | isOutside R c → "decimo"+ | otherwise → "dieci"+ )+ , (20, \c → case c of+ _ | isOutside R c → "ventesimo"+ CtxAdd _ (Lit n) _+ | n ∈ [1,8] → "vent"+ _ → "venti"+ )+ , ( 100+ , let f c = case c of+ _ | isOutside R c → "centesimo"+ CtxAdd _ (Lit 8) _ → "cent"+ CtxAdd _ (Lit 8 `Mul` Lit 10) _ → "cent"+ CtxAdd _ (Lit 8 `Mul` Lit 10 `Add` _) _ → "cent"+ CtxMul _ (Lit _) c2 → f c2+ _ → "cento"+ in f+ )+ , (1000, \c → case c of+ _ | isOutside R c → "millesimo"+ CtxMul {} → "mila"+ _ → "mille"+ )+ ]+ where+ forms ∷ s → s → s → s → s → s → Ctx (Exp i) → s+ forms fo1 o1 o2 n a m c =+ case c of+ CtxEmpty+ | G.isFeminine inf → fo1+ | otherwise → o1+ _ | isOutside R c → o2+ CtxAdd _ (Lit 10) _ → a+ CtxMul _ (Lit 10) _ → m+ _ → n++bigNumSyms ∷ [(ℤ, Ctx (Exp i) → Text)]+bigNumSyms =+ [ (6, BN.forms "sest" "sex" "ses" "sexa" "ses")+ , (7, BN.forms "sett" "septen" "septem" "septua" "septin")+ , (8, BN.forms "ott" "otto" "otto" "otto" "ottin")+ ]
src/Text/Numeral/Language/JA.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] ja@@ -17,11 +16,21 @@ -} module Text.Numeral.Language.JA- ( struct+ ( -- * Language entry+ kanji_entry+ , daiji_entry+ , on'yomi_entry+ , preferred_entry+ -- * Conversions , kanji_cardinal , daiji_cardinal , on'yomi_cardinal , preferred_cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ , daiji_bounds ) where @@ -32,28 +41,32 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.List ( map ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString )-import "base" Prelude ( Num, Integral, (-) )+import "base" Prelude ( Num, Integral, (-), negate ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- JA -------------------------------------------------------------------------------- -{--Sources:- http://en.wikipedia.org/wiki/Japanese_numerals- http://www.guidetojapanese.org/numbers.html--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "ja"+ , entIso639_2 = ["jpn"]+ , entIso639_3 = Just "jpn"+ , entNativeNames = ["日本語"]+ , entEnglishName = Just "Japanese"+ } -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β) ⇒ α → β+struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β) ⇒ α → β struct = pos $ fix $ findRule ( 0, lit )@@ -66,17 +79,32 @@ ) (dec 72 - 1) +bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 72 - 1 in (negate x, x) +daiji_bounds ∷ (Integral α) ⇒ (α, α)+daiji_bounds = let x = dec 4 - 1 in (negate x, x)++ -------------------------------------------------------------------------------- -- Kanji -------------------------------------------------------------------------------- -kanji_cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-kanji_cardinal = kanji_cardinal_repr ∘ struct+kanji_entry ∷ Entry+kanji_entry = entry+ { entVariant = Just "kanji"+ , entCardinal = Just Conversion+ { toNumeral = kanji_cardinal+ , toStructure = struct+ }+ } -kanji_cardinal_repr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+kanji_cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+kanji_cardinal inf = kanji_cardinal_repr inf ∘ struct++kanji_cardinal_repr ∷ i → Exp i → Maybe Text kanji_cardinal_repr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just $ \_ _ _ → "" , reprMul = Just $ \_ _ _ → "" , reprNeg = Just $ \_ _ → "マイナス"@@ -121,12 +149,21 @@ -- Daiji -------------------------------------------------------------------------------- -daiji_cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-daiji_cardinal = daiji_cardinal_repr ∘ struct+daiji_entry ∷ Entry+daiji_entry = entry+ { entVariant = Just "daiji"+ , entCardinal = Just Conversion+ { toNumeral = daiji_cardinal+ , toStructure = struct+ }+ } -daiji_cardinal_repr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+daiji_cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+daiji_cardinal inf = daiji_cardinal_repr inf ∘ struct++daiji_cardinal_repr ∷ i → Exp i → Maybe Text daiji_cardinal_repr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just $ \_ _ _ → "" , reprMul = Just $ \_ _ _ → "" , reprNeg = Just $ \_ _ → "マイナス"@@ -155,9 +192,9 @@ -- Generic reading -------------------------------------------------------------------------------- -generic_repr ∷ (Monoid s, IsString s) ⇒ s → s → Repr s+generic_repr ∷ Text → Text → Repr i generic_repr four seven = defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just $ \_ _ _ → " " , reprMul = Just $ \_ _ _ → "" , reprNeg = Just $ \_ _ → "mainasu "@@ -205,19 +242,37 @@ -- On'yomi -------------------------------------------------------------------------------- -on'yomi_cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-on'yomi_cardinal = on'yomi_cardinal_repr ∘ struct+on'yomi_entry ∷ Entry+on'yomi_entry = entry+ { entVariant = Just "on'yomi"+ , entCardinal = Just Conversion+ { toNumeral = on'yomi_cardinal+ , toStructure = struct+ }+ } -on'yomi_cardinal_repr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s-on'yomi_cardinal_repr = render $ generic_repr "shi" "shichi"+on'yomi_cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+on'yomi_cardinal inf = on'yomi_cardinal_repr inf ∘ struct +on'yomi_cardinal_repr ∷ i → Exp i → Maybe Text+on'yomi_cardinal_repr = render (generic_repr "shi" "shichi") + -------------------------------------------------------------------------------- -- Preferred reading -------------------------------------------------------------------------------- -preferred_cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-preferred_cardinal = preferred_cardinal_repr ∘ struct+preferred_entry ∷ Entry+preferred_entry = entry+ { entVariant = Just "preferred"+ , entCardinal = Just Conversion+ { toNumeral = preferred_cardinal+ , toStructure = struct+ }+ } -preferred_cardinal_repr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s-preferred_cardinal_repr = render $ generic_repr "yon" "nana"+preferred_cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+preferred_cardinal inf = preferred_cardinal_repr inf ∘ struct++preferred_cardinal_repr ∷ i → Exp i → Maybe Text+preferred_cardinal_repr = render (generic_repr "yon" "nana")
src/Text/Numeral/Language/LA.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] la@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.LA- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -30,32 +35,40 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.List ( concat ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral, Num, (+) ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.List.Unicode ( (∈) ) import "base-unicode-symbols" Data.Ord.Unicode ( (≤) ) import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- LA -------------------------------------------------------------------------------- -{--Sources:- http://www.informalmusic.com/latinsoc/latnum.html- http://www.sf.airnet.ne.jp/~ts/language/number/latin.html--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "la"+ , entIso639_2 = ["lat"]+ , entIso639_3 = Just "lat"+ , entNativeNames = ["Latine"]+ , entEnglishName = Just "Latin"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Sub β, C.Mul β) ⇒ α → β+struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Sub β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ findRule ( 0, lit)@@ -73,9 +86,12 @@ ) 1000 -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (0, 1000)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just (⊞) , reprMul = Just (⊡) , reprSub = Just $ \_ _ _ → "dē"
+ src/Text/Numeral/Language/LLD.hs view
@@ -0,0 +1,131 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] lld++[@Native name@] Ladin++[@English name@] Ladin+-}++module Text.Numeral.Language.LLD+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Bool ( otherwise )+import "base" Data.Function ( ($), const )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.Bool.Unicode ( (∧), (∨) )+import "base-unicode-symbols" Data.Eq.Unicode ( (≡), (≢) )+import "base-unicode-symbols" Data.Ord.Unicode ( (≤) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "this" Text.Numeral.Language.FUR ( struct )+import "this" Text.Numeral.Render.Utils ( addCtx, mulCtx )+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- LLD+--------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_3 = Just "lld"+ , entNativeNames = ["Ladin"]+ , entEnglishName = Just "Ladin"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++cardinal ∷ (G.Masculine i, G.Feminine i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 12 - 1 in (negate x, x)++cardinalRepr ∷ (G.Feminine i, G.Masculine i) ⇒ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprScale = BN.pelletierRepr+ (BN.quantityName "ilion" "ilion")+ (BN.quantityName "iliard" "iliard")+ []+ }+ where+ ( Lit 20 ⊞ Lit n) _ | n ≢ 1 ∧ n ≢ 8 = "e"+ ((Lit t `Mul` Lit 10) ⊞ Lit n) _ | n ≢ 1 ∧ (t ≡ 3 ∨ n ≢ 8) = "e"+ ( Lit 100 ⊞ _) _ = "e"+ ((_ `Mul` Lit 100) ⊞ _) _ = "e"+ ((_ `Mul` Scale{}) ⊞ _) _ = "e"+ (_ ⊞ _) _ = ""++ (_ ⊡ Scale {}) _ = " "+ (_ ⊡ _ ) _ = ""++ syms inf =+ M.fromList+ [ (0, const "zero")+ , (1, addCtx 10 "un"+ $ \c → case c of+ _ | G.isFeminine inf → "una"+ | otherwise → "un"+ )+ , (2, addCtx 10 "do"+ $ \c → case c of+ _ | G.isFeminine inf → "does"+ | otherwise → "doi"+ )+ , (3, addCtx 10 "tre" $ mulCtx 10 "tr" $ const "trei")+ , (4, addCtx 10 "cator" $ mulCtx 10 "car" $ const "cater")+ , (5, addCtx 10 "chin" $ mulCtx 10 "cinc" $ const "cinch")+ , (6, addCtx 10 "sei" $ mulCtx 10 "sess" $ const "sies")+ , (7, const "set")+ , (8, addCtx 10 "dot" $ const "ot")+ , (9, mulCtx 10 "non" $ const "nuef")+ , (10, \c → case c of+ CtxAdd _ (Lit n) _+ | n ≤ 6 → "desc"+ | n ≡ 7 → "dejes"+ | n ≤ 9 → "deje"+ CtxMul _ (Lit 3) (CtxAdd {}) → "ent"+ CtxMul _ (Lit 3) _ → "enta"+ CtxMul _ (Lit _) (CtxAdd {}) → "ant"+ CtxMul _ (Lit _) _ → "anta"+ _ → "diesc"+ )+ , (20, const "vint")+ , (100, mulCtx 6 "çent" $ const "cent")+ , (1000, const "mile")+ ]
src/Text/Numeral/Language/MG.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] mg@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.MG- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -29,40 +34,50 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.List ( map ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid ) import "base" Data.Ord ( (<) )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral, (-) ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) ------------------------------------------------------------------------------- -- MG ------------------------------------------------------------------------------- -{--Sources:- http://en.wikipedia.org/wiki/Malagasy_language- http://www.sf.airnet.ne.jp/~ts/language/number/malagasy.html--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "mg"+ , entIso639_2 = ["mlg"]+ , entIso639_3 = Just "mlg"+ , entEnglishName = Just "Malagasy"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ α → β+struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ findRule (0, lit) [(n, step n 10 L L) | n ← map dec [1..6]] (dec 7 - 1) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (0, dec 7 - 1)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just (⊞) , reprMul = Just (⊡) }
src/Text/Numeral/Language/NL.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] nl@@ -17,59 +17,116 @@ -} module Text.Numeral.Language.NL- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ , ordinal+ , partitive+ , multiplicative+ -- * Structure , struct+ -- * Bounds+ , bounds ) where + -------------------------------------------------------------------------------- -- Imports -------------------------------------------------------------------------------- -import "base" Data.Bool ( otherwise )+import "base" Control.Monad ( return )+import "base" Data.Bool ( Bool, otherwise ) import "base" Data.Function ( ($), const, fix )+import "base" Data.Functor ( fmap ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid ) import "base" Data.Ord ( (<) )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Bool.Unicode ( (∧), (∨) ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.List.Unicode ( (∈) )+import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.Exp.Classes as C-import qualified "numerals-base" Text.Numeral.BigNum as BN ( rule, pelletierRepr )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- NL -------------------------------------------------------------------------------- -cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "nl"+ , entIso639_2 = ["dut"]+ , entIso639_3 = Just "nld"+ , entNativeNames = ["Nederlands"]+ , entEnglishName = Just "Dutch"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ , entOrdinal = Just Conversion+ { toNumeral = ordinal+ , toStructure = struct+ }+ , entPartitive = Just Conversion+ { toNumeral = partitive+ , toStructure = \(n, d) → E.frac (struct n) (struct d)+ }+ , entMultiplicative = Just Conversion+ { toNumeral = multiplicative+ , toStructure = struct+ }+ } -struct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β+cardinal ∷ (G.Plural i, G.Dative i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++ordinal ∷ (Integral α, E.Scale α) ⇒ i → α → Maybe Text+ordinal inf = ordinalRepr "eerste" inf ∘ struct++partitive ∷ ( G.Singular i, G.Plural i, G.NoCase i, G.Dative i+ , Integral α, E.Scale α+ )+ ⇒ i → (α, α) → Maybe Text+partitive inf (n, d) = do+ n' ← cardinal (G.noCase $ G.singular inf) n+ d' ← ordinalRepr "éénde" inf $ struct d+ return $ n' ⊕ " " ⊕ d'++multiplicative ∷ ( G.Singular i, G.Plural i, G.NoCase i, G.Dative i+ , Integral α, E.Scale α+ )+ ⇒ i → α → Maybe Text+multiplicative inf = fmap (⊕ "maal") ∘ cardinal (G.noCase $ G.singular inf)++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β ) ⇒ α → β-struct = pos $ fix $ rule `combine` pelletierScale R L BN.rule+struct = pos+ $ fix+ $ findRule ( 0, lit )+ [ ( 13, add 10 L )+ , ( 20, mul 10 L L)+ , ( 100, step 100 10 R L)+ , (1000, step 1000 1000 R L)+ ]+ (dec 6 - 1)+ `combine` pelletierScale R L BN.rule -rule ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ Rule α β-rule = findRule ( 0, lit )- [ ( 13, add 10 L )- , ( 20, mul 10 L L)- , ( 100, step 100 10 R L)- , (1000, step 1000 1000 R L)- ]- (dec 6 - 1)+bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s-cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms- , reprScale = BN.pelletierRepr "iljoen" "iljoen"- "iljard" "iljard"- []- , reprAdd = Just (⊞)+genericRepr ∷ Repr i+genericRepr = defaultRepr+ { reprAdd = Just (⊞) , reprMul = Just $ \_ _ _ → "" , reprNeg = Just $ \_ _ → "min " }@@ -80,33 +137,132 @@ | otherwise = "" (_ ⊞ _) _ = "" - syms =+cardinalRepr ∷ ∀ i. (G.Plural i, G.Dative i) ⇒ i → Exp i → Maybe Text+cardinalRepr = render genericRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprScale = BN.pelletierRepr (\i c → if doPlural i c then "iljoenen" else "iljoen")+ (\i c → if doPlural i c then "iljarden" else "iljard")+ []+ }+ where+ doPlural ∷ i → Ctx (Exp i) → Bool+ doPlural inf ctx = (G.isPlural inf ∨ G.isDative inf) ∧ isOutside R ctx++ syms inf = M.fromList [ (0, const "nul")- , (1, const "een")- , (2, tenForms "twee" "twin")- , (3, tenForms "drie" "der")- , (4, tenForms "vier" "veer")- , (5, const "vijf")- , (6, const "zes")- , (7, const "zeven")+ , (1, pluralDative "één" "éénen" "éénen")+ , (2, forms "twee" "twin" "tweeën" "tweeën")+ , (3, forms "drie" "der" "drieën" "drieën")+ , (4, forms "vier" "veer" "vieren" "vieren")+ , (5, pluralDative "vijf" "vijven" "vijven")+ , (6, pluralDative "zes" "zessen" "zessen")+ , (7, pluralDative "zeven" "zevens" "zevenen") , (8, \c → case c of CtxMul _ (Lit 10) _ → "tach"+ CtxAdd _ (Lit 10) _ → "ach"+ _ | dativeForm c+ ∨ pluralForm c → "achten"+ | otherwise → "acht"+ )+ , (9, pluralDative "negen" "negens" "negenen")+ , (10, \c → case c of+ CtxAdd R _ _+ | dativeForm c → "tienen"+ | pluralForm c → "tiens"+ CtxMul R _ _+ | dativeForm c → "tigen"+ | pluralForm c → "tigs"+ | otherwise → "tig"+ _ | dativeForm c+ ∨ pluralForm c → "tienen"+ | otherwise → "tien"+ )+ , ( 11, pluralDative "elf" "elven" "elven")+ , ( 12, pluralDative "twaalf" "twaalven" "twaalven")+ , ( 100, pluralDative "honderd" "honderden" "honderden")+ , (1000, pluralDative "duizend" "duizenden" "duizenden")+ ]+ where+ pluralDative ∷ s → s → s → Ctx (Exp i) → s+ pluralDative o p d ctx+ | pluralForm ctx = p+ | dativeForm ctx = d+ | otherwise = o++ dativeForm ∷ Ctx (Exp i) → Bool+ dativeForm ctx = G.isDative inf ∧ isOutside R ctx++ pluralForm ∷ Ctx (Exp i) → Bool+ pluralForm ctx = G.isPlural inf ∧ isOutside R ctx++ forms ∷ s -- ^ Normal form.+ → s -- ^ Added to, or multiplied with ten.+ → s -- ^ Plural form.+ → s -- ^ Dative form.+ → Ctx (Exp i)+ → s+ forms n t p d ctx =+ case ctx of+ CtxMul _ (Lit 10) _ → t+ CtxAdd _ (Lit 10) _ → t+ _ | dativeForm ctx → d+ | pluralForm ctx → p+ | otherwise → n++ordinalRepr ∷ Text → i → Exp i → Maybe Text+ordinalRepr one =+ render genericRepr+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.pelletierRepr ( BN.ordQuantityName "iljoen" "iljoenste"+ "iljoen" "iljoenste"+ )+ ( BN.ordQuantityName "iljard" "iljardste"+ "iljard" "iljardste"+ )+ []+ }+ where+ syms =+ M.fromList+ [ (0, const "nulde")+ , (1, \c → case c of+ CtxEmpty → one+ _ | isOutside R c → "éénde"+ | otherwise → "één"+ )+ , (2, forms "tweede" "twee" "twin")+ , (3, forms "derde" "drie" "der")+ , (4, forms "vierde" "vier" "veer")+ , (5, forms "vijfde" "vijf" "vijf")+ , (6, forms "zesde" "zes" "zes")+ , (7, forms "zevende" "zeven" "zeven")+ , (8, \c → case c of+ _ | isOutside R c → "achtste"+ CtxMul _ (Lit 10) _ → "tach" CtxAdd _ (Lit _) _ → "ach" _ → "acht" )- , (9, const "negen")+ , (9, forms "negende" "negen" "negen") , (10, \c → case c of- CtxMul R _ _ → "tig"- _ → "tien"+ CtxMul R _ _ | isOutside R c → "tigste"+ | otherwise → "tig"+ _ | isOutside R c → "tiende"+ | otherwise → "tien" )- , (11, const "elf")- , (12, const "twaalf")- , (100, const "honderd")- , (1000, const "duizend")+ , (11, \c → if isOutside R c then "elfde" else "elf")+ , (12, \c → if isOutside R c then "twaalfde" else "twaalf")+ , (100, \c → if isOutside R c then "honderdste" else "honderd")+ , (1000, \c → if isOutside R c then "duizendste" else "duizend") ] - tenForms n t ctx = case ctx of- CtxMul _ (Lit 10) _ → t- CtxAdd _ (Lit _) _ → t- _ → n+ forms ∷ s -- ^ Ordinal form.+ → s -- ^ Cardinal form.+ → s -- ^ Added to, or multiplied with, ten.+ → Ctx (Exp i)+ → s+ forms o c t ctx = case ctx of+ _ | isOutside R ctx → o+ CtxMul _ (Lit 10) _ → t+ CtxAdd _ (Lit _) _ → t+ _ → c
src/Text/Numeral/Language/NO.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] nb@@ -17,68 +16,107 @@ -} module Text.Numeral.Language.NO- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where + ------------------------------------------------------------------------------- -- Imports ------------------------------------------------------------------------------- import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral )+import "base" Prelude ( Integral, (-), negate ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) ------------------------------------------------------------------------------- -- NO ------------------------------------------------------------------------------- --- Sources:--- http://en.wikibooks.org/wiki/Norwegian_Numbers--- http://www.sf.airnet.ne.jp/~ts/language/number/norwegian.html+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "nb"+ , entIso639_2 = ["nob"]+ , entIso639_3 = Just "nob"+ , entNativeNames = ["Bokmål"]+ , entEnglishName = Just "Norwegian Bokmål"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β) ⇒ α → β+struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ )+ ⇒ α → β struct = pos $ fix- $ findRule ( 0, lit )- [ ( 13, add 10 L )- , ( 20, lit )- , ( 21, add 20 R )- , ( 30, mul 10 R L)- , (100, step 100 10 R L)+ $ findRule ( 0, lit )+ [ ( 13, add 10 L )+ , ( 20, lit )+ , ( 21, add 20 R )+ , ( 30, mul 10 R L)+ , ( 100, step 100 10 R L)+ , (1000, step 1000 1000 R L) ]- 1000+ (dec 6 - 1)+ `combine` pelletierScale R L BN.rule -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms- , reprAdd = Just $ \_ _ _ → ""- , reprMul = Just $ \_ _ _ → ""+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.scaleRepr (BN.quantityName "illion" "illioner") []+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡) , reprNeg = Just $ \_ _ → "minus " } where+ (Lit 100 ⊞ _) _ = " "+ (Lit 1000 ⊞ _) _ = " "+ (_ ⊞ _) _ = ""++ (_ ⊡ Lit 10 ) _ = ""+ (_ ⊡ Lit 1000) _ = ""+ (_ ⊡ _ ) _ = " "+ syms = M.fromList [ (0, const "null")- , (1, const "en")+ , (1, \c → case c of+ CtxEmpty → "én"+ _ → "en"+ ) , (2, const "to")- , (3, ten "tre" "tret" "tret")- , (4, ten "fire" "fjor" "før")+ , (3, tenForms "tre" "tret" "tret")+ , (4, tenForms "fire" "fjor" "før") , (5, const "fem") , (6, const "seks")- , (7, ten "syv" "syt" "syt")- , (8, ten "åtte" "at" "åt")- , (9, ten "ni" "nit" "nit")+ , (7, tenForms "sju" "syt" "syt")+ , (8, tenForms "åtte" "at" "åt")+ , (9, tenForms "ni" "nit" "nit") , (10, \c → case c of CtxAdd {} → "ten" _ → "ti"@@ -90,7 +128,9 @@ , (1000, const "tusen") ] - ten n a m = \c → case c of- CtxAdd _ (Lit 10) _ → a- CtxMul {} → m- _ → n+ tenForms n a m = \c → case c of+ CtxAdd _ (Lit 10 ) _ → a+ CtxMul _ (Lit 100 ) _ → n+ CtxMul _ (Lit 1000) _ → n+ CtxMul {} → m+ _ → n
src/Text/Numeral/Language/NQM.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] -@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.NQM- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -28,23 +33,34 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- NQM -------------------------------------------------------------------------------- -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+entry ∷ Entry+entry = emptyEntry+ { entIso639_3 = Just "nqm"+ , entEnglishName = Just "Ndom"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ α → β+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ findRule ( 1, lit )@@ -58,9 +74,12 @@ ] 107 -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (1, 107)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just $ \_ _ _ → " abo " , reprMul = Just (⊡) }
src/Text/Numeral/Language/OJ.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] oj@@ -17,39 +16,54 @@ -} module Text.Numeral.Language.OJ- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where + -------------------------------------------------------------------------------- -- Imports -------------------------------------------------------------------------------- import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- OJ -------------------------------------------------------------------------------- -{--Sources:- http://www.sf.airnet.ne.jp/~ts/language/number/ojibwa.html- http://www.languagesandnumbers.com/how-to-count-in-ojibwa/en/oji/--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "oj"+ , entIso639_2 = ["oji"]+ , entIso639_3 = Just "oji"+ , entNativeNames = ["ᐊᓂᔑᓈᐯᒧᐎᓐ", "Anishinaabemowin"]+ , entEnglishName = Just "Ojibwe"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β)+struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β struct = checkPos $ fix@@ -60,9 +74,12 @@ ] 1999 -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (1, 1999)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just $ \_ _ _ → " shaa " , reprMul = Just $ \_ _ _ → "" }@@ -90,7 +107,7 @@ , (1000, const "mdaaswaak") ] - forms ∷ s → s → s → Ctx Exp → s+ forms ∷ s → s → s → Ctx (Exp i) → s forms o t h = \c → case c of CtxMul _ (Lit 10) _ → t CtxMul _ (Lit 100) _ → h
+ src/Text/Numeral/Language/PDC.hs view
@@ -0,0 +1,156 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] -++[@ISO639-2@] -++[@ISO639-3@] pdc++[@Native name@] Pennsilfaanisch Deitsch++[@English name@] Pennsylvania German+-}++module Text.Numeral.Language.PDC+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( otherwise )+import "base" Data.Function ( ($), const, fix )+import "base" Data.Maybe ( Maybe(Nothing, Just) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.Ord.Unicode ( (≤) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- PDC+-------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Nothing+ , entIso639_2 = []+ , entIso639_3 = Just "pdc"+ , entNativeNames = ["Pennsilfaanisch Deitsch"]+ , entEnglishName = Just "Pennsylvania German"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ , entOrdinal = Nothing+ }++cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ )+ ⇒ α → β+struct = pos+ $ fix+ $ findRule ( 0, lit )+ [ ( 13, add 10 L )+ , ( 20, mul 10 L L)+ , ( 100, step1 100 10 R L)+ , (1000, step1 1000 1000 R L)+ ]+ (dec 6 - 1)+ `combine` pelletierScale1 R L BN.rule++bounds ∷ (Integral α) ⇒ (α, α)+bounds = (0, dec 9 - 1)++genericRepr ∷ Repr i+genericRepr = defaultRepr+ { reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprNeg = Just $ \_ _ → "minus "+ }+ where+ (Lit n ⊞ (_ `Mul` Lit 10)) _ | n ≤ 9 = "un"+ ((Lit _ `Mul` Lit 100) ⊞ Lit _ ) _ = " un "+ (_ ⊞ Lit 10) _ = ""+ (_ ⊞ _ ) _ = " "++ (_ ⊡ Lit 10) _ = ""+ (_ ⊡ _) _ = " "+++cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render genericRepr+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.pelletierRepr (BN.quantityName "illyon" "illyon")+ (BN.quantityName "illyard" "illyard")+ []+ }+ where+ syms =+ M.fromList+ [ (0, const "null")+ , (1, \c → case c of+ CtxAdd L _ _ → "een"+ CtxMul _ _ _ → "en"+ _ → "eens"+ )+ , (2, \c → case c of+ CtxMul _ (Lit 10) _ → "zwan"+ _ → "zwee"+ )+ , (3, const "drei")+ , (4, \c → case c of+ CtxAdd _ (Lit 10) _ → "va"+ CtxMul _ (Lit 10) _ → "va"+ _ → "vier"+ )+ , (5, \c → case c of+ CtxAdd _ (Lit 10) _ → "fuff"+ CtxMul _ (Lit 10) _ → "fuff"+ _ → "fimf"+ )+ , (6, \c → case c of+ CtxAdd _ (Lit 10) _ → "sech"+ CtxMul _ (Lit 10) _ → "sech"+ _ → "sex"+ )+ , (7, const "siwwe")+ , (8, const "acht")+ , (9, const "nein")+ , (10, \c → case c of+ CtxAdd _ (Lit _) _ → "zeh"+ CtxMul _ (Lit 3) _ → "ssich"+ CtxMul R (Lit n) _ | n ≤ 3 → "sich"+ | otherwise → "zich"+ _ → "zehe"+ )+ , (11, const "elf")+ , (12, const "zwelf")+ , (100, const "hunnert")+ , (1000, const "dausend")+ ]+
+ src/Text/Numeral/Language/PL.hs view
@@ -0,0 +1,165 @@+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-}++{-|+[@ISO639-1@] pl++[@ISO639-2@] pol++[@ISO639-3@] pol++[@Native name@] język polski++[@English name@] Polish+-}++module Text.Numeral.Language.PL+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds+ ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( otherwise )+import "base" Data.Function ( ($), const, fix )+import "base" Data.Maybe ( Maybe(Just) )+import "base" Prelude ( Integral, (-), negate )+import "base-unicode-symbols" Data.Eq.Unicode ( (≡) )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.Ord.Unicode ( (≥), (≤) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )++-------------------------------------------------------------------------------+-- PL+-------------------------------------------------------------------------------++entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "pl"+ , entIso639_2 = ["pol"]+ , entIso639_3 = Just "pol"+ , entNativeNames = ["język polski"]+ , entEnglishName = Just "Polish"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ }++-- | liczebniki główne+cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ )+ ⇒ α → β+struct = pos+ $ fix+ $ findRule ( 0, lit )+ [ ( 11, add 10 L )+ , ( 20, step 10 10 R L)+ , ( 100, step 100 10 R L)+ , (1000, step 1000 1000 R L)+ ]+ (dec 6 - 1)+ `combine` pelletierScale R L BN.rule++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr = render defaultRepr+ { reprValue = \_ n → M.lookup n syms+ , reprScale = BN.pelletierRepr (quantityRepr "ilion" "iliony" "ilionów")+ (quantityRepr "iliard" "iliardy" "iliardów")+ []+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ }+ where+ (Lit n ⊞ Lit 10) _ | n ≤ 9 = ""+ (_ ⊞ _ ) _ = " "++ (_ ⊡ Lit 10 ) _ = ""+ (_ ⊡ Lit 100) _ = ""+ (_ ⊡ _ ) _ = " "++ quantityRepr ∷ Text → Text → Text → BN.PostfixRepr i+ quantityRepr s p1 p2 _ ctx =+ case ctx of+ CtxMul _ (Lit 1) _ → s+ CtxMul _ (Lit n) _ | n ≤ 4 → p1+ CtxMul {} → p2+ _ → s++ syms =+ M.fromList+ [ (0, const "zero")+ , (1, \c → case c of+ CtxAdd _ (Lit 10) _ → "jede"+ _ → "jeden"+ )+ , (2, \c → case c of+ CtxMul _ (Lit 100) _ → "dwie"+ _ → "dwa"+ )+ , (3, const "trzy")+ , (4, \c → case c of+ CtxAdd _ (Lit 10) _ → "czter"+ CtxMul _ (Lit 10) _ → "czter"+ _ → "cztery"+ )+ , (5, \c → case c of+ CtxAdd _ (Lit 10) _ → "pięt"+ _ → "pięć"+ )+ , (6, \c → case c of+ CtxAdd _ (Lit 10) _ → "szes"+ _ → "sześć"+ )+ , (7, const "siedem")+ , (8, const "osiem")+ , (9, \c → case c of+ CtxAdd _ (Lit 10) _ → "dziewięt"+ _ → "dziewięć"+ )+ , (10, \c → case c of+ CtxAdd R (Lit n) _ | n ≤ 9 → "naście"+ CtxMul R (Lit n) _+ | n ≡ 2 → "dzieścia"+ | n ≥ 5 → "dziesiąt"+ | otherwise → "dzieści"+ _ → "dziesięć"+ )+ , (100, \c → case c of+ CtxMul _ (Lit n) _+ | n ≡ 2 → "ście"+ | n ≤ 4 → "sta"+ | n ≤ 9 → "set"+ _ → "sto"+ )+ , (1000, \c → case c of+ CtxMul _ (Lit n) _ | n ≤ 4 → "tysiące"+ CtxMul {} → "tysięcy"+ _ → "tysiąc"+ )+ ]
src/Text/Numeral/Language/PT.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] pt@@ -17,8 +17,16 @@ -} module Text.Numeral.Language.PT- ( cardinal- , struct+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ , ordinal+ -- * Structure+ , cardinal_struct+ , ordinal_struct+ -- * Bounds+ , bounds ) where -------------------------------------------------------------------------------@@ -28,36 +36,59 @@ import "base" Data.Bool ( otherwise ) import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid ) import "base" Data.Ord ( (<) )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-), Integer )+import "base" Prelude ( Integral, (-), negate ) import "base-unicode-symbols" Data.Eq.Unicode ( (≡) ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Data.List.Unicode ( (∉) )+import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) ) import "base-unicode-symbols" Data.Ord.Unicode ( (≤) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.BigNum as BN-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) ------------------------------------------------------------------------------- -- PT ------------------------------------------------------------------------------- --- Sources:--- http://www.sonia-portuguese.com/text/numerals.htm--- http://www.smartphrase.com/Portuguese/po_numbers_voc.shtml+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "pt"+ , entIso639_2 = ["por"]+ , entIso639_3 = Just "por"+ , entNativeNames = ["Português"]+ , entEnglishName = Just "Portuguese"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = cardinal_struct+ }+ , entOrdinal = Just Conversion+ { toNumeral = ordinal+ , toStructure = ordinal_struct+ }+ } -cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (G.Feminine i, G.Masculine i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ cardinal_struct -struct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β+ordinal ∷ (G.Feminine i, G.Masculine i, G.Singular i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+ordinal inf = ordinalRepr inf ∘ ordinal_struct++cardinal_struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ , E.Inflection β, G.Masculine (E.Inf β) ) ⇒ α → β-struct = pos $ fix $ rule `combine` shortScale R L BN.rule+cardinal_struct = pos $ fix $ rule `combine` shortScale1_pt where rule = findRule ( 0, lit ) [ ( 11, add 10 L )@@ -66,11 +97,41 @@ , ( 100, step 100 10 R L) , (1000, step 1000 1000 R L) ]- (dec 6 - 1)+ (dec 6 - 1) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+ordinal_struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ , E.Inflection β, G.Masculine (E.Inf β)+ )+ ⇒ α → β+ordinal_struct = pos $ fix $ rule `combine` shortScale1_pt+ where+ rule = findRule ( 0, lit )+ [ ( 11, add 10 R )+ , ( 20, mul 10 R L)+ , ( 100, step 100 10 R L)+ , (1000, step 1000 1000 R L)+ ]+ (dec 6 - 1)++-- | Like 'shortScale1' with the difference that all scale elements+-- are masculine.+shortScale1_pt ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Add β, E.Mul β, E.Scale β+ , E.Inflection β, G.Masculine (E.Inf β)+ )+ ⇒ Rule α β+shortScale1_pt = mulScale1_es 3 3 R L BN.rule+ where+ mulScale1_es = mulScale_ $ \f m s _ → masculineMul (f m) s+ masculineMul x y = E.inflection (G.masculine) $ E.mul x y++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr ∷ (G.Feminine i) ⇒ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \inf n → M.lookup n (syms inf) , reprScale = shortScaleRepr , reprAdd = Just (⊞) , reprMul = Just (⊡)@@ -88,18 +149,20 @@ (_ ⊡ Lit 100) _ = "" (_ ⊡ _ ) _ = " " - syms =+ syms inf = M.fromList [ (0, const "zero") , (1, \c → case c of- CtxAdd _ (Lit 10) _ → "on"- _ → "um"+ CtxAdd _ (Lit 10) _ → "on"+ _ | G.isFeminine inf → "uma"+ | otherwise → "um" ) , (2, \c → case c of CtxAdd _ (Lit 10) _ → "do" CtxMul _ (Lit 10) _ → "vin" CtxMul _ (Lit 100) _ → "duz"- _ → "dois"+ _ | G.isFeminine inf → "duas"+ | otherwise → "dois" ) , (3, \c → case c of CtxAdd _ (Lit 10) _ → "tre"@@ -141,19 +204,105 @@ _ → "dez" ) , (100, \c → case c of- CtxAdd {} → "cento"+ CtxAdd {} → "cento" CtxMul _ (Lit n) _- | n ≤ 3 → "entos"- | n ≡ 4 → "centos"- | n ≡ 5 → "hentos"- | otherwise → "centos"- _ → "cem"+ | n ≤ 3 → if G.isFeminine inf then "entas" else "entos"+ | n ≡ 5 → if G.isFeminine inf then "hentas" else "hentos"+ | n ≤ 9 → if G.isFeminine inf then "centas" else "centos"+ | otherwise → "cem"+ _ → "cem" ) , (1000, const "mil") ] -shortScaleRepr ∷ (IsString s, Monoid s)- ⇒ Integer → Integer → Exp → Ctx Exp → Maybe s+ordinalRepr ∷ (G.Feminine i, G.Singular i) ⇒ i → Exp i → Maybe Text+ordinalRepr = render defaultRepr+ { reprValue = \inf n → M.lookup n (syms inf)+ , reprScale = shortScaleRepr+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprNeg = Just $ \_ _ → "menos "+ }+ where+ (Lit _ ⊞ Lit 10) _ = ""+ (_ ⊞ _ ) _ = " "++ (_ ⊡ Lit 10 ) _ = ""+ (_ ⊡ Lit 100) _ = ""+ (_ ⊡ _ ) _ = " "++ syms inf =+ M.fromList+ [ (0, const "zero")+ , (1, \c → case c of+ _ → "primeir" ⊕ postFix+ )+ , (2, \c → case c of+ CtxMul _ (Lit 10) _ → "vi"+ CtxMul _ (Lit 100) _ → "du"+ _ → "segund" ⊕ postFix+ )+ , (3, \c → case c of+ CtxMul _ (Lit 10) _ → "tri"+ CtxMul _ (Lit 100) _ → "tre"+ _ → "terceir" ⊕ postFix+ )+ , (4, \c → case c of+ CtxMul _ (Lit 10) _ → "quadra"+ CtxMul _ (Lit 100) _ → "quadrin"+ _ → "quart" ⊕ postFix+ )+ , (5, \c → case c of+ CtxMul _ (Lit 10) _ → "qüinqua"+ CtxMul _ (Lit 100) _ → "qüin"+ _ → "quint" ⊕ postFix+ )+ , (6, \c → case c of+ CtxMul _ (Lit 10) _ → "sexa"+ CtxMul _ (Lit 100) _ → "sex"+ _ → "sext" ⊕ postFix+ )+ , (7, \c → case c of+ CtxMul _ (Lit 10) _ → "septua"+ CtxMul _ (Lit 100) _ → "setin"+ _ → "sétim" ⊕ postFix+ )+ , (8, \c → case c of+ CtxMul _ (Lit 10) _ → "octo"+ CtxMul _ (Lit 100) _ → "octin"+ _ → "oitav" ⊕ postFix+ )+ , (9, \c → case c of+ CtxMul _ (Lit 10) _ → "nona"+ CtxMul _ (Lit 100) _ → "non"+ _ → "non" ⊕ postFix+ )+ , (10, \c → case c of+ CtxAdd R (Lit _) _ → "ze"+ CtxMul R (Lit _) _+ | isOutside R c → "gésim" ⊕ postFix+ | otherwise → "gésimo"+ _ | isOutside R c → "décim" ⊕ postFix+ | otherwise → "décimo"+ )+ , (100, \c → case c of+ CtxAdd {} → "cento"+ CtxMul _ (Lit n) _+ | n ∉ [2,3,6] → "gentésim" ⊕ postFix+ _ → "centésim" ⊕ postFix+ )+ , (1000, const $ "milésim" ⊕ postFix)+ ]+ where+ postFix = if G.isFeminine inf+ then if G.isSingular inf+ then "a"+ else "as"+ else if G.isSingular inf+ then "o"+ else "os"++shortScaleRepr ∷ i → ℤ → ℤ → Exp i → Ctx (Exp i) → Maybe Text shortScaleRepr =- BN.scaleRepr "ilhão" "ilhões"+ BN.scaleRepr (BN.quantityName "ilhão" "ilhões") [(4, BN.forms "quatr" "quator" "quator" "quatra" "quatri")]
src/Text/Numeral/Language/RU.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] ru@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.RU- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -28,37 +33,43 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid ) import "base" Data.Ord ( (<), (>) )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-) )+import "base" Prelude ( Integral, (-), negate ) import "base-unicode-symbols" Data.Eq.Unicode ( (≡) ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.Ord.Unicode ( (≤), (≥) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- RU -------------------------------------------------------------------------------- -{--Sources:- http://en.wikibooks.org/wiki/Russian/Numbers- http://russian.speak7.com/russian_numbers.htm- http://learningrussian.net/games_verbs_grammar3.php- http://www.waytorussia.net/WhatIsRussia/Russian/Part1a.html--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "ru"+ , entIso639_2 = ["rus"]+ , entIso639_3 = Just "rus"+ , entNativeNames = ["Русский язык"]+ , entEnglishName = Just "Russian"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β) ⇒ α → β-struct = pos - $ fix +struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β) ⇒ α → β+struct = pos+ $ fix $ findRule ( 0, lit ) [ ( 11, add 10 L ) , ( 20, mul 10 R L )@@ -70,9 +81,12 @@ ] (dec 6 - 1) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 6 - 1 in (negate x, x)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just (⊞) , reprMul = Just (⊡) , reprNeg = Just $ \_ _ → "минус "
src/Text/Numeral/Language/SCO.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] -@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.SCO- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -28,28 +33,36 @@ import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) ------------------------------------------------------------------------------- -- SCO ------------------------------------------------------------------------------- -{--Sources:- http://www.sf.airnet.ne.jp/~ts/language/number/scots.html--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_2 = ["sco"]+ , entIso639_3 = Just "sco"+ , entNativeNames = ["Scots"]+ , entEnglishName = Just "Scots"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ α → β+struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ findRule ( 1, lit )@@ -59,9 +72,12 @@ ] 100 -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (1, 100)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just (⊞) , reprMul = Just $ \_ _ _ → "" }
src/Text/Numeral/Language/SV.hs view
@@ -1,8 +1,8 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] sv@@ -17,8 +17,15 @@ -} module Text.Numeral.Language.SV- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ , ordinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -26,63 +33,124 @@ -- Imports ------------------------------------------------------------------------------- +import "base" Data.Bool ( otherwise ) import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-), Integer )+import "base" Prelude ( Num, Integral, (-), div, negate, even ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.BigNum as BN-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import "this" Text.Numeral.Misc ( dec, intLog )+import "this" Text.Numeral.Entry+import "this" Text.Numeral.Render.Utils ( addCtx, mulCtx, outsideCtx )+import "text" Data.Text ( Text ) ------------------------------------------------------------------------------- -- SV ------------------------------------------------------------------------------- -cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "sv"+ , entIso639_2 = ["swe"]+ , entIso639_3 = Just "swe"+ , entNativeNames = ["svenska"]+ , entEnglishName = Just "Swedish"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ , entOrdinal = Just Conversion+ { toNumeral = ordinal+ , toStructure = struct+ }+ } -struct ∷ ( Integral α, C.Scale α- , C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β, C.Scale β+cardinal ∷ (G.Common i, G.Neuter i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++ordinal ∷ (G.Common i, G.Neuter i, Integral α, E.Scale α)+ ⇒ i → α → Maybe Text+ordinal inf = ordinalRepr inf ∘ struct++struct ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β+ , E.Inflection β, G.Common (E.Inf β) ) ⇒ α → β-struct = pos $ fix $ rule `combine` pelletierScale R L BN.rule+struct = pos $ fix $ rule `combine` pelletierScale1_sv where rule = findRule ( 0, lit ) [ ( 13, add 10 L ) , ( 20, lit ) , ( 21, add 20 R ) , ( 30, mul 10 R L)- , ( 100, step 100 10 R L)- , (1000, step 1000 1000 R L)+ , ( 100, step1 100 10 R L)+ , (1000, step1 1000 1000 R L) ] (dec 6 - 1) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+-- | Like 'pelletierScale1' with the difference that all scale+-- elements are of the common gender.+pelletierScale1_sv ∷ ( Integral α, E.Scale α+ , E.Unknown β, E.Lit β, E.Add β, E.Mul β, E.Scale β+ , E.Inflection β, G.Common (E.Inf β)+ )+ ⇒ Rule α β+pelletierScale1_sv =+ conditional (\n → even $ intLog n `div` 3)+ (mulScale1_sv 6 0 R L BN.rule)+ (mulScale1_sv 6 3 R L BN.rule)+ where+ mulScale1_sv = mulScale_ $ \f m s _ → commonMul (f m) s+ commonMul m s = E.inflection (G.common) $ E.mul m s++bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr ∷ (G.Common i, G.Neuter i) ⇒ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms- , reprScale = pelletierRepr- , reprAdd = Just $ \_ _ _ → ""- , reprMul = Just $ \_ _ _ → ""+ { reprValue = \ctx n → M.lookup n (syms ctx)+ , reprScale = BN.pelletierRepr+ (BN.quantityName "iljon" "iljoner")+ (BN.quantityName "iljard" "iljarder")+ bigNumSyms+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡) , reprNeg = Just $ \_ _ → "minus " } where- syms =+ (Inflection _ _ ⊞ _) _ = " "+ (_ ⊞ _) _ = ""++ (_ ⊡ Lit 100) CtxEmpty = " "+ (_ ⊡ Lit 1000) CtxEmpty = " "+ (_ ⊡ Scale{}) _ = " "+ (_ ⊡ _) _ = ""++ syms ctx = M.fromList- [ (0, const "noll")- , (1, const "ett")- , (2, const "två")- , (3, ten "tre" "tret" "tret")- , (4, ten "fyra" "fjor" "fyr")- , (5, const "fem")- , (6, const "sex")- , (7, ten "sju" "sjut" "sjut")- , (8, ten "åtta" "ar" "åt")- , (9, ten "nio" "nit" "nit")+ [ (0, const "noll")+ , (1, \c → case c of+ CtxMul _ (Lit 1000) CtxEmpty → "ett"+ CtxMul _ (Lit 1000) _ → "et"+ _ | G.isCommon ctx → "en"+ | G.isNeuter ctx → "ett"+ | otherwise → "?"+ )+ , (2, const "två")+ , (3, addCtx 10 "tret" $ mulCtx 10 "tret" $ const "tre")+ , (4, addCtx 10 "fjor" $ mulCtx 10 "fyr" $ const "fyra")+ , (5, const "fem")+ , (6, const "sex")+ , (7, addCtx 10 "sjut" $ mulCtx 10 "sjut" $ const "sju")+ , (8, addCtx 10 "ar" $ mulCtx 10 "åt" $ const "åtta")+ , (9, addCtx 10 "nit" $ mulCtx 10 "nit" $ const "nio") , (10, \c → case c of CtxAdd {} → "ton" _ → "tio"@@ -94,18 +162,62 @@ , (1000, const "tusen") ] - ten n a m = \c → case c of- CtxAdd _ (Lit 10) _ → a- CtxMul _ (Lit 10) _ → m- _ → n+ordinalRepr ∷ (G.Common i, G.Neuter i) ⇒ i → Exp i → Maybe Text+ordinalRepr = render defaultRepr+ { reprValue = \ctx n → M.lookup n (syms ctx)+ , reprScale = BN.pelletierRepr+ (BN.ordQuantityName "iljon" "iljonte" "iljoner" "iljonte")+ (BN.ordQuantityName "iljard" "iljarte" "iljarder" "iljarte")+ bigNumSyms+ , reprAdd = Just (⊞)+ , reprMul = Just (⊡)+ , reprNeg = Just $ \_ _ → "minus "+ }+ where+ (Inflection _ _ ⊞ _) _ = " "+ (_ ⊞ _) _ = "" -pelletierRepr ∷ (IsString s, Monoid s)- ⇒ Integer → Integer → Exp → Ctx Exp → Maybe s-pelletierRepr =- BN.pelletierRepr- "iljon" "iljon"- "iljard" "iljard"- [ (4, BN.forms "kvadr" "kvattuor" "kvattuor" "kvadra" "kvadri")- , (5, BN.forms "kvint" "kvin" "kvinkva" "kvinkva" "kvin")- , (8, BN.forms "okt" "okto" "okto" "okto" "oktin")- ]+ (_ ⊡ Lit 100) CtxEmpty = " "+ (_ ⊡ Lit 1000) CtxEmpty = " "+ (_ ⊡ Scale{}) _ = " "+ (_ ⊡ _) _ = ""++ syms ctx =+ M.fromList+ [ (0, outsideCtx R "nollte" $ const "noll")+ , (1, outsideCtx R "första"+ $ \c → case c of+ CtxMul _ (Lit 1000) CtxEmpty → "ett"+ CtxMul _ (Lit 1000) _ → "et"+ _ | G.isCommon ctx → "en"+ | G.isNeuter ctx → "ett"+ | otherwise → "?"+ )+ , (2, outsideCtx R "andra" $ const "två")+ , (3, outsideCtx R "tredje" $ addCtx 10 "tret" $ mulCtx 10 "tret" $ const "tre")+ , (4, outsideCtx R "fjärde" $ addCtx 10 "fjor" $ mulCtx 10 "fyr" $ const "fyra")+ , (5, outsideCtx R "femte" $ const "fem")+ , (6, outsideCtx R "sjätte" $ const "sex")+ , (7, outsideCtx R "sjunde" $ addCtx 10 "sjut" $ mulCtx 10 "sjut" $ const "sju")+ , (8, outsideCtx R "åttonde" $ addCtx 10 "ar" $ mulCtx 10 "åt" $ const "åtta")+ , (9, outsideCtx R "nionde" $ addCtx 10 "nit" $ mulCtx 10 "nit" $ const "nio")+ , (10, \c → case c of+ CtxAdd {}+ | isOutside R c → "tonde"+ | otherwise → "ton"+ _ | isOutside R c → "tionde"+ | otherwise → "tio"+ )+ , (11, outsideCtx R "elfte" $ const "elva")+ , (12, outsideCtx R "tolfte" $ const "tolv")+ , (20, outsideCtx R "tjugonde" $ const "tjugo")+ , (100, outsideCtx R "hundrade" $ const "hundra")+ , (1000, outsideCtx R "tusende" $ const "tusen")+ ]++bigNumSyms ∷ (Num α) ⇒ [(α, Ctx (Exp i) → Text)]+bigNumSyms =+ [ (4, BN.forms "kvadr" "kvattuor" "kvattuor" "kvadra" "kvadri")+ , (5, BN.forms "kvint" "kvin" "kvinkva" "kvinkva" "kvin")+ , (8, BN.forms "okt" "okto" "okto" "okto" "oktin")+ ]
src/Text/Numeral/Language/TR.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] tr@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.TR- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -29,43 +34,46 @@ import "base" Data.Bool ( otherwise ) import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString )-import "base" Prelude ( Integral, (-), divMod, Integer )+import "base" Prelude ( Integral, (-), divMod, negate ) import "base-unicode-symbols" Data.Eq.Unicode ( (≡) ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.List.Unicode ( (∉) )-import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ, (⋅) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.Exp.Classes as C-import qualified "numerals-base" Text.Numeral.BigNum as BN ( rule, scaleRepr, forms )+import "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN ( rule, scaleRepr, forms )+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- TR -------------------------------------------------------------------------------- -{---Sources:- http://www.languagesandnumbers.com/how-to-count-in-turkish/en/tur/- http://www.sf.airnet.ne.jp/~ts/language/number/turkish.html- http://www.turkishlanguage.co.uk/seasons.htm#article_15- http://www.turkeytravelplanner.com/details/LanguageGuide/100words_lessons/100Words_10.html- http://en.wikibooks.org/wiki/Turkish/Numbers- http://tr.wikipedia.org/wiki/B%C3%BCy%C3%BCk_say%C4%B1lar%C4%B1n_adlar%C4%B1--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "tr"+ , entIso639_2 = ["tur"]+ , entIso639_3 = Just "tur"+ , entNativeNames = ["Türkçe"]+ , entEnglishName = Just "Turkish"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct -struct ∷ (Integral α, C.Scale α, C.Unknown β, C.Lit β, C.Add β, C.Mul β, C.Scale β)+struct ∷ (Integral α, E.Scale α, E.Unknown β, E.Lit β, E.Add β, E.Mul β, E.Scale β) ⇒ α → β struct = checkPos $ fix $ rule `combine` shortScale1 R L BN.rule -rule ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ Rule α β+rule ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ Rule α β rule = findRule ( 0, lit ) [ ( 11, addToTens ) , ( 100, step 100 10 R L)@@ -73,16 +81,19 @@ ] (dec 6 - 1) -addToTens ∷ (Integral α, C.Lit β, C.Add β) ⇒ Rule α β+addToTens ∷ (Integral α, E.Lit β, E.Add β) ⇒ Rule α β addToTens f n = let (m, r) = n `divMod` 10 tens = m ⋅ 10 in if r ≡ 0 then lit f tens- else f tens `C.add` f r+ else f tens `E.add` f r -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprScale = scaleRepr , reprAdd = Just (⊞) , reprMul = Just $ \_ _ _ → " "@@ -96,10 +107,7 @@ [ (0, const "sıfır") , (1, const "bir") , (2, const "iki")- , (3, \c → case c of- CtxEmpty → "üç"- _ → "uç"- )+ , (3, const "üç") , (4, const "dört") , (5, const "beş") , (6, const "altı")@@ -119,10 +127,9 @@ , (1000, const "bin") ] -scaleRepr ∷ (IsString s, Monoid s)- ⇒ Integer → Integer → Exp → Ctx Exp → Maybe s+scaleRepr ∷ i → ℤ → ℤ → Exp i → Ctx (Exp i) → Maybe Text scaleRepr = BN.scaleRepr- "ilyon" "ilyon"+ (\_ _ → "ilyon") [ (1, BN.forms "m" "an" "an" "" "") , (2, BN.forms "b" "do" "do" "vi" "du") , (3, \c → case c of
src/Text/Numeral/Language/WO.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] wo@@ -17,42 +16,57 @@ -} module Text.Numeral.Language.WO- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where + -------------------------------------------------------------------------------- -- Imports -------------------------------------------------------------------------------- -{--Sources:- http://en.wikipedia.org/wiki/Wolof_language#Numerals- http://www.sf.airnet.ne.jp/~ts/language/number/wolof.html--}- import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) ) import "base-unicode-symbols" Data.Ord.Unicode ( (≥) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- WO -------------------------------------------------------------------------------- -cardinal ∷ (Integral α, C.Scale α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "wo"+ , entIso639_2 = ["wol"]+ , entIso639_3 = Just "wol"+ , entNativeNames = ["Wolof"]+ , entEnglishName = Just "Wolof"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Mul β) ⇒ α → β+cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ findRule ( 0, lit )@@ -66,9 +80,12 @@ ] (dec 6) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (0, dec 6)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just (⊞) , reprMul = Just (⊡) }
src/Text/Numeral/Language/YOR.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] yo@@ -17,8 +16,14 @@ -} module Text.Numeral.Language.YOR- ( cardinal+ ( -- * Language entry+ entry+ -- * Conversions+ , cardinal+ -- * Structure , struct+ -- * Bounds+ , bounds ) where @@ -29,15 +34,16 @@ import "base" Data.Bool ( otherwise ) import "base" Data.Function ( ($), const, fix ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid )-import "base" Data.String ( IsString ) import "base" Prelude ( Integral ) import "base-unicode-symbols" Data.Eq.Unicode ( (≡) ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) ) import qualified "containers" Data.Map as M ( fromList, lookup )-import "numerals-base" Text.Numeral-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) --------------------------------------------------------------------------------@@ -57,10 +63,23 @@ 525 = (200*3) - (20*4) + 5 -} -cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-cardinal = cardinalRepr ∘ struct+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "yo"+ , entIso639_2 = ["yor"]+ , entIso639_3 = Just "yor"+ , entNativeNames = ["èdè Yorùbá"]+ , entEnglishName = Just "Yoruba"+ , entCardinal = Just Conversion+ { toNumeral = cardinal+ , toStructure = struct+ }+ } -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Add β, C.Sub β, C.Mul β) ⇒ α → β+cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+cardinal inf = cardinalRepr inf ∘ struct++struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Sub β, E.Mul β) ⇒ α → β struct = checkPos $ fix $ conditional (≡ -5) lit@@ -96,9 +115,12 @@ ] 1000 -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = (1, 1000)++cardinalRepr ∷ i → Exp i → Maybe Text cardinalRepr = render defaultRepr- { reprValue = \n → M.lookup n syms+ { reprValue = \_ n → M.lookup n syms , reprAdd = Just (⊞) , reprMul = Just (⊡) , reprSub = Just $ \_ _ _ → "dil"
src/Text/Numeral/Language/ZH.hs view
@@ -1,8 +1,7 @@-{-# LANGUAGE NoImplicitPrelude- , OverloadedStrings- , PackageImports- , UnicodeSyntax- #-}+{-# LANGUAGE NoImplicitPrelude #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE PackageImports #-}+{-# LANGUAGE UnicodeSyntax #-} {-| [@ISO639-1@] zh@@ -19,12 +18,22 @@ -} module Text.Numeral.Language.ZH- ( struct+ ( -- * Language entries+ trad_entry+ , simpl_entry+ , finance_trad_entry+ , finance_simpl_entry+ , pinyin_entry+ -- * Conversions , trad_cardinal , simpl_cardinal , finance_trad_cardinal , finance_simpl_cardinal , pinyin_cardinal+ -- * Structure+ , struct+ -- * Bounds+ , bounds ) where @@ -35,52 +44,57 @@ import "base" Data.Bool ( otherwise ) import "base" Data.Function ( id, const, fix, flip, ($) ) import "base" Data.Maybe ( Maybe(Just) )-import "base" Data.Monoid ( Monoid ) import "base" Data.Ord ( (<) )-import "base" Data.String ( IsString )-import "base" Prelude ( Num, Integral, fromIntegral, (-), div, divMod )+import "base" Prelude ( Num, Integral, fromIntegral, (-), div, divMod, negate ) import "base-unicode-symbols" Data.Eq.Unicode ( (≡) ) import "base-unicode-symbols" Data.Function.Unicode ( (∘) ) import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) ) import "base-unicode-symbols" Data.Ord.Unicode ( (≥) ) import qualified "containers" Data.Map as M ( Map, fromList, lookup ) import "containers-unicode-symbols" Data.Map.Unicode ( (∪) )-import "numerals-base" Text.Numeral-import "numerals-base" Text.Numeral.Misc ( dec )-import qualified "numerals-base" Text.Numeral.Exp.Classes as C+import "this" Text.Numeral+import qualified "this" Text.Numeral.Exp as E+import "this" Text.Numeral.Grammar ( Inflection )+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text ) -------------------------------------------------------------------------------- -- ZH -------------------------------------------------------------------------------- -{--Sources:- http://www.sf.airnet.ne.jp/~ts/language/number/mandarin.html--}+entry ∷ Entry+entry = emptyEntry+ { entIso639_1 = Just "zh"+ , entIso639_2 = ["chi", "zho"]+ , entIso639_3 = Just "cmn"+ , entNativeNames = ["官話"]+ , entEnglishName = Just "Chinese"+ } flipIfR ∷ Side → (α → α → α) → (α → α → α) flipIfR L = id flipIfR R = flip -add0 ∷ (Integral α, C.Lit β, C.Add β) ⇒ α → Rule α β-add0 val f n | n < val `div` 10 = C.lit 0 `C.add` f n+add0 ∷ (Integral α, E.Lit β, E.Add β) ⇒ α → Rule α β+add0 val f n | n < val `div` 10 = E.lit 0 `E.add` f n | otherwise = f n -mulX ∷ (Integral α, C.Lit β, C.Add β, C.Mul β)+mulX ∷ (Integral α, E.Lit β, E.Add β, E.Mul β) ⇒ α → Side → Side → Rule α β mulX val aSide mSide = \f n → let (m, a) = n `divMod` val mval = if m ≡ 1- then C.lit 1 ⊡ C.lit (fromIntegral val)- else f m ⊡ C.lit (fromIntegral val)+ then E.lit 1 ⊡ E.lit (fromIntegral val)+ else f m ⊡ E.lit (fromIntegral val) in if a ≡ 0 then mval- else (flipIfR aSide C.add) (add0 val f a) mval+ else (flipIfR aSide E.add) (add0 val f a) mval where- (⊡) = flipIfR mSide C.mul+ (⊡) = flipIfR mSide E.mul -struct ∷ (Integral α, C.Unknown β, C.Lit β, C.Neg β, C.Add β, C.Mul β) ⇒ α → β+struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β) ⇒ α → β struct = pos $ fix $ findRule (0, lit)@@ -92,9 +106,12 @@ where stepX = mkStep lit1 addX mulX - addX val _ = \f n → C.add (f val) (add0 val f $ n - val)+ addX val _ = \f n → E.add (f val) (add0 val f $ n - val) -cardinalRepr ∷ (Monoid s, IsString s) ⇒ Repr s+bounds ∷ (Integral α) ⇒ (α, α)+bounds = let x = dec 48 - 1 in (negate x, x)++cardinalRepr ∷ Repr i cardinalRepr = defaultRepr { reprAdd = Just $ \_ _ _ → "" , reprMul = Just $ \_ _ _ → ""@@ -105,17 +122,26 @@ -- Traditional Characters -------------------------------------------------------------------------------- -trad_cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-trad_cardinal = trad_cardinalRepr ∘ struct+trad_entry ∷ Entry+trad_entry = entry+ { entVariant = Just "traditional"+ , entCardinal = Just Conversion+ { toNumeral = trad_cardinal+ , toStructure = struct+ }+ } -trad_cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+trad_cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+trad_cardinal inf = trad_cardinalRepr inf ∘ struct++trad_cardinalRepr ∷ i → Exp i → Maybe Text trad_cardinalRepr = render cardinalRepr- { reprValue = \n → M.lookup n trad_syms- , reprNeg = Just $ \_ _ → "負"- }+ { reprValue = \_ n → M.lookup n trad_syms+ , reprNeg = Just $ \_ _ → "負"+ } -trad_syms ∷ (Integral α, IsString s) ⇒ M.Map α (Ctx Exp → s)+trad_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text) trad_syms = M.fromList [ (0, \c → case c of@@ -155,17 +181,26 @@ -- Simplified Characters -------------------------------------------------------------------------------- -simpl_cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-simpl_cardinal = simpl_cardinalRepr ∘ struct+simpl_entry ∷ Entry+simpl_entry = entry+ { entVariant = Just "simplified"+ , entCardinal = Just Conversion+ { toNumeral = simpl_cardinal+ , toStructure = struct+ }+ } -simpl_cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+simpl_cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+simpl_cardinal inf = simpl_cardinalRepr inf ∘ struct++simpl_cardinalRepr ∷ i → Exp i → Maybe Text simpl_cardinalRepr = render cardinalRepr- { reprValue = \n → M.lookup n (simpl_syms ∪ trad_syms)- , reprNeg = Just $ \_ _ → "负"- }+ { reprValue = \_ n → M.lookup n (simpl_syms ∪ trad_syms)+ , reprNeg = Just $ \_ _ → "负"+ } -simpl_syms ∷ (Integral α, IsString s) ⇒ M.Map α (Ctx Exp → s)+simpl_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text) simpl_syms = M.fromList [ (2, \c → case c of@@ -181,17 +216,26 @@ -- Financial Characters (Traditional) -------------------------------------------------------------------------------- -finance_trad_cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-finance_trad_cardinal = finance_trad_cardinalRepr ∘ struct+finance_trad_entry ∷ Entry+finance_trad_entry = entry+ { entVariant = Just "finance traditional"+ , entCardinal = Just Conversion+ { toNumeral = finance_trad_cardinal+ , toStructure = struct+ }+ } -finance_trad_cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+finance_trad_cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+finance_trad_cardinal inf = finance_trad_cardinalRepr inf ∘ struct++finance_trad_cardinalRepr ∷ i → Exp i → Maybe Text finance_trad_cardinalRepr = render cardinalRepr- { reprValue = \n → M.lookup n (finance_trad_syms ∪ trad_syms)- , reprNeg = Just $ \_ _ → "負"- }+ { reprValue = \_ n → M.lookup n (finance_trad_syms ∪ trad_syms)+ , reprNeg = Just $ \_ _ → "負"+ } -finance_trad_syms ∷ (Integral α, IsString s) ⇒ M.Map α (Ctx Exp → s)+finance_trad_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text) finance_trad_syms = M.fromList [ (0, const "零")@@ -216,20 +260,29 @@ -- Financial Characters (Simplified) -------------------------------------------------------------------------------- -finance_simpl_cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-finance_simpl_cardinal = finance_simpl_cardinalRepr ∘ struct+finance_simpl_entry ∷ Entry+finance_simpl_entry = entry+ { entVariant = Just "finance simplified"+ , entCardinal = Just Conversion+ { toNumeral = finance_simpl_cardinal+ , toStructure = struct+ }+ } -finance_simpl_cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+finance_simpl_cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+finance_simpl_cardinal inf = finance_simpl_cardinalRepr inf ∘ struct++finance_simpl_cardinalRepr ∷ i → Exp i → Maybe Text finance_simpl_cardinalRepr = render cardinalRepr- { reprValue = \n → M.lookup n ( finance_simpl_syms- ∪ finance_trad_syms- ∪ trad_syms- )- , reprNeg = Just $ \_ _ → "负"- }+ { reprValue = \_ n → M.lookup n ( finance_simpl_syms+ ∪ finance_trad_syms+ ∪ trad_syms+ )+ , reprNeg = Just $ \_ _ → "负"+ } where- finance_simpl_syms ∷ (Integral α, IsString s) ⇒ M.Map α (Ctx Exp → s)+ finance_simpl_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text) finance_simpl_syms = M.fromList [ (2, const "贰")@@ -243,21 +296,30 @@ -- Pinyin -------------------------------------------------------------------------------- -pinyin_cardinal ∷ (Integral α, Monoid s, IsString s) ⇒ α → Maybe s-pinyin_cardinal = pinyin_cardinalRepr ∘ struct+pinyin_entry ∷ Entry+pinyin_entry = entry+ { entVariant = Just "pinyin"+ , entCardinal = Just Conversion+ { toNumeral = pinyin_cardinal+ , toStructure = struct+ }+ } -pinyin_cardinalRepr ∷ (Monoid s, IsString s) ⇒ Exp → Maybe s+pinyin_cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text+pinyin_cardinal inf = pinyin_cardinalRepr inf ∘ struct++pinyin_cardinalRepr ∷ i → Exp i → Maybe Text pinyin_cardinalRepr = render cardinalRepr- { reprValue = \n → M.lookup n pinyin_syms- , reprNeg = Just $ \_ _ → "fù"- , reprAdd = Just (⊞)- }+ { reprValue = \_ n → M.lookup n pinyin_syms+ , reprNeg = Just $ \_ _ → "fù"+ , reprAdd = Just (⊞)+ } where (Lit 10 ⊞ _) _ = "" (_ ⊞ _) _ = " " - pinyin_syms ∷ (Integral α, IsString s) ⇒ M.Map α (Ctx Exp → s)+ pinyin_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text) pinyin_syms = M.fromList [ (0, const "líng")
+ src/Text/Numeral/Misc.hs view
@@ -0,0 +1,49 @@+{-# LANGUAGE CPP+ , MagicHash+ , NoImplicitPrelude+ , PackageImports+ , UnicodeSyntax+ #-}++module Text.Numeral.Misc where++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral, (^) )+#if __GLASGOW_HASKELL__ >= 702+import "base" Data.Function ( ($) )+import "base" GHC.Exts ( Int(I#) )+import "base" Prelude ( fromIntegral, toInteger )+import "integer-gmp" GHC.Integer.Logarithms ( integerLogBase# )+#else+import "base" Data.Bool ( otherwise )+import "base" Data.Ord ( (<) )+import "base" Prelude ( div, (+), ($!), error )+#endif++--------------------------------------------------------------------------------+-- Misc+--------------------------------------------------------------------------------++-- ^ Raise 10 to some power.+dec ∷ (Integral α) ⇒ α → α+dec = (10 ^)++-- ^ The (base 10) logarithm of an integral value. Note that the+-- result must be able to fit in an ordinary Int value. This means the+-- maximum input value is 10 ^ (maxBound ∷ Int).+intLog ∷ (Integral α) ⇒ α → α+-- GHC >= 7.2.x+#if __GLASGOW_HASKELL__ >= 702+intLog x = fromIntegral $ I# (integerLogBase# 10 (toInteger x))+#else+intLog x | x < 0 = error "intLog: undefined for negative numbers"+ | otherwise = go x 0+ where+ go n acc = case n `div` 10 of+ 0 → acc+ 1 → acc + 1+ q → go q $! acc + 1+#endif
+ src/Text/Numeral/Render.hs view
@@ -0,0 +1,230 @@+{-# LANGUAGE NoImplicitPrelude+ , UnicodeSyntax+ , PackageImports+ , RecordWildCards+ #-}++module Text.Numeral.Render+ ( -- * Rendering numerals+ render+ -- * Representation of numerals+ , Repr(..)+ , ScaleRepr+ , defaultRepr+ -- * Context of expressions+ , Ctx(..)+ , posIndex+ , isOutside+ )+ where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( Bool(False, True), otherwise )+import "base" Data.Eq ( Eq )+import "base" Data.Function ( ($) )+import "base" Data.Functor ( (<$>) )+import "base" Data.Maybe ( Maybe(Nothing, Just) )+import "base" Prelude ( (+) )+import "base" Text.Show ( Show )+import "base-unicode-symbols" Data.Eq.Unicode ( (≡) )+import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ )+import "text" Data.Text ( Text )+import "this" Text.Numeral.Exp.Reified ( Exp(..), Side(L, R) )+++-------------------------------------------------------------------------------+-- Rendering numerals+-------------------------------------------------------------------------------++-- | Renders an expression to a 'Text' value according to a certain+-- representation and inflection.+render ∷ Repr i -- ^ Representation.+ → i -- ^ Initial inflection.+ → Exp i -- ^ The expression to render.+ → Maybe Text+render (Repr {..}) = go CtxEmpty+ where+ go _ _ Unknown = reprUnknown+ go ctx inf (Lit n) = ($ ctx) <$> reprValue inf n+ go ctx inf (Neg x) = do x' ← go (CtxNeg ctx) inf x+ rn ← reprNeg+ rnc ← reprNegCombine+ Just $ rnc (rn x ctx) x' x+ go ctx inf (Add x y) = do x' ← go (CtxAdd L y ctx) inf x+ y' ← go (CtxAdd R x ctx) inf y+ ra ← reprAdd+ rac ← reprAddCombine+ Just $ rac (ra x y ctx) x' x y' y+ go ctx inf (Mul x y) = do x' ← go (CtxMul L y ctx) inf x+ y' ← go (CtxMul R x ctx) inf y+ rm ← reprMul+ rmc ← reprMulCombine+ Just $ rmc (rm x y ctx) x' x y' y+ go ctx inf (Sub x y) = do x' ← go (CtxSub L y ctx) inf x+ y' ← go (CtxSub R x ctx) inf y+ rs ← reprSub+ rsc ← reprSubCombine+ Just $ rsc (rs x y ctx) x' x y' y+ go ctx inf (Frac x y) = do x' ← go (CtxFrac L y ctx) inf x+ y' ← go (CtxFrac R x ctx) inf y+ rf ← reprFrac+ rfc ← reprFracCombine+ Just $ rfc (rf x y ctx) x' x y' y+ go ctx inf (Scale b o r) = reprScale inf b o r ctx+ go ctx inf (Dual x) = go (CtxDual ctx) inf x+ go ctx inf (Plural x) = go (CtxPlural ctx) inf x+ go ctx inf (Inflection f x) = go ctx (f inf) x+++--------------------------------------------------------------------------------+-- Representation of numerals+--------------------------------------------------------------------------------++-- | A representation for numerals.+--+-- A 'Repr' contains all the information on how to render an+-- 'Exp'ression to a 'Text' value.+data Repr i =+ Repr+ { -- | Representation for unknown values.+ reprUnknown ∷ Maybe Text+ -- | Renders a literal value. Not necessarily defined for every+ -- value.+ , reprValue ∷ i → ℤ → Maybe (Ctx (Exp i) → Text)+ -- | Renders a negation. This concerns the negation itself, not+ -- the thing being negated.+ , reprNeg ∷ Maybe (Exp i → Ctx (Exp i) → Text)+ -- | Renders an addition. This concerns the addition itself, not+ -- the things being added. For example: In \"one hundred and+ -- eighty\" this function would be responsible for rendering the+ -- \"and\".+ , reprAdd ∷ Maybe (Exp i → Exp i → Ctx (Exp i) → Text)+ -- | Renders a multiplication. This concerns the multiplication+ -- itself, not the things being multiplied.+ , reprMul ∷ Maybe (Exp i → Exp i → Ctx (Exp i) → Text)+ -- | Renders a subtraction. This concerns the subtraction+ -- itself, not the things being subtracted.+ , reprSub ∷ Maybe (Exp i → Exp i → Ctx (Exp i) → Text)+ -- | Renders a fraction. This concerns the fraction itself, not+ -- the numerator or the denominator.+ , reprFrac ∷ Maybe (Exp i → Exp i → Ctx (Exp i) → Text)+ -- | Renders a step in a scale of large values.+ , reprScale ∷ ScaleRepr i+ -- | Combines a negation and the thing being negated. For+ -- example: this would combine \"minus\" and \"three\" into+ -- \"minus three\".+ , reprNegCombine ∷ Maybe (Text → Text → Exp i → Text)+ -- | Combines an addition and the things being added.+ , reprAddCombine ∷ Maybe (Text → Text → Exp i → Text → Exp i → Text)+ -- | Combines a multiplication and the things being multiplied.+ , reprMulCombine ∷ Maybe (Text → Text → Exp i → Text → Exp i → Text)+ -- | Combines a subtraction and the things being subtracted.+ , reprSubCombine ∷ Maybe (Text → Text → Exp i → Text → Exp i → Text)+ -- | Combines a fraction and the numerator and denominator.+ , reprFracCombine ∷ Maybe (Text → Text → Exp i → Text → Exp i → Text)+ }++-- | Function that renders the representation of a step in a scale of+-- large values. The value represented by the step is 10 ^ (rank *+-- base + offset).+type ScaleRepr i = i+ → ℤ -- ^ Base.+ → ℤ -- ^ Offset.+ → Exp i -- ^ Rank.+ → Ctx (Exp i) -- ^ Rank context.+ → Maybe Text++-- | The default representation.+--+-- Only the combining functions are defined. The rest are either+-- 'Nothing' or always produce 'Nothing'.+defaultRepr ∷ Repr inf+defaultRepr =+ Repr { reprUnknown = Nothing+ , reprValue = \_ _ → Nothing+ , reprNeg = Nothing+ , reprAdd = Nothing+ , reprMul = Nothing+ , reprSub = Nothing+ , reprFrac = Nothing+ , reprScale = \_ _ _ _ _ → Nothing+ , reprNegCombine = Just $ \n x _ → n ⊕ x+ , reprAddCombine = Just $ \a x _ y _ → x ⊕ a ⊕ y+ , reprMulCombine = Just $ \m x _ y _ → x ⊕ m ⊕ y+ , reprSubCombine = Just $ \s x _ y _ → x ⊕ s ⊕ y+ , reprFracCombine = Just $ \f n _ d _ → n ⊕ f ⊕ d+ }+++--------------------------------------------------------------------------------+-- Context of expressions+--------------------------------------------------------------------------------++-- | A context in which an 'Exp'ression appears.+data Ctx α -- | The empty context. Used for top level expressions.+ = CtxEmpty+ -- | Negation context.+ | CtxNeg (Ctx α)+ -- | Addition context.+ | CtxAdd Side α (Ctx α)+ -- | Multiplication context.+ | CtxMul Side α (Ctx α)+ -- | Subtraction context.+ | CtxSub Side α (Ctx α)+ -- | Fraction context.+ | CtxFrac Side α (Ctx α)+ -- | Scale context.+ | CtxScale (Ctx α)+ -- | Dual context.+ | CtxDual (Ctx α)+ -- | Plural context.+ | CtxPlural (Ctx α)+ deriving (Eq, Show)+++posIndex ∷ Ctx α → ℤ+posIndex c = go 0 c+ where+ go ∷ ℤ → Ctx α → ℤ+ go acc CtxEmpty = acc+ go acc (CtxNeg nc) = go acc nc+ go acc (CtxAdd as _ ac) = go (acc + if as ≡ L then -1 else 1) ac+ go acc (CtxMul ms _ mc) = go (acc + if ms ≡ L then -1 else 1) mc+ go acc (CtxSub ss _ sc) = go (acc + if ss ≡ L then -1 else 1) sc+ go acc (CtxFrac fs _ fc) = go (acc + if fs ≡ L then -1 else 1) fc+ go acc (CtxScale sc) = go acc sc+ go acc (CtxDual dc) = go acc dc+ go acc (CtxPlural pc) = go acc pc++-- | Checks whether a context is completely on the outside of an+-- expression, either left or right.+--+-- Given the following expression:+--+-- @+-- 'Add' ('Lit' 1000) ('Add' ('Mul' ('Lit' 2) ('Lit' 100)) ('Add' ('Lit' 4) ('Mul' ('Lit' 3) ('Lit' 10))))+-- @+--+-- On the left we have @'Lit' 1000@ and on the right @'Lit' 10@.+isOutside ∷ Side → Ctx α → Bool+isOutside s c = go c+ where+ go ∷ Ctx α → Bool+ go CtxEmpty = True+ go (CtxNeg nc) = go nc+ go (CtxAdd as _ ac) | as ≡ s = go ac+ | otherwise = False+ go (CtxMul ms _ mc) | ms ≡ s = go mc+ | otherwise = False+ go (CtxSub ss _ sc) | ss ≡ s = go sc+ | otherwise = False+ go (CtxFrac fs _ fc) | fs ≡ s = go fc+ | otherwise = False+ go (CtxScale sc) = go sc+ go (CtxDual dc) = go dc+ go (CtxPlural pc) = go pc
+ src/Text/Numeral/Render/Utils.hs view
@@ -0,0 +1,41 @@+{-# LANGUAGE NoImplicitPrelude+ , PackageImports+ , UnicodeSyntax+ #-}++module Text.Numeral.Render.Utils+ ( addCtx+ , mulCtx+ , outsideCtx+ ) where++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base-unicode-symbols" Data.Eq.Unicode ( (≡) )+import "base-unicode-symbols" Prelude.Unicode ( ℤ )+import "this" Text.Numeral+++--------------------------------------------------------------------------------+-- Utility functions for rendering numerals+--------------------------------------------------------------------------------++addCtx ∷ ℤ → s → (Ctx (Exp i) → s) → Ctx (Exp i) → s+addCtx val match other ctx =+ case ctx of+ CtxAdd _ (Lit n) _ | val ≡ n → match+ _ → other ctx++mulCtx ∷ ℤ → s → (Ctx (Exp i) → s) → Ctx (Exp i) → s+mulCtx val match other ctx =+ case ctx of+ CtxMul _ (Lit n) _ | val ≡ n → match+ _ → other ctx++outsideCtx ∷ Side → s → (Ctx (Exp i) → s) → Ctx (Exp i) → s+outsideCtx side match other ctx =+ if isOutside side ctx+ then match+ else other ctx
+ src/Text/Numeral/Rules.hs view
@@ -0,0 +1,373 @@+{-# LANGUAGE NoImplicitPrelude+ , PackageImports+ , UnicodeSyntax+ #-}++{-|++Rules to convert numbers to an expression language.++-}+module Text.Numeral.Rules+ ( -- * The Rule type+ Rule++ -- * Rule combinators+ , conditional+ , combine+ , mapRule+ , findRule++ -- * Rules+ , unknown++ , lit, lit1++ , pos, checkPos+ , dual, plural+ , inflection++ , add+ , mul, mul1+ , sub++ , mulScale_, mulScale, mulScale1+ , shortScale, longScale, pelletierScale+ , shortScale1, longScale1, pelletierScale1++ , mkStep, step, step1+ ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Bool ( Bool, otherwise )+import "base" Data.Function ( ($), id, const, flip, fix )+import "base" Data.List ( foldr )+import "base" Data.Ord ( Ord, (<), (>) )+import "base" Prelude ( Integral, fromIntegral+ , Num, (-), abs, divMod, div, even+ )+import "base-unicode-symbols" Data.Eq.Unicode ( (≡) )+import "base-unicode-symbols" Data.Function.Unicode ( (∘) )+import "base-unicode-symbols" Prelude.Unicode ( (⋅) )+import "this" Text.Numeral.Exp.Reified ( Side(L, R) )+import "this" Text.Numeral.Misc ( intLog )+import qualified "this" Text.Numeral.Exp as E+import qualified "fingertree" Data.IntervalMap.FingerTree as FT+ ( Interval(Interval)+ , IntervalMap, empty, insert+ , search+ )+++--------------------------------------------------------------------------------+-- The Rule type+--------------------------------------------------------------------------------++-- | A rule on how to convert a number into an expression+-- language. Notice how this type is equal to the type of the '$'+-- operator.+type Rule α β = (α → β) → (α → β)+++--------------------------------------------------------------------------------+-- Rule combinators+--------------------------------------------------------------------------------+++-- | The \'if-then-else\' concept for rules. Applies the first rule if+-- the predicate holds on the input value, otherwise applies the+-- second rule.+conditional ∷ (α → Bool) -- ^ Predicate on input value (\"if\").+ → Rule α β -- ^ Rule to apply when predicate holds (\"then\").+ → Rule α β -- ^ Rule to apply when predicate does not hold (\"else\").+ → Rule α β+conditional p t e = \f n → if p n+ then t f n+ else e f n++-- | Tries to apply the first rule, if that produces an 'E.unknown'+-- value it applies the second rule.+combine ∷ (E.Unknown β)+ ⇒ Rule α β+ → Rule α β+ → Rule α β+combine r1 r2 = \f n → case r1 f n of+ x | E.isUnknown x → r2 f n+ | otherwise → x++-- | Transform a value before it is given to a rule.+mapRule ∷ (α → α) → Rule α β → Rule α β+mapRule g r = \f n → r f (g n)++-- | Chooses which rule to apply to an input value based on a interval+-- list of rules.+findRule ∷ (Ord α, Num α, E.Unknown β)+ ⇒ (α, Rule α β) -- ^ First interval rule.+ → [(α, Rule α β)] -- ^ Interval rule list.+ → α -- ^ Upper bound of the last interval.+ → Rule α β+findRule x xs end = \f n → case FT.search n xm of+ [] → E.unknown+ (_,r):_ → r f n+ where+ xm = mkIntervalMap $ mkIntervalList x xs end+++--------------------------------------------------------------------------------+-- Rules+--------------------------------------------------------------------------------++-- | A rule that always fails to convert a value. It constantly+-- produces the 'E.unknown' value.+--+-- >>> (fix unknown) (3 :: Integer) :: Exp+-- Unknown+unknown ∷ (E.Unknown β) ⇒ Rule α β+unknown _ _ = E.unknown++-- | The literal rule. Converts its argument into a 'E.lit'eral+-- expression.+--+-- >>> lit (fix unknown) (3 :: Integer) :: Exp+-- Lit 3+--+-- In this example lit is applied to the nonsense rule \"'fix'+-- 'unknown'\". Lit ignores that function, which is why we can pass it+-- anything we want, including itself.+--+-- >>> lit (fix undefined) (3 :: Integer) :: Exp+-- Lit 3+-- >>> (fix lit) (3 :: Integer) :: Exp+-- Lit 3+lit ∷ (Integral α, E.Lit β) ⇒ Rule α β+lit = const $ E.lit ∘ fromIntegral++-- | A variant on the 'lit' rule which always multiplies its argument+-- with 1. Useful for languages which have numerals of the form \"one+-- hundred and three\" as opposed to \"hundred and three\".+--+-- >>> lit1 (fix unknown) (3 :: Integer) :: Exp+-- Mul (Lit 1) (Lit 3)+lit1 ∷ (Integral α, E.Lit β, E.Mul β) ⇒ Rule α β+lit1 = const $ \n → E.lit 1 `E.mul` E.lit (fromIntegral n)++-- |+--+-- >>> (pos $ lit $ fix unknown) (3 :: Integer) :: Exp+-- Lit 3+-- >>> (pos $ lit $ fix unknown) (-3 :: Integer) :: Exp+-- Neg (Lit 3)+pos ∷ (Ord α, Num α, E.Lit β, E.Neg β) ⇒ Rule α β+pos f n | n < 0 = E.neg $ f (abs n)+ | n > 0 = f n+ | otherwise = E.lit 0++-- |+--+-- >>> (checkPos $ lit $ fix unknown) (3 :: Integer) :: Exp+-- Lit 3+-- >>> (checkPos $ lit $ fix unknown) (-3 :: Integer) :: Exp+-- Unknown+checkPos ∷ (Ord α, Num α, E.Unknown β, E.Lit β) ⇒ Rule α β+checkPos f n | n < 0 = E.unknown+ | n > 0 = f n+ | otherwise = E.lit 0++-- |+--+-- >>> (dual $ lit $ fix unknown) (3 :: Integer) :: Exp+-- Dual (Lit 3)+dual ∷ (E.Dual β) ⇒ Rule α β+dual = (∘) E.dual++-- |+--+-- >>> (plural $ lit $ fix unknown) (3 :: Integer) :: Exp+-- Plural (Lit 3)+plural ∷ (E.Plural β) ⇒ Rule α β+plural = (∘) E.plural++-- | Changes the inflection of a subexpression.+inflection ∷ (E.Inflection β) ⇒ (E.Inf β → E.Inf β) → Rule α β+inflection changeInf = \f n → E.inflection changeInf $ f n++-- |+--+-- >>> (add 10 L $ lit $ fix unknown) (13 :: Integer) :: Exp+-- Add (Lit 3) (Lit 10)+add ∷ (Num α, E.Add β) ⇒ α → Side → Rule α β+add val s = \f n → (flipIfR s E.add) (f $ n - val) (f val)++-- |+--+-- >>> (mul 10 R L $ lit $ fix unknown) (42 :: Integer) :: Exp+-- Add (Mul (Lit 4) (Lit 10)) (Lit 2)+mul ∷ (Integral α, E.Add β, E.Mul β) ⇒ α → Side → Side → Rule α β+mul val aSide mSide =+ \f n → let (m, a) = n `divMod` val+ mval = (flipIfR mSide E.mul) (f m) (f val)+ in if a ≡ 0+ then mval+ else (flipIfR aSide E.add) (f a) mval++mul1 ∷ (Integral α, E.Lit β, E.Add β, E.Mul β)+ ⇒ α → Side → Side → Rule α β+mul1 val aSide mSide =+ \f n → let (m, a) = n `divMod` val+ mval = if m ≡ 1+ then E.lit 1 ⊡ E.lit (fromIntegral val)+ else f m ⊡ E.lit (fromIntegral val)+ in if a ≡ 0+ then mval+ else (flipIfR aSide E.add) (f a) mval+ where+ (⊡) = flipIfR mSide E.mul++-- |+--+-- >>> (sub 20 $ lit $ fix unknown) (18 :: Integer) :: Exp+-- Sub (Lit 2) (Lit 20)+sub ∷ (Integral α, E.Sub β) ⇒ α → Rule α β+sub val = \f n → E.sub (f $ val - n) (f val)++mkStep ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β)+ ⇒ Rule α β -- ^ lit rule+ → (α → Side → Rule α β) -- ^ add rule+ → (α → Side → Side → Rule α β) -- ^ mul rule+ → α → α → Side → Side → Rule α β+mkStep lr ar mr val r aSide mSide+ f n | n < val = E.unknown+ | n ≡ val = lr f n+ | n < val⋅2 = ar val aSide f n+ | n < val⋅r = mr val aSide mSide f n+ | otherwise = E.unknown++step ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β)+ ⇒ α → α → Side → Side → Rule α β+step = mkStep lit add mul++step1 ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β)+ ⇒ α → α → Side → Side → Rule α β+step1 = mkStep lit1 add mul1++mulScale_ ∷ (Integral α, E.Scale α, E.Unknown β, E.Add β, E.Mul β, E.Scale β)+ ⇒ ( (α → β) -- Parent rule.+ → α -- First multiplication value (not converted).+ → β -- Second multiplication value (scale step,+ -- already converted).+ → Side -- Multiplication side.+ → β+ ) -- ^ Performs the multiplication.+ → α -- ^ Base.+ → α -- ^ Offset.+ → Side -- ^ Add side.+ → Side -- ^ Mul side.+ → Rule α β -- ^ Big num rule.+ → Rule α β+mulScale_ doMul base offset aSide mSide bigNumRule =+ \f n → let rank = (intLog n - offset) `div` base+ base' = fromIntegral base+ offset' = fromIntegral offset+ rank' = fromIntegral rank+ rankExp = (fix bigNumRule) rank+ (m, a) = n `divMod` E.scale base' offset' rank'+ scale' = E.scale base' offset' rankExp+ mval = doMul f m scale' mSide+ in if E.isUnknown rankExp+ then E.unknown+ else if a ≡ 0+ then mval+ else (flipIfR aSide E.add) (f a) mval++mulScale ∷ (Integral α, E.Scale α, E.Unknown β, E.Add β, E.Mul β, E.Scale β)+ ⇒ α -- ^ Base.+ → α -- ^ Offset.+ → Side -- ^ Add side.+ → Side -- ^ Mul side.+ → Rule α β -- ^ Big num rule.+ → Rule α β+mulScale = mulScale_ $ \f m scale' mSide →+ case m of+ 1 → scale'+ _ → (flipIfR mSide E.mul) (f m) scale'++mulScale1 ∷ (Integral α, E.Scale α, E.Unknown β, E.Add β, E.Mul β, E.Scale β)+ ⇒ α -- ^ Base.+ → α -- ^ Offset.+ → Side -- ^ Add side.+ → Side -- ^ Mul side.+ → Rule α β -- ^ Big num rule.+ → Rule α β+mulScale1 = mulScale_ $ \f m scale' mSide → (flipIfR mSide E.mul) (f m) scale'++shortScale ∷ (Integral α, E.Scale α, E.Unknown β, E.Add β, E.Mul β, E.Scale β)+ ⇒ Side -- ^ Add side.+ → Side -- ^ Mul side.+ → Rule α β -- ^ Big num rule.+ → Rule α β+shortScale = mulScale 3 3++shortScale1 ∷ (Integral α, E.Scale α, E.Unknown β, E.Add β, E.Mul β, E.Scale β)+ ⇒ Side -- ^ Add side.+ → Side -- ^ Mul side.+ → Rule α β -- ^ Big num rule.+ → Rule α β+shortScale1 = mulScale1 3 3++longScale ∷ (Integral α, E.Scale α, E.Unknown β, E.Add β, E.Mul β, E.Scale β)+ ⇒ Side -- ^ Add side.+ → Side -- ^ Mul side.+ → Rule α β -- ^ Big num rule.+ → Rule α β+longScale = mulScale 6 0++longScale1 ∷ (Integral α, E.Scale α, E.Unknown β, E.Add β, E.Mul β, E.Scale β)+ ⇒ Side -- ^ Add side.+ → Side -- ^ Mul side.+ → Rule α β -- ^ Big num rule.+ → Rule α β+longScale1 = mulScale1 6 0++pelletierScale ∷ (Integral α, E.Scale α, E.Unknown β, E.Add β, E.Mul β, E.Scale β)+ ⇒ Side -- ^ Add side.+ → Side -- ^ Mul side.+ → Rule α β -- ^ Big num rule.+ → Rule α β+pelletierScale aSide mSide bigNumRule =+ conditional (\n → even $ intLog n `div` 3)+ (mulScale 6 0 aSide mSide bigNumRule)+ (mulScale 6 3 aSide mSide bigNumRule)++pelletierScale1 ∷ (Integral α, E.Scale α, E.Unknown β, E.Add β, E.Mul β, E.Scale β)+ ⇒ Side -- ^ Add side.+ → Side -- ^ Mul side.+ → Rule α β -- ^ Big num rule.+ → Rule α β+pelletierScale1 aSide mSide bigNumRule =+ conditional (\n → even $ intLog n `div` 3)+ (mulScale1 6 0 aSide mSide bigNumRule)+ (mulScale1 6 3 aSide mSide bigNumRule)+++--------------------------------------------------------------------------------+-- Miscellaneous+--------------------------------------------------------------------------------++flipIfR ∷ Side → (α → α → α) → (α → α → α)+flipIfR L = id+flipIfR R = flip++mkIntervalList ∷ (Num a) ⇒ (a, b) → [(a, b)] → a → [((a, a), b)]+mkIntervalList (k, r) krs end = go k r krs+ where+ go k1 r1 [] = [((k1, end), r1)]+ go k1 r1 ((k2, r2):xs) = ((k1, k2-1), r1) : go k2 r2 xs++mkIntervalMap ∷ (Ord v) ⇒ [((v, v), α)] → FT.IntervalMap v α+mkIntervalMap = foldr ins FT.empty+ where ins ((lo, hi), n) = FT.insert (FT.Interval lo hi) n+