packages feed

numerals 0.4 → 0.4.1

raw patch · 232 files changed

+25216/−18644 lines, 232 filesdep +criteriondep +integer-simpledep −base-unicode-symbolsdep −containers-unicode-symbolsdep ~HUnitdep ~QuickCheckdep ~base

Dependencies added: criterion, integer-simple

Dependencies removed: base-unicode-symbols, containers-unicode-symbols

Dependency ranges changed: HUnit, QuickCheck, base, integer-gmp, test-framework, test-framework-hunit, test-framework-quickcheck2, text

Files

README.markdown view
@@ -1,13 +1,13 @@ Numerals ======== -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.+Convert numbers to number words in a number of languages. Each+language has its own module. The module name is based on the ISO 639-3+code for that language. 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.  - Cardinal numerals 
numerals.cabal view
@@ -1,6 +1,6 @@ name:          numerals-version:       0.4-cabal-version: >= 1.8+version:       0.4.1+cabal-version: >= 1.9.2 build-type:    Simple stability:     experimental author:        Roel van Dijk <vandijk.roel@gmail.com>, Bas van Dijk <v.dijk.bas@gmail.com>@@ -13,75 +13,16 @@ category:      Natural Language Processing, Numerical, Text synopsis:      Convert numbers to number words 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' 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. First-  some English number names, both British and US variants:-  .-  >>> import qualified Text.Numeral.Language.EN as EN-  >>> EN.uk_cardinal defaultInflection 123 :: Maybe Text-  Just "one hundred and twenty-three"-  >>> 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 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 defaultInflection (-3) :: Maybe Text-  Nothing-  .-  Some languages have multiple scripts and methods for writing number-  names. Take Chinese for example, which can be written using Han-  characters or transcribed to the Latin script using Pinyin.-  .-  Traditional Chinese characters:-  .-  >>> import qualified Text.Numeral.Language.ZH as ZH-  >>> ZH.trad_cardinal defaultInflection 123456 :: Maybe Text-  Just "十二萬三千四百五十六"-  .-  Simplified characters for use in financial contexts:-  .-  >>> ZH.finance_simpl_cardinal defaultInflection 123456 :: Maybe Text-  Just "拾贰万参仟肆伯伍拾陆"-  .-  Transcribed using Pinyin:-  .-  >>> 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-  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 :: Integer-  123-  >>> import Text.Numeral-  >>> NL.struct 123 :: Exp-  Add (Lit 100) (Add (Lit 3) (Mul (Lit 2) (Lit 10)))-  .-  Compare with:-  .-  >>> NL.cardinal defaultInflection 123 :: Maybe Text-  Just "honderddrieëntwintig"-  .-  100 (honderd) + (3 (drie) + (ën) 2 (twin) * 10 (tig))+  Convert numbers to number words in a number of languages. Each language has+  its own module. The module name is based on the ISO 639-3 code for that+  language. 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. +  See the "Text.Numeral" module for information on how to use this library.+ extra-source-files: ./README.markdown  -------------------------------------------------------------------------------@@ -92,72 +33,88 @@  ------------------------------------------------------------------------------- +flag integer-simple+  description: Use the integer-simple package instead of integer-gmp+  default:     False++-------------------------------------------------------------------------------+ library   hs-source-dirs: src   ghc-options: -Wall -  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-               , fingertree                 >= 0.0.1   && < 0.2-               , text                       >= 0.11    && < 1.2+  build-depends: base       >= 3.0.3.1 && < 5+               , containers >= 0.4     && < 0.6+               , fingertree >= 0.0.1   && < 0.2+               , text       >= 0.11    && < 1.3 -  if impl(ghc >= 7.2.1)-    build-depends: integer-gmp >= 0.3 && < 0.6+  -- if impl(ghc >= 7.2.1)+  --   build-depends: integer-gmp >= 0.3 && < 1.1 +  if flag(integer-simple)+      build-depends: integer-simple+      CPP-options: -DINTEGER_SIMPLE+  else+      build-depends: integer-gmp+   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.AFR                  , Text.Numeral.Language.AMP-                 , Text.Numeral.Language.BG+                 , Text.Numeral.Language.BUL+                 , Text.Numeral.Language.CES                  , 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.CRO+                 , Text.Numeral.Language.DEU+                 , Text.Numeral.Language.ENG+                 , Text.Numeral.Language.EPO+                 , Text.Numeral.Language.FIN+                 , Text.Numeral.Language.FRA                  , Text.Numeral.Language.FUR+                 , Text.Numeral.Language.GLV                  , Text.Numeral.Language.GSW-                 , Text.Numeral.Language.GV-                 , Text.Numeral.Language.HE+                 , Text.Numeral.Language.HEB                  , Text.Numeral.Language.HOP-                 , Text.Numeral.Language.IT-                 , Text.Numeral.Language.JA-                 , Text.Numeral.Language.LA+                 , Text.Numeral.Language.ITA+                 , Text.Numeral.Language.JPN+                 , Text.Numeral.Language.LAT                  , Text.Numeral.Language.LLD-                 , Text.Numeral.Language.MG-                 , Text.Numeral.Language.NL-                 , Text.Numeral.Language.NO+                 , Text.Numeral.Language.MLG+                 , Text.Numeral.Language.NEN+                 , Text.Numeral.Language.NLD+                 , Text.Numeral.Language.NOB                  , Text.Numeral.Language.NQM-                 , Text.Numeral.Language.OJ+                 , Text.Numeral.Language.OJI                  , Text.Numeral.Language.PDC-                 , Text.Numeral.Language.PL-                 , Text.Numeral.Language.PT-                 , Text.Numeral.Language.RU+                 , Text.Numeral.Language.POL+                 , Text.Numeral.Language.POR+                 , Text.Numeral.Language.RUS                  , Text.Numeral.Language.SCO-                 , Text.Numeral.Language.SV-                 , Text.Numeral.Language.TR-                 , Text.Numeral.Language.WO+                 , Text.Numeral.Language.SPA+                 , Text.Numeral.Language.SWE+                 , Text.Numeral.Language.TUR+                 , Text.Numeral.Language.WOL                  , Text.Numeral.Language.YOR-                 , Text.Numeral.Language.ZH-  other-modules: Text.Numeral.Render.Utils+                 , Text.Numeral.Language.ZHO+  other-modules: Math.NumberTheory.Logarithms+               , GHC.Integer.Logarithms.Compat+               , Text.Numeral.Render.Utils +  extensions: ScopedTypeVariables+            , PackageImports+            , OverloadedStrings + -------------------------------------------------------------------------------  test-suite test-numerals@@ -169,85 +126,136 @@                 , Text.Numeral.Language.ACH.TestData                , Text.Numeral.Language.ADY.TestData-               , Text.Numeral.Language.AF.TestData+               , Text.Numeral.Language.AFR.TestData                , Text.Numeral.Language.AMP.TestData                , Text.Numeral.Language.ARI.TestData+               , Text.Numeral.Language.ARN.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.AZE.TestData+               , Text.Numeral.Language.BAK.TestData+               , Text.Numeral.Language.BAM.TestData+               , Text.Numeral.Language.BUL.TestData                , Text.Numeral.Language.CAF.TestData+               , Text.Numeral.Language.CAR.TestData+               , Text.Numeral.Language.CAT.TestData                , Text.Numeral.Language.CBK.TestData+               , Text.Numeral.Language.CES.TestData                , Text.Numeral.Language.CHN.TestData                , Text.Numeral.Language.CHR.TestData+               , Text.Numeral.Language.CKU.TestData                , Text.Numeral.Language.CLM.TestData-               , Text.Numeral.Language.CO.TestData+               , Text.Numeral.Language.CRO.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.COS.TestData+               , Text.Numeral.Language.CRG.TestData+               , Text.Numeral.Language.CYM.TestData+               , Text.Numeral.Language.DEU.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.EKK.TestData+               , Text.Numeral.Language.EMI.TestData+               , Text.Numeral.Language.ENG.TestData+               , Text.Numeral.Language.EPO.TestData+               , Text.Numeral.Language.FAO.TestData+               , Text.Numeral.Language.FIN.TestData+               , Text.Numeral.Language.FRA.TestData+               , Text.Numeral.Language.FRA_JER.TestData+               , Text.Numeral.Language.FRR.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.GLG.TestData+               , Text.Numeral.Language.GLV.TestData                , Text.Numeral.Language.GSW.TestData-               , Text.Numeral.Language.GV.TestData                , Text.Numeral.Language.HAI.TestData-               , Text.Numeral.Language.HE.TestData+               , Text.Numeral.Language.HAT.TestData+               , Text.Numeral.Language.HEB.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.HRV.TestData+               , Text.Numeral.Language.HUN.TestData+               , Text.Numeral.Language.HUP.TestData+               , Text.Numeral.Language.HUR.TestData+               , Text.Numeral.Language.HYE.TestData+               , Text.Numeral.Language.IBO.TestData+               , Text.Numeral.Language.IND.TestData+               , Text.Numeral.Language.INH.TestData+               , Text.Numeral.Language.ITA.TestData+               , Text.Numeral.Language.IZH.TestData+               , Text.Numeral.Language.JPN.TestData                , Text.Numeral.Language.KAP.TestData                , Text.Numeral.Language.KEA.TestData-               , Text.Numeral.Language.LA.TestData+               , Text.Numeral.Language.KLB.TestData+               , Text.Numeral.Language.KMR.TestData+               , Text.Numeral.Language.KRL.TestData+               , Text.Numeral.Language.LAT.TestData+               , Text.Numeral.Language.LAV.TestData+               , Text.Numeral.Language.LIN.TestData+               , Text.Numeral.Language.LIT.TestData+               , Text.Numeral.Language.LIV.TestData                , Text.Numeral.Language.LLD.TestData-               , Text.Numeral.Language.MG.TestData+               , Text.Numeral.Language.LMO.TestData+               , Text.Numeral.Language.LTZ.TestData+               , Text.Numeral.Language.MIC.TestData+               , Text.Numeral.Language.MIN.TestData+               , Text.Numeral.Language.MLG.TestData+               , Text.Numeral.Language.MNK.TestData                , Text.Numeral.Language.MOH.TestData-               , Text.Numeral.Language.NL.TestData-               , Text.Numeral.Language.NO.TestData+               , Text.Numeral.Language.NAV.TestData+               , Text.Numeral.Language.NEE.TestData+               , Text.Numeral.Language.NEN.TestData+               , Text.Numeral.Language.NLD.TestData+               , Text.Numeral.Language.NOB.TestData                , Text.Numeral.Language.NQM.TestData-               , Text.Numeral.Language.OJ.TestData+               , Text.Numeral.Language.OCI.TestData+               , Text.Numeral.Language.OJI.TestData+               , Text.Numeral.Language.ONE.TestData+               , Text.Numeral.Language.ORM.TestData                , Text.Numeral.Language.PAA.TestData                , Text.Numeral.Language.PDC.TestData-               , Text.Numeral.Language.PL.TestData-               , Text.Numeral.Language.PT.TestData+               , Text.Numeral.Language.POL.TestData+               , Text.Numeral.Language.POR.TestData                , Text.Numeral.Language.RMN_DZA.TestData-               , Text.Numeral.Language.RO.TestData-               , Text.Numeral.Language.RU.TestData+               , Text.Numeral.Language.RMY_KAL.TestData+               , Text.Numeral.Language.RON.TestData+               , Text.Numeral.Language.RUS.TestData                , Text.Numeral.Language.SCO.TestData-               , Text.Numeral.Language.SV.TestData+               , Text.Numeral.Language.SME.TestData+               , Text.Numeral.Language.SMN.TestData+               , Text.Numeral.Language.SPA.TestData+               , Text.Numeral.Language.SWE.TestData                , Text.Numeral.Language.TAR.TestData-               , Text.Numeral.Language.TR.TestData-               , Text.Numeral.Language.WO.TestData+               , Text.Numeral.Language.TGS.TestData+               , Text.Numeral.Language.TUR.TestData+               , Text.Numeral.Language.WMW.TestData+               , Text.Numeral.Language.WOL.TestData+               , Text.Numeral.Language.XPQ.TestData                , Text.Numeral.Language.YOR.TestData+               , Text.Numeral.Language.ZAI.TestData                , Text.Numeral.Language.ZAQ.TestData-               , Text.Numeral.Language.ZH.TestData+               , Text.Numeral.Language.ZHO.TestData                , Text.Numeral.Language.ZPC.TestData+               , Text.Numeral.Language.ZPL.TestData   ghc-options: -Wall -threaded -rtsopts -with-rtsopts=-N--  build-depends: base                       >= 3.0.3.1 && < 4.7-               , base-unicode-symbols       >= 0.2.2   && < 0.3-               , HUnit                      >= 1.2.2   && < 1.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+  extensions: PackageImports+            , OverloadedStrings+            , ScopedTypeVariables+  build-depends: base                       >= 4   && < 5+               , HUnit                      >= 1.3 && < 1.4+               , QuickCheck                 >= 2.8 && < 2.9+               , test-framework             >= 0.8 && < 0.9+               , test-framework-hunit       >= 0.3 && < 0.4+               , test-framework-quickcheck2 >= 0.3 && < 0.4+               , text                       >= 1.2 && < 1.3                , numerals -  if impl(ghc >= 7.2.1)-    build-depends: integer-gmp >= 0.3 && < 0.6+-------------------------------------------------------------------------------++benchmark bench-numerals+  type: exitcode-stdio-1.0+  main-is: bench.hs+  hs-source-dirs: src-bench++  build-depends: base      >= 3.0.3.1 && < 5+               , criterion >= 0.8     && < 1.2+               , numerals+  extensions: PackageImports
+ src-bench/bench.hs view
@@ -0,0 +1,10 @@+module Main where++import "criterion" Criterion.Main+import "numerals" Text.Numeral.Grammar ( defaultInflection )+import qualified "numerals" Text.Numeral.Language.NLD as NLD+++main :: IO ()+main = defaultMain+       [bench "NLD" $ NLD.cardinal defaultInflection `nf` (10 ^ (42 :: Integer) - 1 :: Integer)]
src-test/Text/Numeral/Language/ACH/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-acholi/en/ach/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
src-test/Text/Numeral/Language/ADY/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-adyghe/en/ady/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
− src-test/Text/Numeral/Language/AF/TestData.hs
@@ -1,129 +0,0 @@-{-# 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/AFR/TestData.hs view
@@ -0,0 +1,122 @@+{-|+[@ISO639-1@]        af++[@ISO639-2@]        afr++[@ISO639-3@]        afr++[@Native name@]     Afrikaans++[@English name@]    Afrikaans+-}++module Text.Numeral.Language.AFR.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Misc ( dec )+import "numerals" Text.Numeral.Grammar ( 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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -22,8 +17,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -36,7 +30,7 @@   http://www.sf.airnet.ne.jp/~ts/language/number/alamblak.html -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
src-test/Text/Numeral/Language/ARI/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-arikara/en/ari/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/ARN/TestData.hs view
@@ -0,0 +1,175 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        arn++[@Native name@]     Mapudungun++[@English name@]    Mapuche+-}+module Text.Numeral.Language.ARN.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-mapudungun/en/arn/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "sero")+      , (1, "kiñe")+      , (2, "epu")+      , (3, "küla")+      , (4, "meli")+      , (5, "kechu")+      , (6, "kayu")+      , (7, "reqle")+      , (8, "pura")+      , (9, "aylla")+      , (10, "mari")+      , (11, "mari kiñe")+      , (12, "mari epu")+      , (13, "mari küla")+      , (14, "mari meli")+      , (15, "mari kechu")+      , (16, "mari kayu")+      , (17, "mari reqle")+      , (18, "mari pura")+      , (19, "mari aylla")+      , (20, "epu mari")+      , (21, "epu mari kiñe")+      , (22, "epu mari epu")+      , (23, "epu mari küla")+      , (24, "epu mari meli")+      , (25, "epu mari kechu")+      , (26, "epu mari kayu")+      , (27, "epu mari reqle")+      , (28, "epu mari pura")+      , (29, "epu mari aylla")+      , (30, "küla mari")+      , (31, "küla mari kiñe")+      , (32, "küla mari epu")+      , (33, "küla mari küla")+      , (34, "küla mari meli")+      , (35, "küla mari kechu")+      , (36, "küla mari kayu")+      , (37, "küla mari reqle")+      , (38, "küla mari pura")+      , (39, "küla mari aylla")+      , (40, "meli mari")+      , (41, "meli mari kiñe")+      , (42, "meli mari epu")+      , (43, "meli mari küla")+      , (44, "meli mari meli")+      , (45, "meli mari kechu")+      , (46, "meli mari kayu")+      , (47, "meli mari reqle")+      , (48, "meli mari pura")+      , (49, "meli mari aylla")+      , (50, "kechu mari")+      , (51, "kechu mari kiñe")+      , (52, "kechu mari epu")+      , (53, "kechu mari küla")+      , (54, "kechu mari meli")+      , (55, "kechu mari kechu")+      , (56, "kechu mari kayu")+      , (57, "kechu mari reqle")+      , (58, "kechu mari pura")+      , (59, "kechu mari aylla")+      , (60, "kayu mari")+      , (61, "kayu mari kiñe")+      , (62, "kayu mari epu")+      , (63, "kayu mari küla")+      , (64, "kayu mari meli")+      , (65, "kayu mari kechu")+      , (66, "kayu mari kayu")+      , (67, "kayu mari reqle")+      , (68, "kayu mari pura")+      , (69, "kayu mari aylla")+      , (70, "reqle mari")+      , (71, "reqle mari kiñe")+      , (72, "reqle mari epu")+      , (73, "reqle mari küla")+      , (74, "reqle mari meli")+      , (75, "reqle mari kechu")+      , (76, "reqle mari kayu")+      , (77, "reqle mari reqle")+      , (78, "reqle mari pura")+      , (79, "reqle mari aylla")+      , (80, "pura mari")+      , (81, "pura mari kiñe")+      , (82, "pura mari epu")+      , (83, "pura mari küla")+      , (84, "pura mari meli")+      , (85, "pura mari kechu")+      , (86, "pura mari kayu")+      , (87, "pura mari reqle")+      , (88, "pura mari pura")+      , (89, "pura mari aylla")+      , (90, "aylla mari")+      , (91, "aylla mari kiñe")+      , (92, "aylla mari epu")+      , (93, "aylla mari küla")+      , (94, "aylla mari meli")+      , (95, "aylla mari kechu")+      , (96, "aylla mari kayu")+      , (97, "aylla mari reqle")+      , (98, "aylla mari pura")+      , (99, "aylla mari aylla")+      , (100, "kiñe pataka")+      , (101, "kiñe pataka kiñe")+      , (102, "kiñe pataka epu")+      , (103, "kiñe pataka küla")+      , (104, "kiñe pataka meli")+      , (105, "kiñe pataka kechu")+      , (106, "kiñe pataka kayu")+      , (107, "kiñe pataka reqle")+      , (108, "kiñe pataka pura")+      , (109, "kiñe pataka aylla")+      , (110, "kiñe pataka mari")+      , (123, "kiñe pataka epu mari küla")+      , (200, "epu pataka")+      , (300, "küla pataka")+      , (321, "küla pataka epu mari kiñe")+      , (400, "meli pataka")+      , (500, "kechu pataka")+      , (600, "kayu pataka")+      , (700, "reqle pataka")+      , (800, "pura pataka")+      , (900, "aylla pataka")+      , (909, "aylla pataka aylla")+      , (990, "aylla pataka aylla mari")+      , (999, "aylla pataka aylla mari aylla")+      , (1000, "kiñe warangka")+      , (1001, "kiñe warangka kiñe")+      , (1008, "kiñe warangka pura")+      , (1234, "kiñe warangka epu pataka küla mari meli")+      , (2000, "epu warangka")+      , (3000, "küla warangka")+      , (4000, "meli warangka")+      , (4321, "meli warangka küla pataka epu mari kiñe")+      , (5000, "kechu warangka")+      , (6000, "kayu warangka")+      , (7000, "reqle warangka")+      , (8000, "pura warangka")+      , (9000, "aylla warangka")+      ]+    )+  ]
src-test/Text/Numeral/Language/AST/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-asturian/en/ast/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
− src-test/Text/Numeral/Language/AZ/TestData.hs
@@ -1,206 +0,0 @@-{-# 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/AZE/TestData.hs view
@@ -0,0 +1,200 @@+{-|+[@ISO639-1@]        az++[@ISO639-2@]        aze++[@ISO639-3@]        aze++[@Native name@]     Azərbaycanca++[@English name@]    Azerbaijani+-}+module Text.Numeral.Language.AZE.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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
@@ -1,180 +0,0 @@-{-# 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/BAK/TestData.hs view
@@ -0,0 +1,174 @@+{-|+[@ISO639-1@]        ba++[@ISO639-2@]        bak++[@ISO639-3@]        bak++[@Native name@]     Башҡорт теле++[@English name@]    Bashkir+-}+module Text.Numeral.Language.BAK.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/BAM/TestData.hs view
@@ -0,0 +1,197 @@+{-|+[@ISO639-1@]        bm++[@ISO639-2@]        bam++[@ISO639-3@]        bam++[@Native name@]     -++[@English name@]    Bambara+-}+module Text.Numeral.Language.BAM.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/BG/TestData.hs
@@ -1,237 +0,0 @@-{-# 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
@@ -1,203 +0,0 @@-{-# 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/BUL/TestData.hs view
@@ -0,0 +1,228 @@+{-|+[@ISO639-1@]        bg++[@ISO639-2@]        bul++[@ISO639-3@]        bul++[@Native name@]     български език++[@English name@]    Bulgarian+-}++module Text.Numeral.Language.BUL.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar+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/CA/TestData.hs
@@ -1,217 +0,0 @@-{-# 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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -24,8 +19,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -38,7 +32,7 @@   http://www.languagesandnumbers.com/how-to-count-in-carrier/en/caf/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection@@ -147,7 +141,7 @@   ]  -- Using Carrier sylllabics-syllabic_cardinals ∷ (Num i) ⇒ TestData i+syllabic_cardinals :: (Num i) => TestData i syllabic_cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/CAR/TestData.hs view
@@ -0,0 +1,152 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        car++[@ISO639-3@]        car++[@Native name@]     -++[@English name@]    Carib+-}+module Text.Numeral.Language.CAR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-kalina/en/car/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "òwin")+      , (2, "oko")+      , (3, "oruwa")+      , (4, "okupàen")+      , (5, "ainatone")+      , (6, "òwin-tòima")+      , (7, "oko-tòima")+      , (8, "oruwa-tòima")+      , (9, "okupàen-tòima")+      , (10, "ainapatoro")+      , (11, "ainapatoro itùponaka òwin")+      , (12, "ainapatoro itùponaka oko")+      , (13, "ainapatoro itùponaka oruwa")+      , (14, "ainapatoro itùponaka okupàen")+      , (15, "atonèpu")+      , (16, "ainapatoro itùponaka òwin-tòima")+      , (17, "ainapatoro itùponaka oko-tòima")+      , (18, "ainapatoro itùponaka oruwa-tòima")+      , (19, "ainapatoro itùponaka okupàen-tòima")+      , (20, "òwin-karìna")+      , (21, "òwin-karìna itùponaka òwin")+      , (22, "òwin-karìna itùponaka oko")+      , (23, "òwin-karìna itùponaka oruwa")+      , (24, "òwin-karìna itùponaka okupàen")+      , (25, "òwin-karìna itùponaka ainatone")+      , (26, "òwin-karìna itùponaka òwin-tòima")+      , (27, "òwin-karìna itùponaka oko-tòima")+      , (28, "òwin-karìna itùponaka oruwa-tòima")+      , (29, "òwin-karìna itùponaka okupàen-tòima")+      , (30, "òwin-karìna itùponaka ainapatoro")+      , (31, "òwin-karìna itùponaka ainapatoro itùponaka òwin")+      , (32, "òwin-karìna itùponaka ainapatoro itùponaka oko")+      , (33, "òwin-karìna itùponaka ainapatoro itùponaka oruwa")+      , (34, "òwin-karìna itùponaka ainapatoro itùponaka okupàen")+      , (35, "òwin-karìna itùponaka atonèpu")+      , (36, "òwin-karìna itùponaka ainapatoro itùponaka òwin-tòima")+      , (37, "òwin-karìna itùponaka ainapatoro itùponaka oko-tòima")+      , (38, "òwin-karìna itùponaka ainapatoro itùponaka oruwa-tòima")+      , (39, "òwin-karìna itùponaka ainapatoro itùponaka okupàen-tòima")+      , (40, "oko-karìna")+      , (41, "oko-karìna itùponaka òwin")+      , (42, "oko-karìna itùponaka oko")+      , (43, "oko-karìna itùponaka oruwa")+      , (44, "oko-karìna itùponaka okupàen")+      , (45, "oko-karìna itùponaka ainatone")+      , (46, "oko-karìna itùponaka òwin-tòima")+      , (47, "oko-karìna itùponaka oko-tòima")+      , (48, "oko-karìna itùponaka oruwa-tòima")+      , (49, "oko-karìna itùponaka okupàen-tòima")+      , (50, "oko-karìna itùponaka ainapatoro")+      , (51, "oko-karìna itùponaka ainapatoro itùponaka òwin")+      , (52, "oko-karìna itùponaka ainapatoro itùponaka oko")+      , (53, "oko-karìna itùponaka ainapatoro itùponaka oruwa")+      , (54, "oko-karìna itùponaka ainapatoro itùponaka okupàen")+      , (55, "oko-karìna itùponaka atonèpu")+      , (56, "oko-karìna itùponaka ainapatoro itùponaka òwin-tòima")+      , (57, "oko-karìna itùponaka ainapatoro itùponaka oko-tòima")+      , (58, "oko-karìna itùponaka ainapatoro itùponaka oruwa-tòima")+      , (59, "oko-karìna itùponaka ainapatoro itùponaka okupàen-tòima")+      , (60, "oruwa-karìna")+      , (61, "oruwa-karìna itùponaka òwin")+      , (62, "oruwa-karìna itùponaka oko")+      , (63, "oruwa-karìna itùponaka oruwa")+      , (64, "oruwa-karìna itùponaka okupàen")+      , (65, "oruwa-karìna itùponaka ainatone")+      , (66, "oruwa-karìna itùponaka òwin-tòima")+      , (67, "oruwa-karìna itùponaka oko-tòima")+      , (68, "oruwa-karìna itùponaka oruwa-tòima")+      , (69, "oruwa-karìna itùponaka okupàen-tòima")+      , (70, "oruwa-karìna itùponaka ainapatoro")+      , (71, "oruwa-karìna itùponaka ainapatoro itùponaka òwin")+      , (72, "oruwa-karìna itùponaka ainapatoro itùponaka oko")+      , (73, "oruwa-karìna itùponaka ainapatoro itùponaka oruwa")+      , (74, "oruwa-karìna itùponaka ainapatoro itùponaka okupàen")+      , (75, "oruwa-karìna itùponaka atonèpu")+      , (76, "oruwa-karìna itùponaka ainapatoro itùponaka òwin-tòima")+      , (77, "oruwa-karìna itùponaka ainapatoro itùponaka oko-tòima")+      , (78, "oruwa-karìna itùponaka ainapatoro itùponaka oruwa-tòima")+      , (79, "oruwa-karìna itùponaka ainapatoro itùponaka okupàen-tòima")+      , (80, "okupàen-karìna")+      , (81, "okupàen-karìna itùponaka òwin")+      , (82, "okupàen-karìna itùponaka oko")+      , (83, "okupàen-karìna itùponaka oruwa")+      , (84, "okupàen-karìna itùponaka okupàen")+      , (85, "okupàen-karìna itùponaka ainatone")+      , (86, "okupàen-karìna itùponaka òwin-tòima")+      , (87, "okupàen-karìna itùponaka oko-tòima")+      , (88, "okupàen-karìna itùponaka oruwa-tòima")+      , (89, "okupàen-karìna itùponaka okupàen-tòima")+      , (90, "okupàen-karìna itùponaka ainapatoro")+      , (91, "okupàen-karìna itùponaka ainapatoro itùponaka òwin")+      , (92, "okupàen-karìna itùponaka ainapatoro itùponaka oko")+      , (93, "okupàen-karìna itùponaka ainapatoro itùponaka oruwa")+      , (94, "okupàen-karìna itùponaka ainapatoro itùponaka okupàen")+      , (95, "okupàen-karìna itùponaka atonèpu")+      , (96, "okupàen-karìna itùponaka ainapatoro itùponaka òwin-tòima")+      , (97, "okupàen-karìna itùponaka ainapatoro itùponaka oko-tòima")+      , (98, "okupàen-karìna itùponaka ainapatoro itùponaka oruwa-tòima")+      , (99, "okupàen-karìna itùponaka ainapatoro itùponaka okupàen-tòima")+      , (100, "ainatone-karìna")+      , (101, "ainatone-karìna itùponaka òwin")+      , (102, "ainatone-karìna itùponaka oko")+      , (103, "ainatone-karìna itùponaka oruwa")+      , (104, "ainatone-karìna itùponaka okupàen")+      , (105, "ainatone-karìna itùponaka ainatone")+      , (106, "ainatone-karìna itùponaka òwin-tòima")+      , (107, "ainatone-karìna itùponaka oko-tòima")+      , (108, "ainatone-karìna itùponaka oruwa-tòima")+      , (109, "ainatone-karìna itùponaka okupàen-tòima")+      , (110, "ainatone-karìna itùponaka ainapatoro")+      , (123, "òwin-tòima-karìna itùponaka oruwa")+      , (200, "ainapatoro-karìna")+      , (300, "atonèpu-karìna")+      , (321, "atonèpu-itùponaka-òwin-karìna itùponaka òwin")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/CAT/TestData.hs view
@@ -0,0 +1,211 @@+{-|+[@ISO639-1@]        ca++[@ISO639-2@]        cat++[@ISO639-3@]        cat++[@Native name@]     català++[@English name@]    Catalan+-}+module Text.Numeral.Language.CAT.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/CBK/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-chavacano/en/cbk/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/CES/TestData.hs view
@@ -0,0 +1,204 @@+{-|+[@ISO639-1@]        cs++[@ISO639-2B@]       cze++[@ISO639-2T@]       ces++[@ISO639-3@]        ces++[@Native name@]     Čeština++[@English name@]    Czech+-}++module Text.Numeral.Language.CES.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/CHN/TestData.hs view
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -23,15 +17,14 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  -------------------------------------------------------------------------------- -- Test data -------------------------------------------------------------------------------- -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
src-test/Text/Numeral/Language/CHR/TestData.hs view
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -22,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -37,7 +30,7 @@   http://www.languagesandnumbers.com/how-to-count-in-cherokee/en/chr/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/CKU/TestData.hs view
@@ -0,0 +1,175 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        cku++[@Native name@]     Kowassá:ti++[@English name@]    Koasati+-}+module Text.Numeral.Language.CKU.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-koasati/en/cku/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "ikson")+      , (1, "chaffaakan")+      , (2, "toklon")+      , (3, "totchiinan")+      , (4, "ostaakan")+      , (5, "chahappaakan")+      , (6, "hannaalin")+      , (7, "ontoklon")+      , (8, "ontotchiinan")+      , (9, "chakkaalin")+      , (10, "pokkoolin")+      , (11, "pokkol awah chaffaakan")+      , (12, "pokkol awah toklon")+      , (13, "pokkol awah totchiinan")+      , (14, "pokkol awah ostaakan")+      , (15, "pokkol awah chahappaakan")+      , (16, "pokkol awah hannaalin")+      , (17, "pokkol awah ontoklon")+      , (18, "pokkol awah ontotchiinan")+      , (19, "pokkol awah chakkaalin")+      , (20, "poltoklon")+      , (21, "poltoklon polo awah chaffaakan")+      , (22, "poltoklon polo awah toklon")+      , (23, "poltoklon polo awah totchiinan")+      , (24, "poltoklon polo awah ostaakan")+      , (25, "poltoklon polo awah chahappaakan")+      , (26, "poltoklon polo awah hannaalin")+      , (27, "poltoklon polo awah ontoklon")+      , (28, "poltoklon polo awah ontotchiinan")+      , (29, "poltoklon polo awah chakkaalin")+      , (30, "poltotchiinan")+      , (31, "poltotchiinan polo awah chaffaakan")+      , (32, "poltotchiinan polo awah toklon")+      , (33, "poltotchiinan polo awah totchiinan")+      , (34, "poltotchiinan polo awah ostaakan")+      , (35, "poltotchiinan polo awah chahappaakan")+      , (36, "poltotchiinan polo awah hannaalin")+      , (37, "poltotchiinan polo awah ontoklon")+      , (38, "poltotchiinan polo awah ontotchiinan")+      , (39, "poltotchiinan polo awah chakkaalin")+      , (40, "polostaakan")+      , (41, "polostaakan polo awah chaffaakan")+      , (42, "polostaakan polo awah toklon")+      , (43, "polostaakan polo awah totchiinan")+      , (44, "polostaakan polo awah ostaakan")+      , (45, "polostaakan polo awah chahappaakan")+      , (46, "polostaakan polo awah hannaalin")+      , (47, "polostaakan polo awah ontoklon")+      , (48, "polostaakan polo awah ontotchiinan")+      , (49, "polostaakan polo awah chakkaalin")+      , (50, "polchahappaakan")+      , (51, "polchahappaakan polo awah chaffaakan")+      , (52, "polchahappaakan polo awah toklon")+      , (53, "polchahappaakan polo awah totchiinan")+      , (54, "polchahappaakan polo awah ostaakan")+      , (55, "polchahappaakan polo awah chahappaakan")+      , (56, "polchahappaakan polo awah hannaalin")+      , (57, "polchahappaakan polo awah ontoklon")+      , (58, "polchahappaakan polo awah ontotchiinan")+      , (59, "polchahappaakan polo awah chakkaalin")+      , (60, "polahannaalin")+      , (61, "polahannaalin polo awah chaffaakan")+      , (62, "polahannaalin polo awah toklon")+      , (63, "polahannaalin polo awah totchiinan")+      , (64, "polahannaalin polo awah ostaakan")+      , (65, "polahannaalin polo awah chahappaakan")+      , (66, "polahannaalin polo awah hannaalin")+      , (67, "polahannaalin polo awah ontoklon")+      , (68, "polahannaalin polo awah ontotchiinan")+      , (69, "polahannaalin polo awah chakkaalin")+      , (70, "polontoklon")+      , (71, "polontoklon polo awah chaffaakan")+      , (72, "polontoklon polo awah toklon")+      , (73, "polontoklon polo awah totchiinan")+      , (74, "polontoklon polo awah ostaakan")+      , (75, "polontoklon polo awah chahappaakan")+      , (76, "polontoklon polo awah hannaalin")+      , (77, "polontoklon polo awah ontoklon")+      , (78, "polontoklon polo awah ontotchiinan")+      , (79, "polontoklon polo awah chakkaalin")+      , (80, "polontotchiinan")+      , (81, "polontotchiinan polo awah chaffaakan")+      , (82, "polontotchiinan polo awah toklon")+      , (83, "polontotchiinan polo awah totchiinan")+      , (84, "polontotchiinan polo awah ostaakan")+      , (85, "polontotchiinan polo awah chahappaakan")+      , (86, "polontotchiinan polo awah hannaalin")+      , (87, "polontotchiinan polo awah ontoklon")+      , (88, "polontotchiinan polo awah ontotchiinan")+      , (89, "polontotchiinan polo awah chakkaalin")+      , (90, "polchakkaalin")+      , (91, "polchakkaalin polo awah chaffaakan")+      , (92, "polchakkaalin polo awah toklon")+      , (93, "polchakkaalin polo awah totchiinan")+      , (94, "polchakkaalin polo awah ostaakan")+      , (95, "polchakkaalin polo awah chahappaakan")+      , (96, "polchakkaalin polo awah hannaalin")+      , (97, "polchakkaalin polo awah ontoklon")+      , (98, "polchakkaalin polo awah ontotchiinan")+      , (99, "polchakkaalin polo awah chakkaalin")+      , (100, "chokpi chaffaakan")+      , (101, "chokpi chaffaakan awah chaffaakan")+      , (102, "chokpi chaffaakan awah toklon")+      , (103, "chokpi chaffaakan awah totchiinan")+      , (104, "chokpi chaffaakan awah ostaakan")+      , (105, "chokpi chaffaakan awah chahappaakan")+      , (106, "chokpi chaffaakan awah hannaalin")+      , (107, "chokpi chaffaakan awah ontoklon")+      , (108, "chokpi chaffaakan awah ontotchiinan")+      , (109, "chokpi chaffaakan awah chakkaalin")+      , (110, "chokpi chaffaakan awah pokkoolin")+      , (123, "chokpi chaffaakan awah poltoklon polo awah totchiinan")+      , (200, "chokpi toklon")+      , (300, "chokpi totchiinan")+      , (321, "chokpi totchiinan awah poltoklon polo awah chaffaakan")+      , (400, "chokpi ostaakan")+      , (500, "chokpi chahappaakan")+      , (600, "chokpi hannaalin")+      , (700, "chokpi ontoklon")+      , (800, "chokpi ontotchiinan")+      , (900, "chokpi chakkaalin")+      , (909, "chokpi chakkaalin awah chakkaalin")+      , (990, "chokpi chakkaalin awah polchakkaalin")+      , (999, "chokpi chakkaalin awah polchakkaalin polo awah chakkaalin")+      , (1000, "chokpachoba chaffaakan")+      , (1001, "chokpachoba chaffaakan awah chaffaakan")+      , (1008, "chokpachoba chaffaakan awah ontotchiinan")+      , (1234, "chokpachoba chaffaakan awah chokpi toklon awah poltotchiinan polo awah ostaakan")+      , (2000, "chokpachoba toklon")+      , (3000, "chokpachoba totchiinan")+      , (4000, "chokpachoba ostaakan")+      , (4321, "chokpachoba ostaakan awah chokpi totchiinan awah poltoklon polo awah chaffaakan")+      , (5000, "chokpachoba chahappaakan")+      , (6000, "chokpachoba hannaalin")+      , (7000, "chokpachoba ontoklon")+      , (8000, "chokpachoba ontotchiinan")+      , (9000, "chokpachoba chakkaalin")+      ]+    )+  ]
src-test/Text/Numeral/Language/CLM/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -22,15 +17,14 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  -------------------------------------------------------------------------------- -- Test data -------------------------------------------------------------------------------- -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
− src-test/Text/Numeral/Language/CO/TestData.hs
@@ -1,225 +0,0 @@-{-# 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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-cocama/en/cod/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
src-test/Text/Numeral/Language/COO/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-comox/en/coo/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/COS/TestData.hs view
@@ -0,0 +1,219 @@+{-|+[@ISO639-1@]        co++[@ISO639-2@]        cos++[@ISO639-3@]        cos++[@Native name@]     corsu++[@English name@]    Corsican+-}+module Text.Numeral.Language.COS.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/CRG/TestData.hs view
@@ -0,0 +1,138 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        crg++[@Native name@]     Michif++[@English name@]    Michif+-}+module Text.Numeral.Language.CRG.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-michif/en/crg/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "aeñ")+      , (2, "deu")+      , (3, "trwá")+      , (4, "kátr")+      , (5, "saeñk")+      , (6, "sis")+      , (7, "set")+      , (8, "wit")+      , (9, "naef")+      , (10, "jis")+      , (11, "óñz")+      , (12, "dóz")+      , (13, "trayz")+      , (14, "katorz")+      , (15, "kaeñz")+      , (16, "saeñz")+      , (17, "jis set")+      , (18, "jis wit")+      , (19, "jis naef")+      , (20, "vaeñ")+      , (21, "vaeñ aeñ")+      , (22, "vaeñ deu")+      , (23, "vaeñ trwá")+      , (24, "vaeñ kátr")+      , (25, "vaeñ saeñk")+      , (26, "vaeñ sis")+      , (27, "vaeñ set")+      , (28, "vaeñ wit")+      , (29, "vaeñ naef")+      , (30, "tráñt")+      , (31, "tráñt aeñ")+      , (32, "tráñt deu")+      , (33, "tráñt trwá")+      , (34, "tráñt kátr")+      , (35, "tráñt saeñk")+      , (36, "tráñt sis")+      , (37, "tráñt set")+      , (38, "tráñt wit")+      , (39, "tráñt naef")+      , (40, "karánt")+      , (41, "karánt aeñ")+      , (42, "karánt deu")+      , (43, "karánt trwá")+      , (44, "karánt kátr")+      , (45, "karánt saeñk")+      , (46, "karánt sis")+      , (47, "karánt set")+      , (48, "karánt wit")+      , (49, "karánt naef")+      , (50, "saeñkánt")+      , (51, "saeñkánt aeñ")+      , (52, "saeñkánt deu")+      , (53, "saeñkánt trwá")+      , (54, "saeñkánt kátr")+      , (55, "saeñkánt saeñk")+      , (56, "saeñkánt sis")+      , (57, "saeñkánt set")+      , (58, "saeñkánt wit")+      , (59, "saeñkánt naef")+      , (60, "swesáñt")+      , (61, "swesáñt aeñ")+      , (62, "swesáñt deu")+      , (63, "swesáñt trwá")+      , (64, "swesáñt kátr")+      , (65, "swesáñt saeñk")+      , (66, "swesáñt sis")+      , (67, "swesáñt set")+      , (68, "swesáñt wit")+      , (69, "swesáñt naef")+      , (70, "swesáñty jis")+      , (71, "swesáñty jis aeñ")+      , (72, "swesáñty jis deu")+      , (73, "swesáñty jis trwá")+      , (74, "swesáñty jis kátr")+      , (75, "swesáñty jis saeñk")+      , (76, "swesáñty jis sis")+      , (77, "swesáñty jis set")+      , (78, "swesáñty jis wit")+      , (79, "swesáñty jis naef")+      , (80, "katávaeñ")+      , (81, "katávaeñ aeñ")+      , (82, "katávaeñ deu")+      , (83, "katávaeñ trwá")+      , (84, "katávaeñ kátr")+      , (85, "katávaeñ saeñk")+      , (86, "katávaeñ sis")+      , (87, "katávaeñ set")+      , (88, "katávaeñ wit")+      , (89, "katávaeñ naef")+      , (90, "katrávaen jis")+      , (91, "katrávaen jis aeñ")+      , (92, "katrávaen jis deu")+      , (93, "katrávaen jis trwá")+      , (94, "katrávaen jis kátr")+      , (95, "katrávaen jis saeñk")+      , (96, "katrávaen jis sis")+      , (97, "katrávaen jis set")+      , (98, "katrávaen jis wit")+      , (99, "katrávaen jis naef")+      , (100, "sáñ")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/CRO/TestData.hs view
@@ -0,0 +1,114 @@+{-|+[@ISO639-1@]        hr++[@ISO639-2B@]       cro++[@ISO639-3@]        cro++[@Native name@]     Hrvatski++[@English name@]    Croatian+-}+++module Text.Numeral.Language.CRO.TestData+    ( cardinals+    ) where++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++cardinals :: (Num i) => TestData i+cardinals =+  [ ("default"+    , defaultInflection+    , [ (0, "nula")+      , (1, "jedan")+      , (2, "dva")+      , (3, "tri")+      , (4, "četiri")+      , (5, "pet")+      , (6, "šest")+      , (7, "sedam")+      , (8, "osam")+      , (9, "devet")+      , (10, "deset")+      , (11, "jedanaest")+      , (12, "dvanaest")+      , (13, "trinaest")+      , (14, "četrnaest")+      , (15, "petnaest")+      , (16, "šesnaest")+      , (17, "sedamnaest")+      , (18, "osamnaest")+      , (19, "devetnaest")+      , (20, "dvadeset")+      , (21, "dvadeset jedan")+      , (22, "dvadeset dva")+      , (23, "dvadeset tri")+      , (24, "dvadeset četiri")+      , (25, "dvadeset pet")+      , (26, "dvadeset šest")+      , (27, "dvadeset sedam")+      , (28, "dvadeset osam")+      , (29, "dvadeset devet")+      , (30, "trideset")+      , (31, "trideset jedan")+      , (32, "trideset dva")+      , (33, "trideset tri")+      , (34, "trideset četiri")+      , (35, "trideset pet")+      , (36, "trideset šest")+      , (37, "trideset sedam")+      , (38, "trideset osam")+      , (39, "trideset devet")+      , (40, "četrdeset")+      , (50, "pedeset")+      , (60, "šesdeset")+      , (62, "šesdeset dva")+      , (70, "sedamdeset")+      , (80, "osamdeset")+      , (90, "devedeset")+      , (93, "devedeset tri")+      , (98, "devedeset osam")+      , (99, "devedeset devet")+      , (100, "sto")+      , (101, "sto jedan")+      , (102, "sto dva")+      , (110, "sto deset")+      , (111, "sto jedanaest")+      , (116, "sto šesnaest")+      , (126, "sto dvadeset šest")+      , (150, "sto pedeset")+      , (156, "sto pedeset šest")+      , (500, "petsto")+      , (634, "šesto trideset četiri")+      , (999, "devetsto devedeset devet")+      , (1000, "tisuću")+      , (1100, "tisuću sto")+      , (1101, "tisuću sto jedan")+      , (1102, "tisuću sto dva")+      , (1110, "tisuću sto deset")+      , (1111, "tisuću sto jedanaest")+      , (1116, "tisuću sto šesnaest")+      , (1126, "tisuću sto dvadeset šest")+      , (1150, "tisuću sto pedeset")+      , (1156, "tisuću sto pedeset šest")+      , (1500, "tisuću petsto")+      , (1634, "tisuću šesto trideset četiri")+      , (17999, "sedamnaest tisuća devetsto devedeset devet")+      , (25358, "dvadeset pet tisuća tristo pedeset osam")+      , (105358, "sto pet tisuća tristo pedeset osam")+      , (246912, "dvjesto četrdeset šest tisuća devetsto dvanaest")+      ]+    )+  ]
− src-test/Text/Numeral/Language/CS/TestData.hs
@@ -1,212 +0,0 @@-{-# 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
@@ -1,178 +0,0 @@-{-# 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/CYM/TestData.hs view
@@ -0,0 +1,171 @@+{-|+[@ISO639-1@]        cy++[@ISO639-2B@]       wel++[@ISO639-2T@]       cym++[@ISO639-3@]        cym++[@Native name@]     Cymraeg++[@English name@]    Welsh+-}++module Text.Numeral.Language.CYM.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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
@@ -1,475 +0,0 @@-{-# 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/DEU/TestData.hs view
@@ -0,0 +1,467 @@+{-|+[@ISO639-1@]        de++[@ISO639-2B@]       ger++[@ISO639-2T@]       deu++[@ISO639-3@]        deu++[@Native name@]     Deutsch++[@English name@]    German+-}++module Text.Numeral.Language.DEU.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-aukan/en/djk/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/EKK/TestData.hs view
@@ -0,0 +1,214 @@+{-|+[@ISO639-1@]        et++[@ISO639-2@]        est++[@ISO639-3@]        ekk++[@Native name@]     eesti keel++[@English name@]    Estonian+-}++module Text.Numeral.Language.EKK.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar ( 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/EMI/TestData.hs view
@@ -0,0 +1,174 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        emi++[@Native name@]     -++[@English name@]    Mussau-Emira+-}+module Text.Numeral.Language.EMI.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-mussau-emira/en/emi/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "sesa")+      , (2, "lua")+      , (3, "tolu")+      , (4, "ata")+      , (5, "lima")+      , (6, "nomo")+      , (7, "itu")+      , (8, "oalu")+      , (9, "sio")+      , (10, "sangaulu")+      , (11, "sangaulu sesa")+      , (12, "sangaulu lua")+      , (13, "sangaulu tolu")+      , (14, "sangaulu ata")+      , (15, "sangaulu lima")+      , (16, "sangaulu nomo")+      , (17, "sangaulu itu")+      , (18, "sangaulu oalu")+      , (19, "sangaulu sio")+      , (20, "luengaulu")+      , (21, "luengaulu sesa")+      , (22, "luengaulu lua")+      , (23, "luengaulu tolu")+      , (24, "luengaulu ata")+      , (25, "luengaulu lima")+      , (26, "luengaulu nomo")+      , (27, "luengaulu itu")+      , (28, "luengaulu oalu")+      , (29, "luengaulu sio")+      , (30, "tolungaulu")+      , (31, "tolungaulu sesa")+      , (32, "tolungaulu lua")+      , (33, "tolungaulu tolu")+      , (34, "tolungaulu ata")+      , (35, "tolungaulu lima")+      , (36, "tolungaulu nomo")+      , (37, "tolungaulu itu")+      , (38, "tolungaulu oalu")+      , (39, "tolungaulu sio")+      , (40, "atingaulu")+      , (41, "atingaulu sesa")+      , (42, "atingaulu lua")+      , (43, "atingaulu tolu")+      , (44, "atingaulu ata")+      , (45, "atingaulu lima")+      , (46, "atingaulu nomo")+      , (47, "atingaulu itu")+      , (48, "atingaulu oalu")+      , (49, "atingaulu sio")+      , (50, "limangaulu")+      , (51, "limangaulu sesa")+      , (52, "limangaulu lua")+      , (53, "limangaulu tolu")+      , (54, "limangaulu ata")+      , (55, "limangaulu lima")+      , (56, "limangaulu nomo")+      , (57, "limangaulu itu")+      , (58, "limangaulu oalu")+      , (59, "limangaulu sio")+      , (60, "nomongaulu")+      , (61, "nomongaulu sesa")+      , (62, "nomongaulu lua")+      , (63, "nomongaulu tolu")+      , (64, "nomongaulu ata")+      , (65, "nomongaulu lima")+      , (66, "nomongaulu nomo")+      , (67, "nomongaulu itu")+      , (68, "nomongaulu oalu")+      , (69, "nomongaulu sio")+      , (70, "itungaulu")+      , (71, "itungaulu sesa")+      , (72, "itungaulu lua")+      , (73, "itungaulu tolu")+      , (74, "itungaulu ata")+      , (75, "itungaulu lima")+      , (76, "itungaulu nomo")+      , (77, "itungaulu itu")+      , (78, "itungaulu oalu")+      , (79, "itungaulu sio")+      , (80, "oalungaulu")+      , (81, "oalungaulu sesa")+      , (82, "oalungaulu lua")+      , (83, "oalungaulu tolu")+      , (84, "oalungaulu ata")+      , (85, "oalungaulu lima")+      , (86, "oalungaulu nomo")+      , (87, "oalungaulu itu")+      , (88, "oalungaulu oalu")+      , (89, "oalungaulu sio")+      , (90, "siongaulu")+      , (91, "siongaulu sesa")+      , (92, "siongaulu lua")+      , (93, "siongaulu tolu")+      , (94, "siongaulu ata")+      , (95, "siongaulu lima")+      , (96, "siongaulu nomo")+      , (97, "siongaulu itu")+      , (98, "siongaulu oalu")+      , (99, "siongaulu sio")+      , (100, "ai")+      , (101, "ai sesa")+      , (102, "ai lua")+      , (103, "ai tolu")+      , (104, "ai ata")+      , (105, "ai lima")+      , (106, "ai nomo")+      , (107, "ai itu")+      , (108, "ai oalu")+      , (109, "ai sio")+      , (110, "ai sangaulu")+      , (123, "ai luengaulu tolu")+      , (200, "lua ai")+      , (300, "tolu ai")+      , (321, "tolu ai luengaulu sesa")+      , (400, "ata ai")+      , (500, "lima ai")+      , (600, "nomo ai")+      , (700, "itu ai")+      , (800, "oalu ai")+      , (900, "sio ai")+      , (909, "sio ai sio")+      , (990, "sio ai siongaulu")+      , (999, "sio ai siongaulu sio")+      , (1000, "airari")+      , (1001, "airari sesa")+      , (1008, "airari oalu")+      , (1234, "airari lua ai tolungaulu ata")+      , (2000, "lua airari")+      , (3000, "tolu airari")+      , (4000, "ata airari")+      , (4321, "ata airari tolu ai luengaulu sesa")+      , (5000, "lima airari")+      , (6000, "nomo airari")+      , (7000, "itu airari")+      , (8000, "oalu airari")+      , (9000, "sio airari")+      ]+    )+  ]
− src-test/Text/Numeral/Language/EN/TestData.hs
@@ -1,380 +0,0 @@-{-# 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/ENG/TestData.hs view
@@ -0,0 +1,373 @@+{-|+[@ISO639-1@]        en++[@ISO639-2B@]       eng++[@ISO639-3@]        eng++[@Native name@]     English++[@English name@]    English+-}++module Text.Numeral.Language.ENG.TestData+    ( gb_cardinals, gb_ordinals+    , us_cardinals, us_ordinals+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Monoid ( (<>) )+import "numerals" Text.Numeral.Grammar ( 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
@@ -1,142 +0,0 @@-{-# 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/EPO/TestData.hs view
@@ -0,0 +1,135 @@+{-|+[@ISO639-1@]        eo++[@ISO639-2B@]       epo++[@ISO639-3@]        epo++[@Native name@]     Esperanto++[@English name@]    Esperanto+-}++module Text.Numeral.Language.EPO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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
@@ -1,280 +0,0 @@-{-# 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
@@ -1,220 +0,0 @@-{-# 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/FAO/TestData.hs view
@@ -0,0 +1,219 @@+{-|+[@ISO639-1@]        fo++[@ISO639-2@]        fao++[@ISO639-3@]        fao++[@Native name@]     føroyskt++[@English name@]    Faroese+-}+module Text.Numeral.Language.FAO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/FI/TestData.hs
@@ -1,1827 +0,0 @@-{-# 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/FIN/TestData.hs view
@@ -0,0 +1,1820 @@+{-|+[@ISO639-1@]        fi++[@ISO639-2@]        fin++[@ISO639-3@]        fin++[@Native name@]     suomi++[@English name@]    Finnish+-}++module Text.Numeral.Language.FIN.TestData+    ( cardinals+    , ordinals+    , multiplicatives+    , multipliers+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( ($) )+import "base" Prelude     ( Integral, (+) )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar ( 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
@@ -1,225 +0,0 @@-{-# 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
@@ -1,371 +0,0 @@-{-# 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/FRA/TestData.hs view
@@ -0,0 +1,364 @@+{-|+[@ISO639-1@]        fr++[@ISO639-2B@]       fre++[@ISO639-3@]        fra++[@Native name@]     Français++[@English name@]    French+-}++module Text.Numeral.Language.FRA.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar ( 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/FRA_JER/TestData.hs view
@@ -0,0 +1,162 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        -++[@Native name@]     -++[@English name@]    Jèrriais+-}+module Text.Numeral.Language.FRA_JER.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-jerriais/en/fra-jer/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "ieune")+      , (2, "deux")+      , (3, "trais")+      , (4, "quat’")+      , (5, "chîn")+      , (6, "six")+      , (7, "sept")+      , (8, "huit")+      , (9, "neuf")+      , (10, "dgix")+      , (11, "onze")+      , (12, "douze")+      , (13, "treize")+      , (14, "quatorze")+      , (15, "tchînze")+      , (16, "seize")+      , (17, "dgiêx-sept")+      , (18, "dgiêx-huit")+      , (19, "dgiêx-neuf")+      , (20, "vîngt")+      , (21, "vîngt’tch’ieune")+      , (22, "vîngt-deux")+      , (23, "vîngt-trais")+      , (24, "vîngt-quat’")+      , (25, "vîngt-chîn")+      , (26, "vîngt-six")+      , (27, "vîngt-sept")+      , (28, "vîngt-huit")+      , (29, "vîngt-neuf")+      , (30, "trente")+      , (31, "trente’tch’ieune")+      , (32, "trente-deux")+      , (33, "trente-trais")+      , (34, "trente-quat’")+      , (35, "trente-chîn")+      , (36, "trente-six")+      , (37, "trente-sept")+      , (38, "trente-huit")+      , (39, "trente-neuf")+      , (40, "quarante")+      , (41, "quarante’tch’ieune")+      , (42, "quarante-deux")+      , (43, "quarante-trais")+      , (44, "quarante-quat’")+      , (45, "quarante-chîn")+      , (46, "quarante-six")+      , (47, "quarante-sept")+      , (48, "quarante-huit")+      , (49, "quarante-neuf")+      , (50, "chînquante")+      , (51, "chînquante tch’ieune")+      , (52, "chînquante-deux")+      , (53, "chînquante-trais")+      , (54, "chînquante-quat’")+      , (55, "chînquante-chîn")+      , (56, "chînquante-six")+      , (57, "chînquante-sept")+      , (58, "chînquante-huit")+      , (59, "chînquante-neuf")+      , (60, "souaixante")+      , (61, "souaixante tch’ieune")+      , (62, "souaixante-deux")+      , (63, "souaixante-trais")+      , (64, "souaixante-quat’")+      , (65, "souaixante-chîn")+      , (66, "souaixante-six")+      , (67, "souaixante-sept")+      , (68, "souaixante-huit")+      , (69, "souaixante-neuf")+      , (70, "septante")+      , (71, "septante tch’ieune")+      , (72, "septante-deux")+      , (73, "septante-trais")+      , (74, "septante-quat’")+      , (75, "septante-chîn")+      , (76, "septante-six")+      , (77, "septante-sept")+      , (78, "septante-huit")+      , (79, "septante-neuf")+      , (80, "quatre-vîngts")+      , (81, "quatre-vîngt-ieune")+      , (82, "quatre-vîngt-deux")+      , (83, "quatre-vîngt-trais")+      , (84, "quatre-vîngt-quat’")+      , (85, "quatre-vîngt-chîn")+      , (86, "quatre-vîngt-six")+      , (87, "quatre-vîngt-sept")+      , (88, "quatre-vîngt-huit")+      , (89, "quatre-vîngt-neuf")+      , (90, "nénante")+      , (91, "nénante tch’ieune")+      , (92, "nénante-deux")+      , (93, "nénante-trais")+      , (94, "nénante-quat’")+      , (95, "nénante-chîn")+      , (96, "nénante-six")+      , (97, "nénante-sept")+      , (98, "nénante-huit")+      , (99, "nénante-neuf")+      , (100, "chent")+      , (101, "chent ieune")+      , (102, "chent deux")+      , (103, "chent trais")+      , (104, "chent quat’")+      , (105, "chent chîn")+      , (106, "chent six")+      , (107, "chent sept")+      , (108, "chent huit")+      , (109, "chent neuf")+      , (110, "chent dgix")+      , (123, "chent vîngt-trais")+      , (200, "deux chents")+      , (300, "trais chents")+      , (321, "trais chents vîngt’tch’ieune")+      , (400, "quat’ chents")+      , (500, "chîn chents")+      , (600, "siêx chents")+      , (700, "sept chents")+      , (800, "huit chents")+      , (900, "neu chents")+      , (909, "neu chents neuf")+      , (990, "neu chents nénante")+      , (999, "neu chents nénante-neuf")+      , (1000, "mille")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/FRR/TestData.hs view
@@ -0,0 +1,196 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        frr++[@ISO639-3@]        frr++[@Native name@]     Frasch, Fresk, Freesk, Friisk++[@English name@]    North Frisian+-}+module Text.Numeral.Language.FRR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-north-frisian/en/frr/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "iinj")+      , (2, "tou")+      , (3, "tri")+      , (4, "fjouer")+      , (5, "fiiw")+      , (6, "seeks")+      , (7, "soowen")+      , (8, "oocht")+      , (9, "nüügen")+      , (10, "tiin")+      , (11, "alwen")+      , (12, "tweelwen")+      , (13, "tratäin")+      , (14, "fjouertäin")+      , (15, "füftäin")+      , (16, "seekstäin")+      , (17, "soowentäin")+      , (18, "oochttäin")+      , (19, "nüügentäin")+      , (20, "twunti")+      , (21, "iinjäntwunti")+      , (22, "touäntwunti")+      , (23, "triäntwunti")+      , (24, "fjoueräntwunti")+      , (25, "fiiwäntwunti")+      , (26, "seeksäntwunti")+      , (27, "soowenäntwunti")+      , (28, "oochtäntwunti")+      , (29, "nüügenäntwunti")+      , (30, "dörti")+      , (31, "iinjändörti")+      , (32, "touändörti")+      , (33, "triändörti")+      , (34, "fjouerändörti")+      , (35, "fiiwändörti")+      , (36, "seeksändörti")+      , (37, "soowenändörti")+      , (38, "oochtändörti")+      , (39, "nüügenändörti")+      , (40, "fäärti")+      , (41, "iinjänfäärti")+      , (42, "touänfäärti")+      , (43, "triänfäärti")+      , (44, "fjoueränfäärti")+      , (45, "fiiwänfäärti")+      , (46, "seeksänfäärti")+      , (47, "soowenänfäärti")+      , (48, "oochtänfäärti")+      , (49, "nüügenänfäärti")+      , (50, "füfti")+      , (51, "iinjänfüfti")+      , (52, "touänfüfti")+      , (53, "triänfüfti")+      , (54, "fjoueränfüfti")+      , (55, "fiiwänfüfti")+      , (56, "seeksänfüfti")+      , (57, "soowenänfüfti")+      , (58, "oochtänfüfti")+      , (59, "nüügenänfüfti")+      , (60, "süsti")+      , (61, "iinjänsüsti")+      , (62, "touänsüsti")+      , (63, "triänsüsti")+      , (64, "fjoueränsüsti")+      , (65, "fiiwänsüsti")+      , (66, "seeksänsüsti")+      , (67, "soowenänsüsti")+      , (68, "oochtänsüsti")+      , (69, "nüügenänsüsti")+      , (70, "sööwenti")+      , (71, "iinjänsööwenti")+      , (72, "touänsööwenti")+      , (73, "triänsööwenti")+      , (74, "fjoueränsööwenti")+      , (75, "fiiwänsööwenti")+      , (76, "seeksänsööwenti")+      , (77, "soowenänsööwenti")+      , (78, "oochtänsööwenti")+      , (79, "nüügenänsööwenti")+      , (80, "tachenti")+      , (81, "iinjäntachenti")+      , (82, "touäntachenti")+      , (83, "triäntachenti")+      , (84, "fjoueräntachenti")+      , (85, "fiiwäntachenti")+      , (86, "seeksäntachenti")+      , (87, "soowenäntachenti")+      , (88, "oochtäntachenti")+      , (89, "nüügenäntachenti")+      , (90, "näägenti")+      , (91, "iinjännäägenti")+      , (92, "touännäägenti")+      , (93, "triännäägenti")+      , (94, "fjouerännäägenti")+      , (95, "fiiwännäägenti")+      , (96, "seeksännäägenti")+      , (97, "soowenännäägenti")+      , (98, "oochtännäägenti")+      , (99, "nüügenännäägenti")+      , (100, "hunert")+      , (101, "hunert iinj")+      , (102, "hunert tou")+      , (103, "hunert tri")+      , (104, "hunert fjouer")+      , (105, "hunert fiiw")+      , (106, "hunert seeks")+      , (107, "hunert soowen")+      , (108, "hunert oocht")+      , (109, "hunert nüügen")+      , (110, "hunert tiin")+      , (123, "hunert triäntwunti")+      , (200, "touhunert")+      , (300, "trihunert")+      , (321, "trihunert iinjäntwunti")+      , (400, "fjouerhunert")+      , (500, "fiiwhunert")+      , (600, "seekshunert")+      , (700, "soowenhunert")+      , (800, "oochthunert")+      , (900, "nüügenhunert")+      , (909, "nüügenhunert nüügen")+      , (990, "nüügenhunert näägenti")+      , (999, "nüügenhunert nüügenännäägenti")+      , (1000, "duusend")+      , (1001, "duusend iinj")+      , (1008, "duusend oocht")+      , (1234, "duusend touhunert fjouerändörti")+      , (2000, "touduusend")+      , (3000, "triduusend")+      , (4000, "fjouerduusend")+      , (4321, "fjouerduusend trihunert iinjäntwunti")+      , (5000, "fiiwduusend")+      , (6000, "seeksduusend")+      , (7000, "soowenduusend")+      , (8000, "oochtduusend")+      , (9000, "nüügenduusend")+      , (10000, "tiinduusend")+      , (12345, "tweelwen duusend trihunert fiiwänfäärti")+      , (20000, "twunti duusend")+      , (30000, "dörti duusend")+      , (40000, "fäärti duusend")+      , (50000, "füfti duusend")+      , (54321, "fjoueränfüfti duusend trihunert iinjäntwunti")+      , (60000, "süsti duusend")+      , (70000, "sööwenti duusend")+      , (80000, "tachenti duusend")+      , (90000, "näägenti duusend")+      , (100000, "hunertduusend")+      , (123456, "hunert triäntwunti duusend fjouerhunert seeksänfüfti")+      , (200000, "touhunertduusend")+      , (300000, "trihunertduusend")+      , (400000, "fjouerhunertduusend")+      , (500000, "fiiwhunertduusend")+      , (600000, "seekshunertduusend")+      , (654321, "seekshunert fjoueränfüfti duusend trihunert iinjäntwunti")+      , (700000, "soowenhunertduusend")+      , (800000, "oochthunertduusend")+      , (900000, "nüügenhunertduusend")+      ]+    )+  ]
src-test/Text/Numeral/Language/FUR/TestData.hs view
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -23,10 +17,8 @@ -- 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.Grammar ( defaultInflection ) import "numerals" Text.Numeral.Misc ( dec ) import "this" Text.Numeral.Test ( TestData ) @@ -37,7 +29,7 @@  -- Sources: --   http://www.languagesandnumbers.com/how-to-count-in-friulian/en/fur/-cardinals ∷ (Integral i) ⇒ TestData i+cardinals :: (Integral i) => TestData i cardinals =   [ ( "masculine"     , masculine defaultInflection@@ -180,20 +172,20 @@       , (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")+      , (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")+      , (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")+      , (2 * dec 6, "dôs milions")+      , (2 * dec 9, "dôs miliarts")       ]     )   ]
src-test/Text/Numeral/Language/GCF_MTQ/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-antillean-creole-of-martinique/en/gcf-mtq/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
src-test/Text/Numeral/Language/GIL/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-gilbertese/en/gil/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
− src-test/Text/Numeral/Language/GL/TestData.hs
@@ -1,235 +0,0 @@-{-# 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/GLG/TestData.hs view
@@ -0,0 +1,229 @@+{-|+[@ISO639-1@]        gl++[@ISO639-2@]        glg++[@ISO639-3@]        glg++[@Native name@]     Galego++[@English name@]    Galician+-}+module Text.Numeral.Language.GLG.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/GLV/TestData.hs view
@@ -0,0 +1,151 @@+{-|+[@ISO639-1@]        gv++[@ISO639-2@]        glv++[@ISO639-3@]        glv++[@Native name@]     Gaelg++[@English name@]    Manx+-}++module Text.Numeral.Language.GLV.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/GSW/TestData.hs view
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -23,8 +17,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Integral )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -37,7 +30,7 @@   http://www.languagesandnumbers.com/how-to-count-in-swiss-german/en/gsw-che/ -} -cardinals ∷ (Integral i) ⇒ TestData i+cardinals :: (Integral i) => TestData i cardinals =   [ ( "default"     , defaultInflection
− src-test/Text/Numeral/Language/GV/TestData.hs
@@ -1,158 +0,0 @@-{-# 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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -39,7 +33,7 @@ 'waak' means 'add on' -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection@@ -159,7 +153,7 @@       , (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")+      , (600, "lagwa uu tlaalee hlgúnahl")       , (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")
+ src-test/Text/Numeral/Language/HAT/TestData.hs view
@@ -0,0 +1,219 @@+{-|+[@ISO639-1@]        ht++[@ISO639-2@]        hat++[@ISO639-3@]        hat++[@Native name@]     -++[@English name@]    Haitian Creole+-}+module Text.Numeral.Language.HAT.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-haitian-creole/en/hat/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "zero")+      , (1, "youn")+      , (2, "de")+      , (3, "twa")+      , (4, "kat")+      , (5, "senk")+      , (6, "sis")+      , (7, "sèt")+      , (8, "uit")+      , (9, "nèf")+      , (10, "dis")+      , (11, "onz")+      , (12, "douz")+      , (13, "trèz")+      , (14, "katòz")+      , (15, "kenz")+      , (16, "sèz")+      , (17, "disèt")+      , (18, "dizuit")+      , (19, "diznèf")+      , (20, "ven")+      , (21, "venteyen")+      , (22, "vennde")+      , (23, "venntwa")+      , (24, "vennkat")+      , (25, "vennsenk")+      , (26, "vennsis")+      , (27, "vennsèt")+      , (28, "ventuit")+      , (29, "ventnèf")+      , (30, "trant")+      , (31, "tranteyen")+      , (32, "trannde")+      , (33, "tranntwa")+      , (34, "trannkat")+      , (35, "trannsenk")+      , (36, "trannsis")+      , (37, "trannsèt")+      , (38, "trantuit")+      , (39, "trantnèf")+      , (40, "karant")+      , (41, "karanteyen")+      , (42, "karannde")+      , (43, "karanntwa")+      , (44, "karannkat")+      , (45, "karannsenk")+      , (46, "karannsis")+      , (47, "karannsèt")+      , (48, "karantuit")+      , (49, "karantnèf")+      , (50, "senkant")+      , (51, "senkanteyen")+      , (52, "senkannde")+      , (53, "senkanntwa")+      , (54, "senkannkat")+      , (55, "senkannsenk")+      , (56, "senkannsis")+      , (57, "senkannsèt")+      , (58, "senkantuit")+      , (59, "senkantnèf")+      , (60, "swasann")+      , (61, "swasannyoun")+      , (62, "swasannde")+      , (63, "swasanntwa")+      , (64, "swasannkat")+      , (65, "swasannsenk")+      , (66, "swasannsis")+      , (67, "swasannsèt")+      , (68, "swasannuit")+      , (69, "swasannnèf")+      , (70, "swasanndis")+      , (71, "swasannonz")+      , (72, "swasanndisde")+      , (73, "swasanntrèz")+      , (74, "swasannkatòz")+      , (75, "swasannkenz")+      , (76, "swasannsèz")+      , (77, "swasanndissèt")+      , (78, "swasanndizuit")+      , (79, "swasanndiznèf")+      , (80, "katreven")+      , (81, "katreventeyen")+      , (82, "katrevennde")+      , (83, "katrevenntwa")+      , (84, "katrevennkat")+      , (85, "katrevennsenk")+      , (86, "katrevennsis")+      , (87, "katrevennsèt")+      , (88, "katreventuit")+      , (89, "katreventnèf")+      , (90, "katrevendis")+      , (91, "katrevenonz")+      , (92, "katrevendisde")+      , (93, "katreventrèz")+      , (94, "katrevenkatòz")+      , (95, "katrevenkenz")+      , (96, "katrevensèz")+      , (97, "katrevendissèt")+      , (98, "katrevendizuit")+      , (99, "katrevendiznèf")+      , (100, "san")+      , (101, "san en")+      , (102, "san de")+      , (103, "san twa")+      , (104, "san kat")+      , (105, "san senk")+      , (106, "san sis")+      , (107, "san sèt")+      , (108, "san uit")+      , (109, "san nèf")+      , (110, "san dis")+      , (123, "san venntwa")+      , (200, "de san")+      , (300, "twa san")+      , (321, "twa san venteyen")+      , (400, "kat san")+      , (500, "sen san")+      , (600, "si san")+      , (700, "sèt san")+      , (800, "ui san")+      , (900, "nèf san")+      , (909, "nèf san nèf")+      , (990, "nèf san katrevendis")+      , (999, "nèf san katrevendiznèf")+      , (1000, "mil")+      , (1001, "mil youn")+      , (1008, "mil uit")+      , (1234, "mil de san trannkat")+      , (2000, "de mil")+      , (3000, "twa mil")+      , (4000, "kat mil")+      , (4321, "kat mil twa san venteyen")+      , (5000, "senk mil")+      , (6000, "sis mil")+      , (7000, "sèt mil")+      , (8000, "uit mil")+      , (9000, "nèf mil")+      , (10000, "di mil")+      , (12345, "douz mil twa san karannsenk")+      , (20000, "ven mil")+      , (30000, "trant mil")+      , (40000, "karant mil")+      , (50000, "senkant mil")+      , (54321, "senkannkat mil twa san venteyen")+      , (60000, "swasann mil")+      , (70000, "swasanndi mil")+      , (80000, "katreven mil")+      , (90000, "katrevendi mil")+      , (100000, "san mil")+      , (123456, "san venntwa mil kat san senkannsis")+      , (200000, "de san mil")+      , (300000, "twa san mil")+      , (400000, "kat san mil")+      , (500000, "sen san mil")+      , (600000, "si san mil")+      , (654321, "si san senkannkat mil twa san venteyen")+      , (700000, "sèt san mil")+      , (800000, "ui san mil")+      , (900000, "nèf san mil")+      , (1000000, "yon milyon")+      , (1000001, "yon milyon youn")+      , (1234567, "yon milyon de san trannkat mil sen san swasannsèt")+      , (2000000, "de milyon")+      , (3000000, "twa milyon")+      , (4000000, "kat milyon")+      , (5000000, "senk milyon")+      , (6000000, "sis milyon")+      , (7000000, "sèt milyon")+      , (7654321, "sèt milyon si san senkannkat mil twa san venteyen")+      , (8000000, "uit milyon")+      , (9000000, "nèf milyon")+      , (1000000000, "yon milya")+      , (1000000001, "yon milya youn")+      , (2000000000, "de milya")+      , (3000000000, "twa milya")+      , (4000000000, "kat milya")+      , (5000000000, "senk milya")+      , (6000000000, "sis milya")+      , (7000000000, "sèt milya")+      , (8000000000, "uit milya")+      , (9000000000, "nèf milya")+      ]+    )+  ]
− src-test/Text/Numeral/Language/HE/TestData.hs
@@ -1,315 +0,0 @@-{-# 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/HEB/TestData.hs view
@@ -0,0 +1,308 @@+{-|+[@ISO639-1@]        he++[@ISO639-2@]        heb++[@ISO639-3@]        heb++[@Native name@]     עִבְרִית++[@English name@]    Modern Hebrew+-}++module Text.Numeral.Language.HEB.TestData+  ( cardinals+  ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -23,8 +17,8 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Integral, (+) )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "base" Prelude ( Integral )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -34,7 +28,7 @@  -- Sources: --   http://www.languagesandnumbers.com/how-to-count-in-hopi/en/hop/-cardinals ∷ (Integral i) ⇒ TestData i+cardinals :: (Integral i) => TestData i cardinals =   [ ( "default"     , defaultInflection
− src-test/Text/Numeral/Language/HR/TestData.hs
@@ -1,142 +0,0 @@-{-# 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/HRV/TestData.hs view
@@ -0,0 +1,135 @@+{-|+[@ISO639-1@]        hr++[@ISO639-2@]        hrv++[@ISO639-3@]        hrv++[@Native name@]     Hrvatski++[@English name@]    Croatian+-}++module Text.Numeral.Language.HRV.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- HRV - 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
@@ -1,142 +0,0 @@-{-# 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/HUN/TestData.hs view
@@ -0,0 +1,135 @@+{-|+[@ISO639-1@]        hu++[@ISO639-2@]        hun++[@ISO639-3@]        hun++[@Native name@]     magyar++[@English name@]    Hungarian+-}++module Text.Numeral.Language.HUN.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/HUP/TestData.hs view
@@ -0,0 +1,162 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        hup++[@ISO639-3@]        hup++[@Native name@]     -++[@English name@]    Hupa+-}+module Text.Numeral.Language.HUP.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-hupa/en/hup/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "ła’")+      , (2, "nahx")+      , (3, "ta:q’")+      , (4, "dink’")+      , (5, "chwola’")+      , (6, "xosta:n")+      , (7, "xohk’it")+      , (8, "ke:nim")+      , (9, "miq’os-t’aw")+      , (10, "minłung")+      , (11, "minłung-miwah-na:ła’")+      , (12, "minłung-miwah-na:nahx")+      , (13, "minłung-miwah-na:ta:q’")+      , (14, "minłung-miwah-na:dink’")+      , (15, "minłung-miwah-na:chwola’")+      , (16, "minłung-miwah-na:xosta:n")+      , (17, "minłung-miwah-na:xohk’it")+      , (18, "minłung-miwah-na:ke:nim")+      , (19, "minłung-miwah-na:miq’os-t’aw")+      , (20, "nahdiminłung")+      , (21, "nahdiminłung-miwah-na:ła’")+      , (22, "nahdiminłung-miwah-na:nahx")+      , (23, "nahdiminłung-miwah-na:ta:q’")+      , (24, "nahdiminłung-miwah-na:dink’")+      , (25, "nahdiminłung-miwah-na:chwola’")+      , (26, "nahdiminłung-miwah-na:xosta:n")+      , (27, "nahdiminłung-miwah-na:xohk’it")+      , (28, "nahdiminłung-miwah-na:ke:nim")+      , (29, "nahdiminłung-miwah-na:miq’os-t’aw")+      , (30, "ta:q’idiminłung")+      , (31, "ta:q’idiminłung-miwah-na:ła’")+      , (32, "ta:q’idiminłung-miwah-na:nahx")+      , (33, "ta:q’idiminłung-miwah-na:ta:q’")+      , (34, "ta:q’idiminłung-miwah-na:dink’")+      , (35, "ta:q’idiminłung-miwah-na:chwola’")+      , (36, "ta:q’idiminłung-miwah-na:xosta:n")+      , (37, "ta:q’idiminłung-miwah-na:xohk’it")+      , (38, "ta:q’idiminłung-miwah-na:ke:nim")+      , (39, "ta:q’idiminłung-miwah-na:miq’os-t’aw")+      , (40, "dink’idiminłung")+      , (41, "dink’idiminłung-miwah-na:ła’")+      , (42, "dink’idiminłung-miwah-na:nahx")+      , (43, "dink’idiminłung-miwah-na:ta:q’")+      , (44, "dink’idiminłung-miwah-na:dink’")+      , (45, "dink’idiminłung-miwah-na:chwola’")+      , (46, "dink’idiminłung-miwah-na:xosta:n")+      , (47, "dink’idiminłung-miwah-na:xohk’it")+      , (48, "dink’idiminłung-miwah-na:ke:nim")+      , (49, "dink’idiminłung-miwah-na:miq’os-t’aw")+      , (50, "chwola’diminłung")+      , (51, "chwola’diminłung-miwah-na:ła’")+      , (52, "chwola’diminłung-miwah-na:nahx")+      , (53, "chwola’diminłung-miwah-na:ta:q’")+      , (54, "chwola’diminłung-miwah-na:dink’")+      , (55, "chwola’diminłung-miwah-na:chwola’")+      , (56, "chwola’diminłung-miwah-na:xosta:n")+      , (57, "chwola’diminłung-miwah-na:xohk’it")+      , (58, "chwola’diminłung-miwah-na:ke:nim")+      , (59, "chwola’diminłung-miwah-na:miq’os-t’aw")+      , (60, "xosta:ndiminłung")+      , (61, "xosta:ndiminłung-miwah-na:ła’")+      , (62, "xosta:ndiminłung-miwah-na:nahx")+      , (63, "xosta:ndiminłung-miwah-na:ta:q’")+      , (64, "xosta:ndiminłung-miwah-na:dink’")+      , (65, "xosta:ndiminłung-miwah-na:chwola’")+      , (66, "xosta:ndiminłung-miwah-na:xosta:n")+      , (67, "xosta:ndiminłung-miwah-na:xohk’it")+      , (68, "xosta:ndiminłung-miwah-na:ke:nim")+      , (69, "xosta:ndiminłung-miwah-na:miq’os-t’aw")+      , (70, "xohk’e:diminłung")+      , (71, "xohk’e:diminłung-miwah-na:ła’")+      , (72, "xohk’e:diminłung-miwah-na:nahx")+      , (73, "xohk’e:diminłung-miwah-na:ta:q’")+      , (74, "xohk’e:diminłung-miwah-na:dink’")+      , (75, "xohk’e:diminłung-miwah-na:chwola’")+      , (76, "xohk’e:diminłung-miwah-na:xosta:n")+      , (77, "xohk’e:diminłung-miwah-na:xohk’it")+      , (78, "xohk’e:diminłung-miwah-na:ke:nim")+      , (79, "xohk’e:diminłung-miwah-na:miq’os-t’aw")+      , (80, "ke:nimdiminłung")+      , (81, "ke:nimdiminłung-miwah-na:ła’")+      , (82, "ke:nimdiminłung-miwah-na:nahx")+      , (83, "ke:nimdiminłung-miwah-na:ta:q’")+      , (84, "ke:nimdiminłung-miwah-na:dink’")+      , (85, "ke:nimdiminłung-miwah-na:chwola’")+      , (86, "ke:nimdiminłung-miwah-na:xosta:n")+      , (87, "ke:nimdiminłung-miwah-na:xohk’it")+      , (88, "ke:nimdiminłung-miwah-na:ke:nim")+      , (89, "ke:nimdiminłung-miwah-na:miq’os-t’aw")+      , (90, "miq’ost’ahdiminłung")+      , (91, "miq’ost’ahdiminłung-miwah-na:ła’")+      , (92, "miq’ost’ahdiminłung-miwah-na:nahx")+      , (93, "miq’ost’ahdiminłung-miwah-na:ta:q’")+      , (94, "miq’ost’ahdiminłung-miwah-na:dink’")+      , (95, "miq’ost’ahdiminłung-miwah-na:chwola’")+      , (96, "miq’ost’ahdiminłung-miwah-na:xosta:n")+      , (97, "miq’ost’ahdiminłung-miwah-na:xohk’it")+      , (98, "miq’ost’ahdiminłung-miwah-na:ke:nim")+      , (99, "miq’ost’ahdiminłung-miwah-na:miq’os-t’aw")+      , (100, "ła’-dikin")+      , (101, "ła’-dikin-miwah-na:ła’")+      , (102, "ła’-dikin-miwah-na:nahx")+      , (103, "ła’-dikin-miwah-na:ta:q’")+      , (104, "ła’-dikin-miwah-na:dink’")+      , (105, "ła’-dikin-miwah-na:chwola’")+      , (106, "ła’-dikin-miwah-na:xosta:n")+      , (107, "ła’-dikin-miwah-na:xohk’it")+      , (108, "ła’-dikin-miwah-na:ke:nim")+      , (109, "ła’-dikin-miwah-na:miq’os-t’aw")+      , (110, "ła’-dikin-miwah-na:minłung")+      , (123, "ła’-dikin-miwah-na:nahdiminłung-miwah-na:ta:q’")+      , (200, "nahx-dikin")+      , (300, "ta:q’i-dikin")+      , (321, "ta:q’-dikin-miwah-na:nahdiminłung-miwah-na:ła’")+      , (400, "dink’i-dikin")+      , (500, "chwola’-dikin")+      , (600, "xosta:n-dikin")+      , (700, "xohk’e-dikin")+      , (800, "ke:nim-dikin")+      , (900, "miq’ost’ah-dikin")+      , (909, "miq’os-t’aw-dikin-miwah-na:miq’os-t’aw")+      , (990, "miq’os-t’aw-dikin-miwah-na:miq’ost’ahdiminłung")+      , (999, "miq’os-t’aw-dikin-miwah-na:miq’ost’ahdiminłung-miwah-na:miq’os-t’aw")+      , (1000, "minłun-dikin")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/HUR/TestData.hs view
@@ -0,0 +1,149 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        hur++[@Native name@]     Halq̓eméylem, Hul̓q̓umín̓um̓, Hun'qumi'num++[@English name@]    Halkomelem+-}+module Text.Numeral.Language.HUR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-halkomelem/en/hur/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "nuts’a’")+      , (2, "yuse’lu")+      , (3, "lhihw")+      , (4, "xu’athun")+      , (5, "lhq’etsus")+      , (6, "t’xum")+      , (7, "tth’a’kwus")+      , (8, "te’tsus")+      , (9, "toohw")+      , (10, "’apun")+      , (11, "’apun ’i’ kw’ nuts’a’")+      , (12, "’apun ’i’ kw’ yuse’lu")+      , (13, "’apun ’i’ kw’ lhihw")+      , (14, "’apun ’i’ kw’ xu’athun")+      , (15, "’apun ’i’ kw’ lhq’etsus")+      , (16, "’apun ’i’ kw’ t’xum")+      , (17, "’apun ’i’ kw’ tth’a’kwus")+      , (18, "’apun ’i’ kw’ te’tsus")+      , (19, "’apun ’i’ kw’ toohw")+      , (20, "tskw’ush")+      , (21, "tskw’ush ’i’ kw’ nuts’a’")+      , (22, "tskw’ush ’i’ kw’ yuse’lu")+      , (23, "tskw’ush ’i’ kw’ lhihw")+      , (24, "tskw’ush ’i’ kw’ xu’athun")+      , (25, "tskw’ush ’i’ kw’ lhq’etsus")+      , (26, "tskw’ush ’i’ kw’ t’xum")+      , (27, "tskw’ush ’i’ kw’ tth’a’kwus")+      , (28, "tskw’ush ’i’ kw’ te’tsus")+      , (29, "tskw’ush ’i’ kw’ toohw")+      , (30, "lhuhwulhshe’")+      , (31, "lhuhwulhshe’ ’i’ kw’ nuts’a’")+      , (32, "lhuhwulhshe’ ’i’ kw’ yuse’lu")+      , (33, "lhuhwulhshe’ ’i’ kw’ lhihw")+      , (34, "lhuhwulhshe’ ’i’ kw’ xu’athun")+      , (35, "lhuhwulhshe’ ’i’ kw’ lhq’etsus")+      , (36, "lhuhwulhshe’ ’i’ kw’ t’xum")+      , (37, "lhuhwulhshe’ ’i’ kw’ tth’a’kwus")+      , (38, "lhuhwulhshe’ ’i’ kw’ te’tsus")+      , (39, "lhuhwulhshe’ ’i’ kw’ toohw")+      , (40, "xuthunlhshe’")+      , (41, "xuthunlhshe’ ’i’ kw’ nuts’a’")+      , (42, "xuthunlhshe’ ’i’ kw’ yuse’lu")+      , (43, "xuthunlhshe’ ’i’ kw’ lhihw")+      , (44, "xuthunlhshe’ ’i’ kw’ xu’athun")+      , (45, "xuthunlhshe’ ’i’ kw’ lhq’etsus")+      , (46, "xuthunlhshe’ ’i’ kw’ t’xum")+      , (47, "xuthunlhshe’ ’i’ kw’ tth’a’kwus")+      , (48, "xuthunlhshe’ ’i’ kw’ te’tsus")+      , (49, "xuthunlhshe’ ’i’ kw’ toohw")+      , (50, "lhq’utssulhshe’")+      , (51, "lhq’utssulhshe’ ’i’ kw’ nuts’a’")+      , (52, "lhq’utssulhshe’ ’i’ kw’ yuse’lu")+      , (53, "lhq’utssulhshe’ ’i’ kw’ lhihw")+      , (54, "lhq’utssulhshe’ ’i’ kw’ xu’athun")+      , (55, "lhq’utssulhshe’ ’i’ kw’ lhq’etsus")+      , (56, "lhq’utssulhshe’ ’i’ kw’ t’xum")+      , (57, "lhq’utssulhshe’ ’i’ kw’ tth’a’kwus")+      , (58, "lhq’utssulhshe’ ’i’ kw’ te’tsus")+      , (59, "lhq’utssulhshe’ ’i’ kw’ toohw")+      , (60, "t’xumulhshe’")+      , (61, "t’xumulhshe’ ’i’ kw’ nuts’a’")+      , (62, "t’xumulhshe’ ’i’ kw’ yuse’lu")+      , (63, "t’xumulhshe’ ’i’ kw’ lhihw")+      , (64, "t’xumulhshe’ ’i’ kw’ xu’athun")+      , (65, "t’xumulhshe’ ’i’ kw’ lhq’etsus")+      , (66, "t’xumulhshe’ ’i’ kw’ t’xum")+      , (67, "t’xumulhshe’ ’i’ kw’ tth’a’kwus")+      , (68, "t’xumulhshe’ ’i’ kw’ te’tsus")+      , (69, "t’xumulhshe’ ’i’ kw’ toohw")+      , (70, "tth’ukwsulhshe’")+      , (71, "tth’ukwsulhshe’ ’i’ kw’ nuts’a’")+      , (72, "tth’ukwsulhshe’ ’i’ kw’ yuse’lu")+      , (73, "tth’ukwsulhshe’ ’i’ kw’ lhihw")+      , (74, "tth’ukwsulhshe’ ’i’ kw’ xu’athun")+      , (75, "tth’ukwsulhshe’ ’i’ kw’ lhq’etsus")+      , (76, "tth’ukwsulhshe’ ’i’ kw’ t’xum")+      , (77, "tth’ukwsulhshe’ ’i’ kw’ tth’a’kwus")+      , (78, "tth’ukwsulhshe’ ’i’ kw’ te’tsus")+      , (79, "tth’ukwsulhshe’ ’i’ kw’ toohw")+      , (80, "tutssulhshe’")+      , (81, "tutssulhshe’ ’i’ kw’ nuts’a’")+      , (82, "tutssulhshe’ ’i’ kw’ yuse’lu")+      , (83, "tutssulhshe’ ’i’ kw’ lhihw")+      , (84, "tutssulhshe’ ’i’ kw’ xu’athun")+      , (85, "tutssulhshe’ ’i’ kw’ lhq’etsus")+      , (86, "tutssulhshe’ ’i’ kw’ t’xum")+      , (87, "tutssulhshe’ ’i’ kw’ tth’a’kwus")+      , (88, "tutssulhshe’ ’i’ kw’ te’tsus")+      , (89, "tutssulhshe’ ’i’ kw’ toohw")+      , (90, "toohwulhshe’")+      , (91, "toohwulhshe’ ’i’ kw’ nuts’a’")+      , (92, "toohwulhshe’ ’i’ kw’ yuse’lu")+      , (93, "toohwulhshe’ ’i’ kw’ lhihw")+      , (94, "toohwulhshe’ ’i’ kw’ xu’athun")+      , (95, "toohwulhshe’ ’i’ kw’ lhq’etsus")+      , (96, "toohwulhshe’ ’i’ kw’ t’xum")+      , (97, "toohwulhshe’ ’i’ kw’ tth’a’kwus")+      , (98, "toohwulhshe’ ’i’ kw’ te’tsus")+      , (99, "toohwulhshe’ ’i’ kw’ toohw")+      , (100, "nets’uwuts")+      , (101, "nets’uwuts ’i’ kw’ nuts’a’")+      , (102, "nets’uwuts ’i’ kw’ yuse’lu")+      , (103, "nets’uwuts ’i’ kw’ lhihw")+      , (104, "nets’uwuts ’i’ kw’ xu’athun")+      , (105, "nets’uwuts ’i’ kw’ lhq’etsus")+      , (106, "nets’uwuts ’i’ kw’ t’xum")+      , (107, "nets’uwuts ’i’ kw’ tth’a’kwus")+      , (108, "nets’uwuts ’i’ kw’ te’tsus")+      , (109, "nets’uwuts ’i’ kw’ toohw")+      , (110, "nets’uwuts ’i’ kw’ ’apun")+      , (123, "nets’uwuts ’i’ kw’ tskw’ush ’i’ kw’ lhihw")+      ]+    )+  ]
− src-test/Text/Numeral/Language/HY/TestData.hs
@@ -1,208 +0,0 @@-{-# 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/HYE/TestData.hs view
@@ -0,0 +1,202 @@+{-|+[@ISO639-1@]        hy++[@ISO639-2B@]       arm++[@ISO639-2T@]       hye++[@ISO639-3@]        hye++[@Native name@]     հայերեն++[@English name@]    Armenian+-}+module Text.Numeral.Language.HYE.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/IBO/TestData.hs view
@@ -0,0 +1,219 @@+{-|+[@ISO639-1@]        ig++[@ISO639-2@]        ibo++[@ISO639-3@]        ibo++[@Native name@]     Asụsụ Igbo++[@English name@]    Igbo+-}+module Text.Numeral.Language.IBO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-igbo/en/ibo/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "adigi")+      , (1, "otu")+      , (2, "abụọ")+      , (3, "atọ")+      , (4, "anọ")+      , (5, "ise")+      , (6, "isii")+      , (7, "asaa")+      , (8, "asato")+      , (9, "eteghiete")+      , (10, "iri")+      , (11, "iri na otu")+      , (12, "iri na abụọ")+      , (13, "iri na atọ")+      , (14, "iri na anọ")+      , (15, "iri na ise")+      , (16, "iri na isii")+      , (17, "iri na asaa")+      , (18, "iri na asato")+      , (19, "iri na eteghiete")+      , (20, "iri abụọ")+      , (21, "iri abụọ na otu")+      , (22, "iri abụọ na abụọ")+      , (23, "iri abụọ na atọ")+      , (24, "iri abụọ na anọ")+      , (25, "iri abụọ na ise")+      , (26, "iri abụọ na isii")+      , (27, "iri abụọ na asaa")+      , (28, "iri abụọ na asato")+      , (29, "iri abụọ na eteghiete")+      , (30, "iri atọ")+      , (31, "iri atọ na otu")+      , (32, "iri atọ na abụọ")+      , (33, "iri atọ na atọ")+      , (34, "iri atọ na anọ")+      , (35, "iri atọ na ise")+      , (36, "iri atọ na isii")+      , (37, "iri atọ na asaa")+      , (38, "iri atọ na asato")+      , (39, "iri atọ na eteghiete")+      , (40, "iri anọ")+      , (41, "iri anọ na otu")+      , (42, "iri anọ na abụọ")+      , (43, "iri anọ na atọ")+      , (44, "iri anọ na anọ")+      , (45, "iri anọ na ise")+      , (46, "iri anọ na isii")+      , (47, "iri anọ na asaa")+      , (48, "iri anọ na asato")+      , (49, "iri anọ na eteghiete")+      , (50, "iri ise")+      , (51, "iri ise na otu")+      , (52, "iri ise na abụọ")+      , (53, "iri ise na atọ")+      , (54, "iri ise na anọ")+      , (55, "iri ise na ise")+      , (56, "iri ise na isii")+      , (57, "iri ise na asaa")+      , (58, "iri ise na asato")+      , (59, "iri ise na eteghiete")+      , (60, "iri isii")+      , (61, "iri isii na otu")+      , (62, "iri isii na abụọ")+      , (63, "iri isii na atọ")+      , (64, "iri isii na anọ")+      , (65, "iri isii na ise")+      , (66, "iri isii na isii")+      , (67, "iri isii na asaa")+      , (68, "iri isii na asato")+      , (69, "iri isii na eteghiete")+      , (70, "iri asaa")+      , (71, "iri asaa na otu")+      , (72, "iri asaa na abụọ")+      , (73, "iri asaa na atọ")+      , (74, "iri asaa na anọ")+      , (75, "iri asaa na ise")+      , (76, "iri asaa na isii")+      , (77, "iri asaa na asaa")+      , (78, "iri asaa na asato")+      , (79, "iri asaa na eteghiete")+      , (80, "iri asato")+      , (81, "iri asato na otu")+      , (82, "iri asato na abụọ")+      , (83, "iri asato na atọ")+      , (84, "iri asato na anọ")+      , (85, "iri asato na ise")+      , (86, "iri asato na isii")+      , (87, "iri asato na asaa")+      , (88, "iri asato na asato")+      , (89, "iri asato na eteghiete")+      , (90, "iri eteghiete")+      , (91, "iri eteghiete na otu")+      , (92, "iri eteghiete na abụọ")+      , (93, "iri eteghiete na atọ")+      , (94, "iri eteghiete na anọ")+      , (95, "iri eteghiete na ise")+      , (96, "iri eteghiete na isii")+      , (97, "iri eteghiete na asaa")+      , (98, "iri eteghiete na asato")+      , (99, "iri eteghiete na eteghiete")+      , (100, "nnari")+      , (101, "nnari na otu")+      , (102, "nnari na abụọ")+      , (103, "nnari na atọ")+      , (104, "nnari na anọ")+      , (105, "nnari na ise")+      , (106, "nnari na isii")+      , (107, "nnari na asaa")+      , (108, "nnari na asato")+      , (109, "nnari na eteghiete")+      , (110, "nnari na iri")+      , (123, "nnari na iri abụọ na atọ")+      , (200, "nnari abụọ")+      , (300, "nnari atọ")+      , (321, "nnari atọ na iri abụọ na otu")+      , (400, "nnari anọ")+      , (500, "nnari ise")+      , (600, "nnari isii")+      , (700, "nnari asaa")+      , (800, "nnari asato")+      , (900, "nnari eteghiete")+      , (909, "nnari eteghiete na eteghiete")+      , (990, "nnari eteghiete na iri eteghiete")+      , (999, "nnari eteghiete na iri eteghiete na eteghiete")+      , (1000, "puku")+      , (1001, "puku na otu")+      , (1008, "puku na asato")+      , (1234, "puku na nnari abụọ na iri atọ na anọ")+      , (2000, "puku abụọ")+      , (3000, "puku atọ")+      , (4000, "puku anọ")+      , (4321, "puku anọ na nnari atọ na iri abụọ na otu")+      , (5000, "puku ise")+      , (6000, "puku isii")+      , (7000, "puku asaa")+      , (8000, "puku asato")+      , (9000, "puku eteghiete")+      , (10000, "iri puku")+      , (12345, "iri na puku abụọ na nnari atọ na iri anọ na ise")+      , (20000, "iri puku abụọ")+      , (30000, "iri puku atọ")+      , (40000, "iri puku anọ")+      , (50000, "iri puku ise")+      , (54321, "iri ise na puku anọ na nnari atọ na iri abụọ na otu")+      , (60000, "iri puku isii")+      , (70000, "iri puku asaa")+      , (80000, "iri puku asato")+      , (90000, "iri puku eteghiete")+      , (100000, "nnari puku")+      , (123456, "nnari na iri abụọ na puku atọ na nnari anọ na iri ise na isii")+      , (200000, "nnari abụọ puku")+      , (300000, "nnari atọ puku")+      , (400000, "nnari anọ puku")+      , (500000, "nnari ise puku")+      , (600000, "nnari isii puku")+      , (654321, "nnari isii na iri ise na puku anọ na nnari atọ na iri abụọ na otu")+      , (700000, "nnari asaa puku")+      , (800000, "nnari asato puku")+      , (900000, "nnari eteghiete puku")+      , (1000000, "nde")+      , (1000001, "nde na otu")+      , (1234567, "nde na nnari abụọ na iri atọ na puku anọ na nnari ise na iri isii na asaa")+      , (2000000, "nde abụọ")+      , (3000000, "nde atọ")+      , (4000000, "nde anọ")+      , (5000000, "nde ise")+      , (6000000, "nde isii")+      , (7000000, "nde asaa")+      , (7654321, "nde asaa na nnari isii na iri ise na puku anọ na nnari atọ na iri abụọ na otu")+      , (8000000, "nde asato")+      , (9000000, "nde eteghiete")+      , (1000000000, "ijeri")+      , (1000000001, "ijeri na otu")+      , (2000000000, "ijeri abụọ")+      , (3000000000, "ijeri atọ")+      , (4000000000, "ijeri anọ")+      , (5000000000, "ijeri ise")+      , (6000000000, "ijeri isii")+      , (7000000000, "ijeri asaa")+      , (8000000000, "ijeri asato")+      , (9000000000, "ijeri eteghiete")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/IND/TestData.hs view
@@ -0,0 +1,229 @@+{-|+[@ISO639-1@]        id++[@ISO639-2@]        ind++[@ISO639-3@]        ind++[@Native name@]     Bahasa Indonesia++[@English name@]    Indonesian+-}+module Text.Numeral.Language.IND.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-indonesian/en/ind/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "kosong")+      , (1, "satu")+      , (2, "dua")+      , (3, "tiga")+      , (4, "empat")+      , (5, "lima")+      , (6, "enam")+      , (7, "tujuh")+      , (8, "delapan")+      , (9, "sembilan")+      , (10, "sepuluh")+      , (11, "sebelas")+      , (12, "dua belas")+      , (13, "tiga belas")+      , (14, "empat belas")+      , (15, "lima belas")+      , (16, "enam belas")+      , (17, "tujuh belas")+      , (18, "delapan belas")+      , (19, "sembilan belas")+      , (20, "dua puluh")+      , (21, "dua puluh satu")+      , (22, "dua puluh dua")+      , (23, "dua puluh tiga")+      , (24, "dua puluh empat")+      , (25, "dua puluh lima")+      , (26, "dua puluh enam")+      , (27, "dua puluh tujuh")+      , (28, "dua puluh delapan")+      , (29, "dua puluh sembilan")+      , (30, "tiga puluh")+      , (31, "tiga puluh satu")+      , (32, "tiga puluh dua")+      , (33, "tiga puluh tiga")+      , (34, "tiga puluh empat")+      , (35, "tiga puluh lima")+      , (36, "tiga puluh enam")+      , (37, "tiga puluh tujuh")+      , (38, "tiga puluh delapan")+      , (39, "tiga puluh sembilan")+      , (40, "empat puluh")+      , (41, "empat puluh satu")+      , (42, "empat puluh dua")+      , (43, "empat puluh tiga")+      , (44, "empat puluh empat")+      , (45, "empat puluh lima")+      , (46, "empat puluh enam")+      , (47, "empat puluh tujuh")+      , (48, "empat puluh delapan")+      , (49, "empat puluh sembilan")+      , (50, "lima puluh")+      , (51, "lima puluh satu")+      , (52, "lima puluh dua")+      , (53, "lima puluh tiga")+      , (54, "lima puluh empat")+      , (55, "lima puluh lima")+      , (56, "lima puluh enam")+      , (57, "lima puluh tujuh")+      , (58, "lima puluh delapan")+      , (59, "lima puluh sembilan")+      , (60, "enam puluh")+      , (61, "enam puluh satu")+      , (62, "enam puluh dua")+      , (63, "enam puluh tiga")+      , (64, "enam puluh empat")+      , (65, "enam puluh lima")+      , (66, "enam puluh enam")+      , (67, "enam puluh tujuh")+      , (68, "enam puluh delapan")+      , (69, "enam puluh sembilan")+      , (70, "tujuh puluh")+      , (71, "tujuh puluh satu")+      , (72, "tujuh puluh dua")+      , (73, "tujuh puluh tiga")+      , (74, "tujuh puluh empat")+      , (75, "tujuh puluh lima")+      , (76, "tujuh puluh enam")+      , (77, "tujuh puluh tujuh")+      , (78, "tujuh puluh delapan")+      , (79, "tujuh puluh sembilan")+      , (80, "delapan puluh")+      , (81, "delapan puluh satu")+      , (82, "delapan puluh dua")+      , (83, "delapan puluh tiga")+      , (84, "delapan puluh empat")+      , (85, "delapan puluh lima")+      , (86, "delapan puluh enam")+      , (87, "delapan puluh tujuh")+      , (88, "delapan puluh delapan")+      , (89, "delapan puluh sembilan")+      , (90, "sembilan puluh")+      , (91, "sembilan puluh satu")+      , (92, "sembilan puluh dua")+      , (93, "sembilan puluh tiga")+      , (94, "sembilan puluh empat")+      , (95, "sembilan puluh lima")+      , (96, "sembilan puluh enam")+      , (97, "sembilan puluh tujuh")+      , (98, "sembilan puluh delapan")+      , (99, "sembilan puluh sembilan")+      , (100, "seratus")+      , (101, "seratus satu")+      , (102, "seratus dua")+      , (103, "seratus tiga")+      , (104, "seratus empat")+      , (105, "seratus lima")+      , (106, "seratus enam")+      , (107, "seratus tujuh")+      , (108, "seratus delapan")+      , (109, "seratus sembilan")+      , (110, "seratus sepuluh")+      , (123, "seratus dua puluh tiga")+      , (200, "dua ratus")+      , (300, "tiga ratus")+      , (321, "tiga ratus dua puluh satu")+      , (400, "empat ratus")+      , (500, "lima ratus")+      , (600, "enam ratus")+      , (700, "tujuh ratus")+      , (800, "delapan ratus")+      , (900, "sembilan ratus")+      , (909, "sembilan ratus sembilan")+      , (990, "sembilan ratus sembilan puluh")+      , (999, "sembilan ratus sembilan puluh sembilan")+      , (1000, "seribu")+      , (1001, "seribu satu")+      , (1008, "seribu delapan")+      , (1234, "seribu dua ratus tiga puluh empat")+      , (2000, "dua ribu")+      , (3000, "tiga ribu")+      , (4000, "empat ribu")+      , (4321, "empat ribu tiga ratus dua puluh satu")+      , (5000, "lima ribu")+      , (6000, "enam ribu")+      , (7000, "tujuh ribu")+      , (8000, "delapan ribu")+      , (9000, "sembilan ribu")+      , (10000, "sepuluh ribu")+      , (12345, "belas dua ribu tiga ratus empat puluh lima")+      , (20000, "dua puluh ribu")+      , (30000, "tiga puluh ribu")+      , (40000, "empat puluh ribu")+      , (50000, "lima puluh ribu")+      , (54321, "lima puluh empat ribu tiga ratus dua puluh satu")+      , (60000, "enam puluh ribu")+      , (70000, "tujuh puluh ribu")+      , (80000, "delapan puluh ribu")+      , (90000, "sembilan puluh ribu")+      , (100000, "seratus ribu")+      , (123456, "seratus dua puluh tiga ribu empat ratus lima puluh enam")+      , (200000, "dua ratus ribu")+      , (300000, "tiga ratus ribu")+      , (400000, "empat ratus ribu")+      , (500000, "lima ratus ribu")+      , (600000, "enam ratus ribu")+      , (654321, "enam ratus lima puluh empat ribu tiga ratus dua puluh satu")+      , (700000, "tujuh ratus ribu")+      , (800000, "delapan ratus ribu")+      , (900000, "sembilan ratus ribu")+      , (1000000, "sejuta")+      , (1000001, "sejuta satu")+      , (1234567, "sejuta dua ratus tiga puluh empat ribu lima ratus enam puluh tujuh")+      , (2000000, "dua juta")+      , (3000000, "tiga juta")+      , (4000000, "empat juta")+      , (5000000, "lima juta")+      , (6000000, "enam juta")+      , (7000000, "tujuh juta")+      , (7654321, "tujuh juta enam ratus lima puluh empat ribu tiga ratus dua puluh satu")+      , (8000000, "delapan juta")+      , (9000000, "sembilan juta")+      , (1000000000, "milyar")+      , (1000000001, "milyar satu")+      , (2000000000, "dua milyar")+      , (3000000000, "tiga milyar")+      , (4000000000, "empat milyar")+      , (5000000000, "lima milyar")+      , (6000000000, "enam milyar")+      , (7000000000, "tujuh milyar")+      , (8000000000, "delapan milyar")+      , (9000000000, "sembilan milyar")+      , (1000000000000, "seribu milyar")+      , (1000000000001, "seribu milyar satu")+      , (2000000000000, "dua seribu milyar")+      , (3000000000000, "tiga seribu milyar")+      , (4000000000000, "empat seribu milyar")+      , (5000000000000, "lima seribu milyar")+      , (6000000000000, "enam seribu milyar")+      , (7000000000000, "tujuh seribu milyar")+      , (8000000000000, "delapan seribu milyar")+      , (9000000000000, "sembilan seribu milyar")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/INH/TestData.hs view
@@ -0,0 +1,218 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        inh++[@ISO639-3@]        inh++[@Native name@]     -++[@English name@]    Ingush+-}+module Text.Numeral.Language.INH.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-ingush/en/inh/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "цаI")+      , (2, "шиъ")+      , (3, "кхоъ")+      , (4, "диъ")+      , (5, "пхиъ")+      , (6, "ялх")+      , (7, "ворхI")+      , (8, "бапхI")+      , (9, "ийц")+      , (10, "итт")+      , (11, "цхьайтта")+      , (12, "шийтта")+      , (13, "кхойтта")+      , (14, "дийтта")+      , (15, "пхийтта")+      , (16, "ялхайтта")+      , (17, "вупийтта")+      , (18, "бапайтта")+      , (19, "ткъеста")+      , (20, "ткъо")+      , (21, "ткъаь цаI")+      , (22, "ткъаь шиъ")+      , (23, "ткъаь кхоъ")+      , (24, "ткъаь диъ")+      , (25, "ткъаь пхиъ")+      , (26, "ткъаь ялх")+      , (27, "ткъаь ворхI")+      , (28, "ткъаь бапхI")+      , (29, "ткъаь ийц")+      , (30, "ткъаь итт")+      , (31, "ткъаь цхьайтта")+      , (32, "ткъаь шийтта")+      , (33, "ткъаь кхойтта")+      , (34, "ткъаь дийтта")+      , (35, "ткъаь пхийтта")+      , (36, "ткъаь ялхайтта")+      , (37, "ткъаь вупийтта")+      , (38, "ткъаь бапайтта")+      , (39, "ткъаь ткъеста")+      , (40, "шовэткъа")+      , (41, "шовэткъе цаI")+      , (42, "шовэткъе шиъ")+      , (43, "шовэткъе кхоъ")+      , (44, "шовэткъе диъ")+      , (45, "шовэткъе пхиъ")+      , (46, "шовэткъе ялх")+      , (47, "шовэткъе ворхI")+      , (48, "шовэткъе бапхI")+      , (49, "шовэткъе ийц")+      , (50, "шовэткъа итт")+      , (51, "шовэткъе цхьайтта")+      , (52, "шовэткъе шийтта")+      , (53, "шовэткъе кхойтта")+      , (54, "шовэткъе дийтта")+      , (55, "шовэткъе пхийтта")+      , (56, "шовэткъе ялхайтта")+      , (57, "шовэткъе вупийтта")+      , (58, "шовэткъе бапайтта")+      , (59, "шовэткъе ткъеста")+      , (60, "кхоэткъа")+      , (61, "кхоэткъе цаI")+      , (62, "кхоэткъе шиъ")+      , (63, "кхоэткъе кхоъ")+      , (64, "кхоэткъе диъ")+      , (65, "кхоэткъе пхиъ")+      , (66, "кхоэткъе ялх")+      , (67, "кхоэткъе ворхI")+      , (68, "кхоэткъе бапхI")+      , (69, "кхоэткъе ийц")+      , (70, "кхоэткъа итт")+      , (71, "кхоэткъе цхьайтта")+      , (72, "кхоэткъе шийтта")+      , (73, "кхоэткъе кхойтта")+      , (74, "кхоэткъе дийтта")+      , (75, "кхоэткъе пхийтта")+      , (76, "кхоэткъе ялхайтта")+      , (77, "кхоэткъе вупийтта")+      , (78, "кхоэткъе бапайтта")+      , (79, "кхоэткъе ткъеста")+      , (80, "деэткъа")+      , (81, "деэткъе цаI")+      , (82, "деэткъе шиъ")+      , (83, "деэткъе кхоъ")+      , (84, "деэткъе диъ")+      , (85, "деэткъе пхиъ")+      , (86, "деэткъе ялх")+      , (87, "деэткъе ворхI")+      , (88, "деэткъе бапхI")+      , (89, "деэткъе ийц")+      , (90, "деэткъа итт")+      , (91, "деэткъе цхьайтта")+      , (92, "деэткъе шийтта")+      , (93, "деэткъе кхойтта")+      , (94, "деэткъе дийтта")+      , (95, "деэткъе пхийтта")+      , (96, "деэткъе ялхайтта")+      , (97, "деэткъе вупийтта")+      , (98, "деэткъе бапайтта")+      , (99, "деэткъе ткъеста")+      , (100, "бIаь")+      , (101, "цхьа бIаьи цаI")+      , (102, "цхьа бIаьи шиъ")+      , (103, "цхьа бIаьи кхоъ")+      , (104, "цхьа бIаьи диъ")+      , (105, "цхьа бIаьи пхиъ")+      , (106, "цхьа бIаьи ялх")+      , (107, "цхьа бIаьи ворхI")+      , (108, "цхьа бIаьи бапхI")+      , (109, "цхьа бIаьи ийц")+      , (110, "цхьа бIаьи итт")+      , (123, "цхьа бIаьи ткъаь кхоъ")+      , (200, "ши бIаь")+      , (300, "кхо бIаь")+      , (321, "кхо бIаьи ткъаь цаI")+      , (400, "ди бIаь")+      , (500, "пхи бIаь")+      , (600, "ялх бIаь")+      , (700, "ворх бIаь")+      , (800, "бапх бIаь")+      , (900, "ийц бIаь")+      , (909, "ийц бIаьи ийц")+      , (990, "ийц бIаьи деэткъа итт")+      , (999, "ийц бIаьи деэткъе ткъеста")+      , (1000, "эзап")+      , (1001, "эзап цаI")+      , (1008, "эзап бапхI")+      , (1234, "эзап ши бIаьи ткъаь дийтта")+      , (2000, "ши эзап")+      , (3000, "кхо эзап")+      , (4000, "ди эзап")+      , (4321, "ди эзап кхо бIаьи ткъаь цаI")+      , (5000, "пхи эзап")+      , (6000, "ялх эзап")+      , (7000, "ворх эзап")+      , (8000, "бапх эзап")+      , (9000, "ийц эзап")+      , (10000, "итт эзап")+      , (12345, "шийтта эзап кхо бIаьи шовэткъе пхиъ")+      , (20000, "ткъо эзап")+      , (30000, "ткъаь итт эзап")+      , (40000, "шовэткъа эзап")+      , (50000, "шовэткъа итт эзап")+      , (54321, "шовэткъе дийтта эзап кхо бIаьи ткъаь цаI")+      , (60000, "кхоэткъа эзап")+      , (70000, "кхоэткъа итт эзап")+      , (80000, "деэткъа эзап")+      , (90000, "деэткъа итт эзап")+      , (100000, "цхьа бIаьи эзап")+      , (123456, "цхьа бIаьи ткъаь кхо эзап ди бIаьи шовэткъе ялхайтта")+      , (200000, "ши бIаьи эзап")+      , (300000, "кхо бIаьи эзап")+      , (400000, "ди бIаьи эзап")+      , (500000, "пхи бIаьи эзап")+      , (600000, "ялх бIаьи эзап")+      , (654321, "ялх бIаьи шовэткъе дийтта эзап кхо бIаьи ткъаь цаI")+      , (700000, "ворх бIаьи эзап")+      , (800000, "бапх бIаьи эзап")+      , (900000, "ийц бIаьи эзап")+      , (1000000, "миллион")+      , (1000001, "миллион цаI")+      , (1234567, "миллион ши бIаьи ткъаь дийтта эзап пхи бIаьи кхоэткъе ворхI")+      , (2000000, "ши миллион")+      , (3000000, "кхо миллион")+      , (4000000, "ди миллион")+      , (5000000, "пхи миллион")+      , (6000000, "ялх миллион")+      , (7000000, "ворх миллион")+      , (7654321, "ворх миллион ялх бIаьи шовэткъе дийтта эзап кхо бIаьи ткъаь цаI")+      , (8000000, "бапх миллион")+      , (9000000, "ийц миллион")+      , (1000000000, "миллиард")+      , (1000000001, "миллиард цаI")+      , (2000000000, "ши миллиард")+      , (3000000000, "кхо миллиард")+      , (4000000000, "ди миллиард")+      , (5000000000, "пхи миллиард")+      , (6000000000, "ялх миллиард")+      , (7000000000, "ворх миллиард")+      , (8000000000, "бапх миллиард")+      , (9000000000, "ийц миллиард")+      ]+    )+  ]
− src-test/Text/Numeral/Language/IT/TestData.hs
@@ -1,295 +0,0 @@-{-# 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/ITA/TestData.hs view
@@ -0,0 +1,287 @@+{-|+[@ISO639-1@]        it++[@ISO639-2B@]       ita++[@ISO639-3@]        ita++[@Native name@]     Italiano++[@English name@]    Italian+-}++module Text.Numeral.Language.ITA.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar ( 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/IZH/TestData.hs view
@@ -0,0 +1,139 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        izh++[@Native name@]     ižoran keel++[@English name@]    Ingrian+-}+module Text.Numeral.Language.IZH.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-ingrian/en/izh/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "null")+      , (1, "üks")+      , (2, "kaks")+      , (3, "kold")+      , (4, "neljä")+      , (5, "viis")+      , (6, "kuus")+      , (7, "seitsemän")+      , (8, "kaheksan")+      , (9, "üheksän")+      , (10, "kümmenän")+      , (11, "yksitoista")+      , (12, "kakstoist")+      , (13, "koldtoist")+      , (14, "neljätoist")+      , (15, "viistoist")+      , (16, "kuustoist")+      , (17, "seitsemäntoist")+      , (18, "kaheksantoist")+      , (19, "üheksäntoist")+      , (20, "kakskümmend")+      , (21, "kakskümmend üks")+      , (22, "kakskümmend kaks")+      , (23, "kakskümmend kold")+      , (24, "kakskümmend neljä")+      , (25, "kakskümmend viis")+      , (26, "kakskümmend kuus")+      , (27, "kakskümmend seitsemän")+      , (28, "kakskümmend kaheksan")+      , (29, "kakskümmend üheksän")+      , (30, "koldkümmend")+      , (31, "koldkümmend üks")+      , (32, "koldkümmend kaks")+      , (33, "koldkümmend kold")+      , (34, "koldkümmend neljä")+      , (35, "koldkümmend viis")+      , (36, "koldkümmend kuus")+      , (37, "koldkümmend seitsemän")+      , (38, "koldkümmend kaheksan")+      , (39, "koldkümmend üheksän")+      , (40, "neljäkümmend")+      , (41, "neljäkümmend üks")+      , (42, "neljäkümmend kaks")+      , (43, "neljäkümmend kold")+      , (44, "neljäkümmend neljä")+      , (45, "neljäkümmend viis")+      , (46, "neljäkümmend kuus")+      , (47, "neljäkümmend seitsemän")+      , (48, "neljäkümmend kaheksan")+      , (49, "neljäkümmend üheksän")+      , (50, "viiskümmend")+      , (51, "viiskümmend üks")+      , (52, "viiskümmend kaks")+      , (53, "viiskümmend kold")+      , (54, "viiskümmend neljä")+      , (55, "viiskümmend viis")+      , (56, "viiskümmend kuus")+      , (57, "viiskümmend seitsemän")+      , (58, "viiskümmend kaheksan")+      , (59, "viiskümmend üheksän")+      , (60, "kuuskümmend")+      , (61, "kuuskümmend üks")+      , (62, "kuuskümmend kaks")+      , (63, "kuuskümmend kold")+      , (64, "kuuskümmend neljä")+      , (65, "kuuskümmend viis")+      , (66, "kuuskümmend kuus")+      , (67, "kuuskümmend seitsemän")+      , (68, "kuuskümmend kaheksan")+      , (69, "kuuskümmend üheksän")+      , (70, "seitsemänkümmend")+      , (71, "seitsemänkümmend üks")+      , (72, "seitsemänkümmend kaks")+      , (73, "seitsemänkümmend kold")+      , (74, "seitsemänkümmend neljä")+      , (75, "seitsemänkümmend viis")+      , (76, "seitsemänkümmend kuus")+      , (77, "seitsemänkümmend seitsemän")+      , (78, "seitsemänkümmend kaheksan")+      , (79, "seitsemänkümmend üheksän")+      , (80, "kaheksankümmend")+      , (81, "kaheksankümmend üks")+      , (82, "kaheksankümmend kaks")+      , (83, "kaheksankümmend kold")+      , (84, "kaheksankümmend neljä")+      , (85, "kaheksankümmend viis")+      , (86, "kaheksankümmend kuus")+      , (87, "kaheksankümmend seitsemän")+      , (88, "kaheksankümmend kaheksan")+      , (89, "kaheksankümmend üheksän")+      , (90, "üheksänkümmend")+      , (91, "üheksänkümmend üks")+      , (92, "üheksänkümmend kaks")+      , (93, "üheksänkümmend kold")+      , (94, "üheksänkümmend neljä")+      , (95, "üheksänkümmend viis")+      , (96, "üheksänkümmend kuus")+      , (97, "üheksänkümmend seitsemän")+      , (98, "üheksänkümmend kaheksan")+      , (99, "üheksänkümmend üheksän")+      , (100, "sada")+      ]+    )+  ]
− src-test/Text/Numeral/Language/JA/TestData.hs
@@ -1,217 +0,0 @@-{-# 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/JPN/TestData.hs view
@@ -0,0 +1,211 @@+{-|+[@ISO639-1@]        ja++[@ISO639-2B@]       jpn++[@ISO639-3@]        jpn++[@Native name@]     日本語++[@English name@]    Japanese+-}++module Text.Numeral.Language.JPN.TestData+    ( preferred_cardinals+    , kanji_cardinals+    , daiji_cardinals+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude     ( Num, Integral )+import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- JPN+--------------------------------------------------------------------------------++{-+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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-bezhta/en/kap/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
src-test/Text/Numeral/Language/KEA/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-cape-verdean-creole/en/kea/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/KLB/TestData.hs view
@@ -0,0 +1,175 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        klb++[@Native name@]     Koléew Ñaja'++[@English name@]    Kiliwa+-}+module Text.Numeral.Language.KLB.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-kiliwa/en/lkb/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "msig")+      , (2, "juwak")+      , (3, "jmi’k")+      , (4, "mnak")+      , (5, "salchipam")+      , (6, "msigl paayp")+      , (7, "juwakl paayp")+      , (8, "jmi’kl paayp")+      , (9, "msigl tmat")+      , (10, "chipam msig")+      , (11, "chipam msig, msig tmaljaa")+      , (12, "chipam msig, juwak tmaljaa")+      , (13, "chipam msig, jmi’k tmaljaa")+      , (14, "chipam msig, mnak tmaljaa")+      , (15, "chipam msig, salchipam tmaljaa")+      , (16, "chipam msig, msigl paayp tmaljaa")+      , (17, "chipam msig, juwakl paayp tmaljaa")+      , (18, "chipam msig, jmi’kl paayp tmaljaa")+      , (19, "chipam msig, msigl tmat tmaljaa")+      , (20, "chipam juwak")+      , (21, "chipam juwak, msig tmaljaa")+      , (22, "chipam juwak, juwak tmaljaa")+      , (23, "chipam juwak, jmi’k tmaljaa")+      , (24, "chipam juwak, mnak tmaljaa")+      , (25, "chipam juwak, salchipam tmaljaa")+      , (26, "chipam juwak, msigl paayp tmaljaa")+      , (27, "chipam juwak, juwakl paayp tmaljaa")+      , (28, "chipam juwak, jmi’kl paayp tmaljaa")+      , (29, "chipam juwak, msigl tmat tmaljaa")+      , (30, "chipam jmi’k")+      , (31, "chipam jmi’k, msig tmaljaa")+      , (32, "chipam jmi’k, juwak tmaljaa")+      , (33, "chipam jmi’k, jmi’k tmaljaa")+      , (34, "chipam jmi’k, mnak tmaljaa")+      , (35, "chipam jmi’k, salchipam tmaljaa")+      , (36, "chipam jmi’k, msigl paayp tmaljaa")+      , (37, "chipam jmi’k, juwakl paayp tmaljaa")+      , (38, "chipam jmi’k, jmi’kl paayp tmaljaa")+      , (39, "chipam jmi’k, msigl tmat tmaljaa")+      , (40, "chipam mnak")+      , (41, "chipam mnak, msig tmaljaa")+      , (42, "chipam mnak, juwak tmaljaa")+      , (43, "chipam mnak, jmi’k tmaljaa")+      , (44, "chipam mnak, mnak tmaljaa")+      , (45, "chipam mnak, salchipam tmaljaa")+      , (46, "chipam mnak, msigl paayp tmaljaa")+      , (47, "chipam mnak, juwakl paayp tmaljaa")+      , (48, "chipam mnak, jmi’kl paayp tmaljaa")+      , (49, "chipam mnak, msigl tmat tmaljaa")+      , (50, "chipam salchipam")+      , (51, "chipam salchipam, msig tmaljaa")+      , (52, "chipam salchipam, juwak tmaljaa")+      , (53, "chipam salchipam, jmi’k tmaljaa")+      , (54, "chipam salchipam, mnak tmaljaa")+      , (55, "chipam salchipam, salchipam tmaljaa")+      , (56, "chipam salchipam, msigl paayp tmaljaa")+      , (57, "chipam salchipam, juwakl paayp tmaljaa")+      , (58, "chipam salchipam, jmi’kl paayp tmaljaa")+      , (59, "chipam salchipam, msigl tmat tmaljaa")+      , (60, "chipam msigl paayp")+      , (61, "chipam msigl paayp, msig tmaljaa")+      , (62, "chipam msigl paayp, juwak tmaljaa")+      , (63, "chipam msigl paayp, jmi’k tmaljaa")+      , (64, "chipam msigl paayp, mnak tmaljaa")+      , (65, "chipam msigl paayp, salchipam tmaljaa")+      , (66, "chipam msigl paayp, msigl paayp tmaljaa")+      , (67, "chipam msigl paayp, juwakl paayp tmaljaa")+      , (68, "chipam msigl paayp, jmi’kl paayp tmaljaa")+      , (69, "chipam msigl paayp, msigl tmat tmaljaa")+      , (70, "chipam juwakl paayb")+      , (71, "chipam juwakl paayb, msig tmaljaa")+      , (72, "chipam juwakl paayb, juwak tmaljaa")+      , (73, "chipam juwakl paayb, jmi’k tmaljaa")+      , (74, "chipam juwakl paayb, mnak tmaljaa")+      , (75, "chipam juwakl paayb, salchipam tmaljaa")+      , (76, "chipam juwakl paayb, msigl paayp tmaljaa")+      , (77, "chipam juwakl paayb, juwakl paayp tmaljaa")+      , (78, "chipam juwakl paayb, jmi’kl paayp tmaljaa")+      , (79, "chipam juwakl paayb, msigl tmat tmaljaa")+      , (80, "chipam jmi’kl paayb")+      , (81, "chipam jmi’kl paayb, msig tmaljaa")+      , (82, "chipam jmi’kl paayb, juwak tmaljaa")+      , (83, "chipam jmi’kl paayb, jmi’k tmaljaa")+      , (84, "chipam jmi’kl paayb, mnak tmaljaa")+      , (85, "chipam jmi’kl paayb, salchipam tmaljaa")+      , (86, "chipam jmi’kl paayb, msigl paayp tmaljaa")+      , (87, "chipam jmi’kl paayb, juwakl paayp tmaljaa")+      , (88, "chipam jmi’kl paayb, jmi’kl paayp tmaljaa")+      , (89, "chipam jmi’kl paayb, msigl tmat tmaljaa")+      , (90, "chipam msigl tmat")+      , (91, "chipam msigl tmat, msig tmaljaa")+      , (92, "chipam msigl tmat, juwak tmaljaa")+      , (93, "chipam msigl tmat, jmi’k tmaljaa")+      , (94, "chipam msigl tmat, mnak tmaljaa")+      , (95, "chipam msigl tmat, salchipam tmaljaa")+      , (96, "chipam msigl tmat, msigl paayp tmaljaa")+      , (97, "chipam msigl tmat, juwakl paayp tmaljaa")+      , (98, "chipam msigl tmat, jmi’kl paayp tmaljaa")+      , (99, "chipam msigl tmat, msigl tmat tmaljaa")+      , (100, "chipam msig u’ kun yuu chipam msig")+      , (101, "chipam msig u’ kun yuu chipam msig, msig tmaljaa")+      , (102, "chipam msig u’ kun yuu chipam msig, juwak tmaljaa")+      , (103, "chipam msig u’ kun yuu chipam msig, jmi’k tmaljaa")+      , (104, "chipam msig u’ kun yuu chipam msig, mnak tmaljaa")+      , (105, "chipam msig u’ kun yuu chipam msig, salchipam tmaljaa")+      , (106, "chipam msig u’ kun yuu chipam msig, msigl paayp tmaljaa")+      , (107, "chipam msig u’ kun yuu chipam msig, juwakl paayp tmaljaa")+      , (108, "chipam msig u’ kun yuu chipam msig, jmi’kl paayp tmaljaa")+      , (109, "chipam msig u’ kun yuu chipam msig, msigl tmat tmaljaa")+      , (110, "chipam msig u’ kun yuu chipam msig, chipam msig")+      , (123, "chipam msig u’ kun yuu chipam msig, chipam juwak, jmi’k tmaljaa")+      , (200, "chipam msig u’ kun yuu chipam juwak")+      , (300, "chipam msig u’ kun yuu chipam jmi’k")+      , (321, "chipam msig u’ kun yuu chipam jmi’k, chipam juwak, msig tmaljaa")+      , (400, "chipam msig u’ kun yuu chipam mnak")+      , (500, "chipam msig u’ kun yuu chipam salchipam")+      , (600, "chipam msig u’ kun yuu chipam msigl paayp")+      , (700, "chipam msig u’ kun yuu chipam juwakl paayp")+      , (800, "chipam msig u’ kun yuu chipam jmi’kl paayp")+      , (900, "chipam msig u’ kun yuu chipam msigl tmat")+      , (909, "chipam msig u’ kun yuu chipam msigl tmat, msigl tmat tmaljaa")+      , (990, "chipam msig u’ kun yuu chipam msigl tmat, chipam msigl tmat")+      , (999, "chipam msig u’ kun yuu chipam msigl tmat, chipam msigl tmat, msigl tmat tmaljaa")+      , (1000, "chipam msig u’ kuetet msig")+      , (1001, "chipam msig u’ kuetet msig, msig tmaljaa")+      , (1008, "chipam msig u’ kuetet msig, jmi’kl paayp tmaljaa")+      , (1234, "chipam msig u’ kuetet msig, chipam msig u’ kun yuu chipam juwak, chipam jmi’k, mnak tmaljaa")+      , (2000, "chipam msig u’ kuetet juwak")+      , (3000, "chipam msig u’ kuetet jmi’k")+      , (4000, "chipam msig u’ kuetet mnak")+      , (4321, "chipam msig u’ kuetet mnak, chipam msig u’ kun yuu chipam jmi’k, chipam juwak, msig tmaljaa")+      , (5000, "chipam msig u’ kuetet salchipam")+      , (6000, "chipam msig u’ kuetet msigl paayp")+      , (7000, "chipam msig u’ kuetet juwakl paayp")+      , (8000, "chipam msig u’ kuetet jmi’kl paayp")+      , (9000, "chipam msig u’ kuetet msigl tmat")+      , (10000, "chipam msig u’ kuetet chipam msig")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/KMR/TestData.hs view
@@ -0,0 +1,209 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        kmr++[@Native name@]     -++[@English name@]    Kurmanji+-}+module Text.Numeral.Language.KMR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-northern-kurdish/en/kmr/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "sifir")+      , (1, "yek")+      , (2, "du")+      , (3, "sê")+      , (4, "çar")+      , (5, "pênc")+      , (6, "şeş")+      , (7, "heft")+      , (8, "heşt")+      , (9, "neh")+      , (10, "deh")+      , (11, "yanzdeh")+      , (12, "dwanzdeh")+      , (13, "sêzdeh")+      , (14, "çardeh")+      , (15, "panzdeh")+      , (16, "şanzdeh")+      , (17, "hivdeh")+      , (18, "hijdeh")+      , (19, "nozdeh")+      , (20, "bîst")+      , (21, "bîst û yek")+      , (22, "bîst û du")+      , (23, "bîst û sê")+      , (24, "bîst û çar")+      , (25, "bîst û pênc")+      , (26, "bîst û şeş")+      , (27, "bîst û heft")+      , (28, "bîst û heşt")+      , (29, "bîst û neh")+      , (30, "sî")+      , (31, "sî û yek")+      , (32, "sî û du")+      , (33, "sî û sê")+      , (34, "sî û çar")+      , (35, "sî û pênc")+      , (36, "sî û şeş")+      , (37, "sî û heft")+      , (38, "sî û heşt")+      , (39, "sî û neh")+      , (40, "çil")+      , (41, "çil û yek")+      , (42, "çil û du")+      , (43, "çil û sê")+      , (44, "çil û çar")+      , (45, "çil û pênc")+      , (46, "çil û şeş")+      , (47, "çil û heft")+      , (48, "çil û heşt")+      , (49, "çil û neh")+      , (50, "pêncî")+      , (51, "pêncî û yek")+      , (52, "pêncî û du")+      , (53, "pêncî û sê")+      , (54, "pêncî û çar")+      , (55, "pêncî û pênc")+      , (56, "pêncî û şeş")+      , (57, "pêncî û heft")+      , (58, "pêncî û heşt")+      , (59, "pêncî û neh")+      , (60, "şêst")+      , (61, "şêst û yek")+      , (62, "şêst û du")+      , (63, "şêst û sê")+      , (64, "şêst û çar")+      , (65, "şêst û pênc")+      , (66, "şêst û şeş")+      , (67, "şêst û heft")+      , (68, "şêst û heşt")+      , (69, "şêst û neh")+      , (70, "heftê")+      , (71, "heftê û yek")+      , (72, "heftê û du")+      , (73, "heftê û sê")+      , (74, "heftê û çar")+      , (75, "heftê û pênc")+      , (76, "heftê û şeş")+      , (77, "heftê û heft")+      , (78, "heftê û heşt")+      , (79, "heftê û neh")+      , (80, "heştê")+      , (81, "heştê û yek")+      , (82, "heştê û du")+      , (83, "heştê û sê")+      , (84, "heştê û çar")+      , (85, "heştê û pênc")+      , (86, "heştê û şeş")+      , (87, "heştê û heft")+      , (88, "heştê û heşt")+      , (89, "heştê û neh")+      , (90, "nod")+      , (91, "nod û yek")+      , (92, "nod û du")+      , (93, "nod û sê")+      , (94, "nod û çar")+      , (95, "nod û pênc")+      , (96, "nod û şeş")+      , (97, "nod û heft")+      , (98, "nod û heşt")+      , (99, "nod û neh")+      , (100, "sed")+      , (101, "sed û yek")+      , (102, "sed û du")+      , (103, "sed û sê")+      , (104, "sed û çar")+      , (105, "sed û pênc")+      , (106, "sed û şeş")+      , (107, "sed û heft")+      , (108, "sed û heşt")+      , (109, "sed û neh")+      , (110, "sed û deh")+      , (123, "sed û bîst û sê")+      , (200, "dused")+      , (300, "sêsed")+      , (321, "sêsed û bîst û yek")+      , (400, "çarsed")+      , (500, "pêncsed")+      , (600, "şeşsed")+      , (700, "heftsed")+      , (800, "heştsed")+      , (900, "nehsed")+      , (909, "nehsed û neh")+      , (990, "nehsed û nod")+      , (999, "nehsed û nod û neh")+      , (1000, "hezar")+      , (1001, "hezar û yek")+      , (1008, "hezar û heşt")+      , (1234, "hezar û dused û sî û çar")+      , (2000, "du hezar")+      , (3000, "sê hezar")+      , (4000, "çar hezar")+      , (4321, "çar hezar û sêsed û bîst û yek")+      , (5000, "pênc hezar")+      , (6000, "şeş hezar")+      , (7000, "heft hezar")+      , (8000, "heşt hezar")+      , (9000, "neh hezar")+      , (10000, "deh hezar")+      , (12345, "dwanzdeh hezar û sêsed û çil û pênc")+      , (20000, "bîst hezar")+      , (30000, "sî hezar")+      , (40000, "çil hezar")+      , (50000, "pêncî hezar")+      , (54321, "pêncî û çar hezar û sêsed û bîst û yek")+      , (60000, "şêst hezar")+      , (70000, "heftê hezar")+      , (80000, "heştê hezar")+      , (90000, "nod hezar")+      , (100000, "sed hezar")+      , (123456, "sed û bîst û sê hezar û çarsed û pêncî û şeş")+      , (200000, "dused hezar")+      , (300000, "sêsed hezar")+      , (400000, "çarsed hezar")+      , (500000, "pêncsed hezar")+      , (600000, "şeşsed hezar")+      , (654321, "şeşsed û pêncî û çar hezar û sêsed û bîst û yek")+      , (700000, "heftsed hezar")+      , (800000, "heştsed hezar")+      , (900000, "nehsed hezar")+      , (1000000, "milyon")+      , (1000001, "milyon û yek")+      , (1234567, "milyon û dused û sî û çar hezar û pêncsed û şêst û heft")+      , (2000000, "du milyon")+      , (3000000, "sê milyon")+      , (4000000, "çar milyon")+      , (5000000, "pênc milyon")+      , (6000000, "şeş milyon")+      , (7000000, "heft milyon")+      , (7654321, "heft milyon û şeşsed û pêncî û çar hezar û sêsed û bîst û yek")+      , (8000000, "heşt milyon")+      , (9000000, "neh milyon")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/KRL/TestData.hs view
@@ -0,0 +1,138 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        krl++[@ISO639-3@]        krl++[@Native name@]     karjala, karjal, kariela++[@English name@]    Karelian+-}+module Text.Numeral.Language.KRL.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-karelian/en/krl/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "yksi")+      , (2, "kakši")+      , (3, "kolme")+      , (4, "neljjä")+      , (5, "viizi")+      , (6, "kuuǯi")+      , (7, "seiččemän")+      , (8, "kahekšan")+      , (9, "yhekšän")+      , (10, "kymmenen")+      , (11, "yksitoista")+      , (12, "kakšitoista")+      , (13, "kolmetoista")+      , (14, "neljjätoista")+      , (15, "viiztoista")+      , (16, "kuuǯitoista")+      , (17, "seiččemäntoista")+      , (18, "kahekšantoista")+      , (19, "yhekšäntoista")+      , (20, "kakšikymmendä")+      , (21, "kakšikymmendä yksi")+      , (22, "kakšikymmendä kakši")+      , (23, "kakšikymmendä kolme")+      , (24, "kakšikymmendä neljjä")+      , (25, "kakšikymmendä viizi")+      , (26, "kakšikymmendä kuuǯi")+      , (27, "kakšikymmendä seiččemän")+      , (28, "kakšikymmendä kahekšan")+      , (29, "kakšikymmendä yhekšän")+      , (30, "kolmekymmendä")+      , (31, "kolmekymmendä yksi")+      , (32, "kolmekymmendä kakši")+      , (33, "kolmekymmendä kolme")+      , (34, "kolmekymmendä neljjä")+      , (35, "kolmekymmendä viizi")+      , (36, "kolmekymmendä kuuǯi")+      , (37, "kolmekymmendä seiččemän")+      , (38, "kolmekymmendä kahekšan")+      , (39, "kolmekymmendä yhekšän")+      , (40, "neljjäkymmendä")+      , (41, "neljjäkymmendä yksi")+      , (42, "neljjäkymmendä kakši")+      , (43, "neljjäkymmendä kolme")+      , (44, "neljjäkymmendä neljjä")+      , (45, "neljjäkymmendä viizi")+      , (46, "neljjäkymmendä kuuǯi")+      , (47, "neljjäkymmendä seiččemän")+      , (48, "neljjäkymmendä kahekšan")+      , (49, "neljjäkymmendä yhekšän")+      , (50, "viizikymmendä")+      , (51, "viizikymmendä yksi")+      , (52, "viizikymmendä kakši")+      , (53, "viizikymmendä kolme")+      , (54, "viizikymmendä neljjä")+      , (55, "viizikymmendä viizi")+      , (56, "viizikymmendä kuuǯi")+      , (57, "viizikymmendä seiččemän")+      , (58, "viizikymmendä kahekšan")+      , (59, "viizikymmendä yhekšän")+      , (60, "kuuǯikymmendä")+      , (61, "kuuǯikymmendä yksi")+      , (62, "kuuǯikymmendä kakši")+      , (63, "kuuǯikymmendä kolme")+      , (64, "kuuǯikymmendä neljjä")+      , (65, "kuuǯikymmendä viizi")+      , (66, "kuuǯikymmendä kuuǯi")+      , (67, "kuuǯikymmendä seiččemän")+      , (68, "kuuǯikymmendä kahekšan")+      , (69, "kuuǯikymmendä yhekšän")+      , (70, "seiččemänkymmendä")+      , (71, "seiččemänkymmendä yksi")+      , (72, "seiččemänkymmendä kakši")+      , (73, "seiččemänkymmendä kolme")+      , (74, "seiččemänkymmendä neljjä")+      , (75, "seiččemänkymmendä viizi")+      , (76, "seiččemänkymmendä kuuǯi")+      , (77, "seiččemänkymmendä seiččemän")+      , (78, "seiččemänkymmendä kahekšan")+      , (79, "seiččemänkymmendä yhekšän")+      , (80, "kahekšankymmendä")+      , (81, "kahekšankymmendä yksi")+      , (82, "kahekšankymmendä kakši")+      , (83, "kahekšankymmendä kolme")+      , (84, "kahekšankymmendä neljjä")+      , (85, "kahekšankymmendä viizi")+      , (86, "kahekšankymmendä kuuǯi")+      , (87, "kahekšankymmendä seiččemän")+      , (88, "kahekšankymmendä kahekšan")+      , (89, "kahekšankymmendä yhekšän")+      , (90, "yhekšänkymmendä")+      , (91, "yhekšänkymmendä yksi")+      , (92, "yhekšänkymmendä kakši")+      , (93, "yhekšänkymmendä kolme")+      , (94, "yhekšänkymmendä neljjä")+      , (95, "yhekšänkymmendä viizi")+      , (96, "yhekšänkymmendä kuuǯi")+      , (97, "yhekšänkymmendä seiččemän")+      , (98, "yhekšänkymmendä kahekšan")+      , (99, "yhekšänkymmendä yhekšän")+      , (100, "šada")+      ]+    )+  ]
− src-test/Text/Numeral/Language/LA/TestData.hs
@@ -1,148 +0,0 @@-{-# 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/LAT/TestData.hs view
@@ -0,0 +1,141 @@+{-|+[@ISO639-1@]        la++[@ISO639-2B@]       lat++[@ISO639-3@]        lat++[@Native name@]     Latine++[@English name@]    Latin+-}++module Text.Numeral.Language.LAT.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/LAV/TestData.hs view
@@ -0,0 +1,239 @@+{-|+[@ISO639-1@]        lv++[@ISO639-2@]        lav++[@ISO639-3@]        lav++[@Native name@]     latviešu valoda++[@English name@]    Latvian+-}+module Text.Numeral.Language.LAV.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-latvian/en/lav/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "nulle")+      , (1, "viens")+      , (2, "divi")+      , (3, "trīs")+      , (4, "četri")+      , (5, "pieci")+      , (6, "seši")+      , (7, "septiņi")+      , (8, "astoņi")+      , (9, "deviņi")+      , (10, "desmit")+      , (11, "vienpadsmit")+      , (12, "divpadsmit")+      , (13, "trīspadsmit")+      , (14, "četrpadsmit")+      , (15, "piecpadsmit")+      , (16, "sešpadsmit")+      , (17, "septiņpadsmit")+      , (18, "astoņpadsmit")+      , (19, "deviņpadsmit")+      , (20, "divdesmit")+      , (21, "divdesmit viens")+      , (22, "divdesmit divi")+      , (23, "divdesmit trīs")+      , (24, "divdesmit četri")+      , (25, "divdesmit pieci")+      , (26, "divdesmit seši")+      , (27, "divdesmit septiņi")+      , (28, "divdesmit astoņi")+      , (29, "divdesmit deviņi")+      , (30, "trīsdesmit")+      , (31, "trīsdesmit viens")+      , (32, "trīsdesmit divi")+      , (33, "trīsdesmit trīs")+      , (34, "trīsdesmit četri")+      , (35, "trīsdesmit pieci")+      , (36, "trīsdesmit seši")+      , (37, "trīsdesmit septiņi")+      , (38, "trīsdesmit astoņi")+      , (39, "trīsdesmit deviņi")+      , (40, "četrdesmit")+      , (41, "četrdesmit viens")+      , (42, "četrdesmit divi")+      , (43, "četrdesmit trīs")+      , (44, "četrdesmit četri")+      , (45, "četrdesmit pieci")+      , (46, "četrdesmit seši")+      , (47, "četrdesmit septiņi")+      , (48, "četrdesmit astoņi")+      , (49, "četrdesmit deviņi")+      , (50, "piecdesmit")+      , (51, "piecdesmit viens")+      , (52, "piecdesmit divi")+      , (53, "piecdesmit trīs")+      , (54, "piecdesmit četri")+      , (55, "piecdesmit pieci")+      , (56, "piecdesmit seši")+      , (57, "piecdesmit septiņi")+      , (58, "piecdesmit astoņi")+      , (59, "piecdesmit deviņi")+      , (60, "sešdesmit")+      , (61, "sešdesmit viens")+      , (62, "sešdesmit divi")+      , (63, "sešdesmit trīs")+      , (64, "sešdesmit četri")+      , (65, "sešdesmit pieci")+      , (66, "sešdesmit seši")+      , (67, "sešdesmit septiņi")+      , (68, "sešdesmit astoņi")+      , (69, "sešdesmit deviņi")+      , (70, "septiņdesmit")+      , (71, "septiņdesmit viens")+      , (72, "septiņdesmit divi")+      , (73, "septiņdesmit trīs")+      , (74, "septiņdesmit četri")+      , (75, "septiņdesmit pieci")+      , (76, "septiņdesmit seši")+      , (77, "septiņdesmit septiņi")+      , (78, "septiņdesmit astoņi")+      , (79, "septiņdesmit deviņi")+      , (80, "astoņdesmit")+      , (81, "astoņdesmit viens")+      , (82, "astoņdesmit divi")+      , (83, "astoņdesmit trīs")+      , (84, "astoņdesmit četri")+      , (85, "astoņdesmit pieci")+      , (86, "astoņdesmit seši")+      , (87, "astoņdesmit septiņi")+      , (88, "astoņdesmit astoņi")+      , (89, "astoņdesmit deviņi")+      , (90, "deviņdesmit")+      , (91, "deviņdesmit viens")+      , (92, "deviņdesmit divi")+      , (93, "deviņdesmit trīs")+      , (94, "deviņdesmit četri")+      , (95, "deviņdesmit pieci")+      , (96, "deviņdesmit seši")+      , (97, "deviņdesmit septiņi")+      , (98, "deviņdesmit astoņi")+      , (99, "deviņdesmit deviņi")+      , (100, "simts")+      , (101, "simt viens")+      , (102, "simt divi")+      , (103, "simt trīs")+      , (104, "simt četri")+      , (105, "simt pieci")+      , (106, "simt seši")+      , (107, "simt septiņi")+      , (108, "simt astoņi")+      , (109, "simt deviņi")+      , (110, "simt desmit")+      , (123, "simt divdesmit trīs")+      , (200, "divsimt")+      , (300, "trīssimt")+      , (321, "trīssimt divdesmit viens")+      , (400, "četrsimt")+      , (500, "piecsimt")+      , (600, "sešsimt")+      , (700, "septiņsimt")+      , (800, "astoņsimt")+      , (900, "deviņsimt")+      , (909, "deviņsimt deviņi")+      , (990, "deviņsimt deviņdesmit")+      , (999, "deviņsimt deviņdesmit deviņi")+      , (1000, "tūkstoš")+      , (1001, "tūkstoš viens")+      , (1008, "tūkstoš astoņi")+      , (1234, "tūkstoš divsimt trīsdesmit četri")+      , (2000, "divtūkstoši")+      , (3000, "trīstūkstoši")+      , (4000, "četrtūkstoši")+      , (4321, "četrtūkstoši trīssimt divdesmit viens")+      , (5000, "piectūkstoši")+      , (6000, "seštūkstoši")+      , (7000, "septiņtūkstoši")+      , (8000, "astoņtūkstoši")+      , (9000, "deviņtūkstoši")+      , (10000, "desmit tūkstošu")+      , (12345, "divpadsmit tūkstoši trīssimt četrdesmit pieci")+      , (20000, "divdesmit tūkstošu")+      , (30000, "trīsdesmit tūkstošu")+      , (40000, "četrdesmit tūkstošu")+      , (50000, "piecdesmit tūkstošu")+      , (54321, "piecdesmit četrtūkstoši trīssimt divdesmit viens")+      , (60000, "sešdesmit tūkstošu")+      , (70000, "septiņdesmit tūkstošu")+      , (80000, "astoņdesmit tūkstošu")+      , (90000, "deviņdesmit tūkstošu")+      , (100000, "simt tūkstošu")+      , (123456, "simt divdesmit trīstūkstoši četrsimt piecdesmit seši")+      , (200000, "divsimt tūkstošu")+      , (300000, "trīssimt tūkstošu")+      , (400000, "četrsimt tūkstošu")+      , (500000, "piecsimt tūkstošu")+      , (600000, "sešsimt tūkstošu")+      , (654321, "sešsimt piecdesmit četrtūkstoši trīssimt divdesmit viens")+      , (700000, "septiņsimt tūkstošu")+      , (800000, "astoņsimt tūkstošu")+      , (900000, "deviņsimt tūkstošu")+      , (1000000, "miljons")+      , (1000001, "miljons viens")+      , (1234567, "miljons divsimt trīsdesmit četrtūkstoši piecsimt sešdesmit septiņi")+      , (2000000, "divi miljonu")+      , (3000000, "trīs miljonu")+      , (4000000, "četri miljonu")+      , (5000000, "pieci miljonu")+      , (6000000, "seši miljonu")+      , (7000000, "septiņi miljonu")+      , (7654321, "septiņi miljonu sešsimt piecdesmit četrtūkstoši trīssimt divdesmit viens")+      , (8000000, "astoņi miljonu")+      , (9000000, "deviņi miljonu")+      , (1000000000, "miljards")+      , (1000000001, "miljards viens")+      , (2000000000, "divi miljardu")+      , (3000000000, "trīs miljardu")+      , (4000000000, "četri miljardu")+      , (5000000000, "pieci miljardu")+      , (6000000000, "seši miljardu")+      , (7000000000, "septiņi miljardu")+      , (8000000000, "astoņi miljardu")+      , (9000000000, "deviņi miljardu")+      , (1000000000000, "triljons")+      , (1000000000001, "triljons viens")+      , (2000000000000, "divi triljonu")+      , (3000000000000, "trīs triljonu")+      , (4000000000000, "četri triljonu")+      , (5000000000000, "pieci triljonu")+      , (6000000000000, "seši triljonu")+      , (7000000000000, "septiņi triljonu")+      , (8000000000000, "astoņi triljonu")+      , (9000000000000, "deviņi triljonu")+      , (1000000000000000, "kvadriljons")+      , (1000000000000001, "kvadriljons viens")+      , (2000000000000000, "divi kvadriljonu")+      , (3000000000000000, "trīs kvadriljonu")+      , (4000000000000000, "četri kvadriljonu")+      , (5000000000000000, "pieci kvadriljonu")+      , (6000000000000000, "seši kvadriljonu")+      , (7000000000000000, "septiņi kvadriljonu")+      , (8000000000000000, "astoņi kvadriljonu")+      , (9000000000000000, "deviņi kvadriljonu")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/LIN/TestData.hs view
@@ -0,0 +1,175 @@+{-|+[@ISO639-1@]        ln++[@ISO639-2@]        lin++[@ISO639-3@]        lin++[@Native name@]     Ngala++[@English name@]    Lingala+-}+module Text.Numeral.Language.LIN.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-lingala/en/lin/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "libungutulu")+      , (1, "mókó")+      , (2, "míbalé")+      , (3, "mísáto")+      , (4, "mínei")+      , (5, "mítáno")+      , (6, "motóba")+      , (7, "sámbó")+      , (8, "mwámbe")+      , (9, "libwá")+      , (10, "zómi")+      , (11, "zómi na mókó")+      , (12, "zómi na míbalé")+      , (13, "zómi na mísáto")+      , (14, "zómi na mínei")+      , (15, "zómi na mítáno")+      , (16, "zómi na motóba")+      , (17, "zómi na sámbó")+      , (18, "zómi na mwámbe")+      , (19, "zómi na libwá")+      , (20, "ntúkú míbalé")+      , (21, "ntúkú míbalé na mókó")+      , (22, "ntúkú míbalé na míbalé")+      , (23, "ntúkú míbalé na mísáto")+      , (24, "ntúkú míbalé na mínei")+      , (25, "ntúkú míbalé na mítáno")+      , (26, "ntúkú míbalé na motóba")+      , (27, "ntúkú míbalé na sámbó")+      , (28, "ntúkú míbalé na mwámbe")+      , (29, "ntúkú míbalé na libwá")+      , (30, "ntúkú mísáto")+      , (31, "ntúkú mísáto na mókó")+      , (32, "ntúkú mísáto na míbalé")+      , (33, "ntúkú mísáto na mísáto")+      , (34, "ntúkú mísáto na mínei")+      , (35, "ntúkú mísáto na mítáno")+      , (36, "ntúkú mísáto na motóba")+      , (37, "ntúkú mísáto na sámbó")+      , (38, "ntúkú mísáto na mwámbe")+      , (39, "ntúkú mísáto na libwá")+      , (40, "ntúkú mínei")+      , (41, "ntúkú mínei na mókó")+      , (42, "ntúkú mínei na míbalé")+      , (43, "ntúkú mínei na mísáto")+      , (44, "ntúkú mínei na mínei")+      , (45, "ntúkú mínei na mítáno")+      , (46, "ntúkú mínei na motóba")+      , (47, "ntúkú mínei na sámbó")+      , (48, "ntúkú mínei na mwámbe")+      , (49, "ntúkú mínei na libwá")+      , (50, "ntúkú mítáno")+      , (51, "ntúkú mítáno na mókó")+      , (52, "ntúkú mítáno na míbalé")+      , (53, "ntúkú mítáno na mísáto")+      , (54, "ntúkú mítáno na mínei")+      , (55, "ntúkú mítáno na mítáno")+      , (56, "ntúkú mítáno na motóba")+      , (57, "ntúkú mítáno na sámbó")+      , (58, "ntúkú mítáno na mwámbe")+      , (59, "ntúkú mítáno na libwá")+      , (60, "ntúkú motóba")+      , (61, "ntúkú motóba na mókó")+      , (62, "ntúkú motóba na míbalé")+      , (63, "ntúkú motóba na mísáto")+      , (64, "ntúkú motóba na mínei")+      , (65, "ntúkú motóba na mítáno")+      , (66, "ntúkú motóba na motóba")+      , (67, "ntúkú motóba na sámbó")+      , (68, "ntúkú motóba na mwámbe")+      , (69, "ntúkú motóba na libwá")+      , (70, "ntúkú sámbó")+      , (71, "ntúkú sámbó na mókó")+      , (72, "ntúkú sámbó na míbalé")+      , (73, "ntúkú sámbó na mísáto")+      , (74, "ntúkú sámbó na mínei")+      , (75, "ntúkú sámbó na mítáno")+      , (76, "ntúkú sámbó na motóba")+      , (77, "ntúkú sámbó na sámbó")+      , (78, "ntúkú sámbó na mwámbe")+      , (79, "ntúkú sámbó na libwá")+      , (80, "ntúkú mwámbe")+      , (81, "ntúkú mwámbe na mókó")+      , (82, "ntúkú mwámbe na míbalé")+      , (83, "ntúkú mwámbe na mísáto")+      , (84, "ntúkú mwámbe na mínei")+      , (85, "ntúkú mwámbe na mítáno")+      , (86, "ntúkú mwámbe na motóba")+      , (87, "ntúkú mwámbe na sámbó")+      , (88, "ntúkú mwámbe na mwámbe")+      , (89, "ntúkú mwámbe na libwá")+      , (90, "ntúkú libwá")+      , (91, "ntúkú libwá na mókó")+      , (92, "ntúkú libwá na míbalé")+      , (93, "ntúkú libwá na mísáto")+      , (94, "ntúkú libwá na mínei")+      , (95, "ntúkú libwá na mítáno")+      , (96, "ntúkú libwá na motóba")+      , (97, "ntúkú libwá na sámbó")+      , (98, "ntúkú libwá na mwámbe")+      , (99, "ntúkú libwá na libwá")+      , (100, "nkámá")+      , (101, "nkámá mókó na mókó")+      , (102, "nkámá mókó na míbalé")+      , (103, "nkámá mókó na mísáto")+      , (104, "nkámá mókó na mínei")+      , (105, "nkámá mókó na mítáno")+      , (106, "nkámá mókó na motóba")+      , (107, "nkámá mókó na sámbó")+      , (108, "nkámá mókó na mwámbe")+      , (109, "nkámá mókó na libwá")+      , (110, "nkámá mókó na zómi")+      , (123, "nkámá mókó na ntúkú míbalé na mísáto")+      , (200, "nkámá míbalé")+      , (300, "nkámá mísáto")+      , (321, "nkámá mísáto na ntúkú míbalé na mókó")+      , (400, "nkámá mínei")+      , (500, "nkámá mítáno")+      , (600, "nkámá motóba")+      , (700, "nkámá sámbó")+      , (800, "nkámá mwámbe")+      , (900, "nkámá libwá")+      , (909, "nkámá libwá na libwá")+      , (990, "nkámá libwá na ntúkú libwá")+      , (999, "nkámá libwá na ntúkú libwá na libwá")+      , (1000, "nkóto")+      , (1001, "nkóto mókó na mókó")+      , (1008, "nkóto mókó na mwámbe")+      , (1234, "nkóto mókó na nkámá míbalé na ntúkú mísáto na mínei")+      , (2000, "nkóto míbalé")+      , (3000, "nkóto mísáto")+      , (4000, "nkóto mínei")+      , (4321, "nkóto mínei na nkámá mísáto na ntúkú míbalé na mókó")+      , (5000, "nkóto mítáno")+      , (6000, "nkóto motóba")+      , (7000, "nkóto sámbó")+      , (8000, "nkóto mwámbe")+      , (9000, "nkóto libwá")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/LIT/TestData.hs view
@@ -0,0 +1,291 @@+{-|+[@ISO639-1@]        lt++[@ISO639-2@]        lit++[@ISO639-3@]        lit++[@Native name@]     lietuvių kalba++[@English name@]    Lithuanian+-}+module Text.Numeral.Language.LIT.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( Integral, (+) )+import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "numerals" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-lithuanian/en/lit/+-}++cardinals :: (Integral i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "nulis")+      , (1, "vienas")+      , (2, "du")+      , (3, "trys")+      , (4, "keturi")+      , (5, "penki")+      , (6, "šeši")+      , (7, "septyni")+      , (8, "aštuoni")+      , (9, "devyni")+      , (10, "dešimt")+      , (11, "vienuolika")+      , (12, "dvylika")+      , (13, "trylika")+      , (14, "keturiolika")+      , (15, "penkiolika")+      , (16, "šešiolika")+      , (17, "septyniolika")+      , (18, "aštuoniolika")+      , (19, "devyniolika")+      , (20, "dvidešimt")+      , (21, "dvidešimt vienas")+      , (22, "dvidešimt du")+      , (23, "dvidešimt trys")+      , (24, "dvidešimt keturi")+      , (25, "dvidešimt penki")+      , (26, "dvidešimt šeši")+      , (27, "dvidešimt septyni")+      , (28, "dvidešimt aštuoni")+      , (29, "dvidešimt devyni")+      , (30, "trisdešimt")+      , (31, "trisdešimt vienas")+      , (32, "trisdešimt du")+      , (33, "trisdešimt trys")+      , (34, "trisdešimt keturi")+      , (35, "trisdešimt penki")+      , (36, "trisdešimt šeši")+      , (37, "trisdešimt septyni")+      , (38, "trisdešimt aštuoni")+      , (39, "trisdešimt devyni")+      , (40, "keturiasdešimt")+      , (41, "keturiasdešimt vienas")+      , (42, "keturiasdešimt du")+      , (43, "keturiasdešimt trys")+      , (44, "keturiasdešimt keturi")+      , (45, "keturiasdešimt penki")+      , (46, "keturiasdešimt šeši")+      , (47, "keturiasdešimt septyni")+      , (48, "keturiasdešimt aštuoni")+      , (49, "keturiasdešimt devyni")+      , (50, "penkiasdešimt")+      , (51, "penkiasdešimt vienas")+      , (52, "penkiasdešimt du")+      , (53, "penkiasdešimt trys")+      , (54, "penkiasdešimt keturi")+      , (55, "penkiasdešimt penki")+      , (56, "penkiasdešimt šeši")+      , (57, "penkiasdešimt septyni")+      , (58, "penkiasdešimt aštuoni")+      , (59, "penkiasdešimt devyni")+      , (60, "šešiasdešimt")+      , (61, "šešiasdešimt vienas")+      , (62, "šešiasdešimt du")+      , (63, "šešiasdešimt trys")+      , (64, "šešiasdešimt keturi")+      , (65, "šešiasdešimt penki")+      , (66, "šešiasdešimt šeši")+      , (67, "šešiasdešimt septyni")+      , (68, "šešiasdešimt aštuoni")+      , (69, "šešiasdešimt devyni")+      , (70, "septyniasdešimt")+      , (71, "septyniasdešimt vienas")+      , (72, "septyniasdešimt du")+      , (73, "septyniasdešimt trys")+      , (74, "septyniasdešimt keturi")+      , (75, "septyniasdešimt penki")+      , (76, "septyniasdešimt šeši")+      , (77, "septyniasdešimt septyni")+      , (78, "septyniasdešimt aštuoni")+      , (79, "septyniasdešimt devyni")+      , (80, "aštuoniasdešimt")+      , (81, "aštuoniasdešimt vienas")+      , (82, "aštuoniasdešimt du")+      , (83, "aštuoniasdešimt trys")+      , (84, "aštuoniasdešimt keturi")+      , (85, "aštuoniasdešimt penki")+      , (86, "aštuoniasdešimt šeši")+      , (87, "aštuoniasdešimt septyni")+      , (88, "aštuoniasdešimt aštuoni")+      , (89, "aštuoniasdešimt devyni")+      , (90, "devyniasdešimt")+      , (91, "devyniasdešimt vienas")+      , (92, "devyniasdešimt du")+      , (93, "devyniasdešimt trys")+      , (94, "devyniasdešimt keturi")+      , (95, "devyniasdešimt penki")+      , (96, "devyniasdešimt šeši")+      , (97, "devyniasdešimt septyni")+      , (98, "devyniasdešimt aštuoni")+      , (99, "devyniasdešimt devyni")+      , (100, "šimtas")+      , (101, "šimtas vienas")+      , (102, "šimtas du")+      , (103, "šimtas trys")+      , (104, "šimtas keturi")+      , (105, "šimtas penki")+      , (106, "šimtas šeši")+      , (107, "šimtas septyni")+      , (108, "šimtas aštuoni")+      , (109, "šimtas devyni")+      , (110, "šimtas dešimt")+      , (123, "šimtas dvidešimt trys")+      , (200, "du šimtai")+      , (300, "trys šimtai")+      , (321, "trys šimtai dvidešimt vienas")+      , (400, "keturi šimtai")+      , (500, "penki šimtai")+      , (600, "šeši šimtai")+      , (700, "septyni šimtai")+      , (800, "aštuoni šimtai")+      , (900, "devyni šimtai")+      , (909, "devyni šimtai devyni")+      , (990, "devyni šimtai devyniasdešimt")+      , (999, "devyni šimtai devyniasdešimt devyni")+      , (1000, "tūkstantis")+      , (1001, "tūkstantis vienas")+      , (1008, "tūkstantis aštuoni")+      , (1234, "tūkstantis du šimtai trisdešimt keturi")+      , (2000, "du tūkstančiai")+      , (3000, "trys tūkstančiai")+      , (4000, "keturi tūkstančiai")+      , (4321, "keturi tūkstančiai trys šimtai dvidešimt vienas")+      , (5000, "penki tūkstančiai")+      , (6000, "šeši tūkstančiai")+      , (7000, "septyni tūkstančiai")+      , (8000, "aštuoni tūkstančiai")+      , (9000, "devyni tūkstančiai")+      , (10000, "dešimt tūkstančiai")+      , (12345, "dvylika tūkstančiai trys šimtai keturiasdešimt penki")+      , (20000, "dvidešimt tūkstančiai")+      , (30000, "trisdešimt tūkstančiai")+      , (40000, "keturiasdešimt tūkstančiai")+      , (50000, "penkiasdešimt tūkstančiai")+      , (54321, "penkiasdešimt keturi tūkstančiai trys šimtai dvidešimt vienas")+      , (60000, "šešiasdešimt tūkstančiai")+      , (70000, "septyniasdešimt tūkstančiai")+      , (80000, "aštuoniasdešimt tūkstančiai")+      , (90000, "devyniasdešimt tūkstančiai")+      , (100000, "šimtas tūkstančiai")+      , (123456, "šimtas dvidešimt trys tūkstančiai keturi šimtai penkiasdešimt šeši")+      , (200000, "du šimtai tūkstančiai")+      , (300000, "trys šimtai tūkstančiai")+      , (400000, "keturi šimtai tūkstančiai")+      , (500000, "penki šimtai tūkstančiai")+      , (600000, "šeši šimtai tūkstančiai")+      , (654321, "šeši šimtai penkiasdešimt keturi tūkstančiai trys šimtai dvidešimt vienas")+      , (700000, "septyni šimtai tūkstančiai")+      , (800000, "aštuoni šimtai tūkstančiai")+      , (900000, "devyni šimtai tūkstančiai")+      , (1000000, "milijonas")+      , (1000001, "milijonas vienas")+      , (1234567, "milijonas du šimtai trisdešimt keturi tūkstančiai penki šimtai šešiasdešimt septyni")+      , (2000000, "du milijonai")+      , (3000000, "trys milijonai")+      , (4000000, "keturi milijonai")+      , (5000000, "penki milijonai")+      , (6000000, "šeši milijonai")+      , (7000000, "septyni milijonai")+      , (7654321, "septyni milijonai šeši šimtai penkiasdešimt keturi tūkstančiai trys šimtai dvidešimt vienas")+      , (8000000, "aštuoni milijonai")+      , (9000000, "devyni milijonai")+      , (dec 9, "milijardas")+      , (dec 9 + 1, "milijardas vienas")+      , (2 * dec 9, "du milijardai")+      , (3 * dec 9, "trys milijardai")+      , (4 * dec 9, "keturi milijardai")+      , (5 * dec 9, "penki milijardai")+      , (6 * dec 9, "šeši milijardai")+      , (7 * dec 9, "septyni milijardai")+      , (8 * dec 9, "aštuoni milijardai")+      , (9 * dec 9, "devyni milijardai")+      , (dec 12, "trilijonas")+      , (dec 12 + 1, "trilijonas vienas")+      , (2 * dec 12, "du trilijonai")+      , (3 * dec 12, "trys trilijonai")+      , (4 * dec 12, "keturi trilijonai")+      , (5 * dec 12, "penki trilijonai")+      , (6 * dec 12, "šeši trilijonai")+      , (7 * dec 12, "septyni trilijonai")+      , (8 * dec 12, "aštuoni trilijonai")+      , (9 * dec 12, "devyni trilijonai")+      , (dec 15, "kvadrilijonas")+      , (dec 15 + 1, "kvadrilijonas vienas")+      , (2 * dec 15, "du kvadrilijonai")+      , (3 * dec 15, "trys kvadrilijonai")+      , (4 * dec 15, "keturi kvadrilijonai")+      , (5 * dec 15, "penki kvadrilijonai")+      , (6 * dec 15, "šeši kvadrilijonai")+      , (7 * dec 15, "septyni kvadrilijonai")+      , (8 * dec 15, "aštuoni kvadrilijonai")+      , (9 * dec 15, "devyni kvadrilijonai")+      , (dec 18, "kvintilijonas")+      , (dec 18 + 1, "kvintilijonas vienas")+      , (2 * dec 18, "du kvintilijonai")+      , (3 * dec 18, "trys kvintilijonai")+      , (4 * dec 18, "keturi kvintilijonai")+      , (5 * dec 18, "penki kvintilijonai")+      , (6 * dec 18, "šeši kvintilijonai")+      , (7 * dec 18, "septyni kvintilijonai")+      , (8 * dec 18, "aštuoni kvintilijonai")+      , (9 * dec 18, "devyni kvintilijonai")+      , (dec 21, "sikstilijonas")+      , (dec 21 + 1, "sikstilijonas vienas")+      , (2 * dec 21, "du sikstilijonai")+      , (3 * dec 21, "trys sikstilijonai")+      , (4 * dec 21, "keturi sikstilijonai")+      , (5 * dec 21, "penki sikstilijonai")+      , (6 * dec 21, "šeši sikstilijonai")+      , (7 * dec 21, "septyni sikstilijonai")+      , (8 * dec 21, "aštuoni sikstilijonai")+      , (9 * dec 21, "devyni sikstilijonai")+      , (dec 24, "septilijonas")+      , (dec 24 + 1, "septilijonas vienas")+      , (2 * dec 24, "du septilijonai")+      , (3 * dec 24, "trys septilijonai")+      , (4 * dec 24, "keturi septilijonai")+      , (5 * dec 24, "penki septilijonai")+      , (6 * dec 24, "šeši septilijonai")+      , (7 * dec 24, "septyni septilijonai")+      , (8 * dec 24, "aštuoni septilijonai")+      , (9 * dec 24, "devyni septilijonai")+      , (dec 27, "oktilijonas")+      , (dec 27 + 1, "oktilijonas vienas")+      , (2 * dec 27, "du oktilijonai")+      , (3 * dec 27, "trys oktilijonai")+      , (4 * dec 27, "keturi oktilijonai")+      , (5 * dec 27, "penki oktilijonai")+      , (6 * dec 27, "šeši oktilijonai")+      , (7 * dec 27, "septyni oktilijonai")+      , (8 * dec 27, "aštuoni oktilijonai")+      , (9 * dec 27, "devyni oktilijonai")+      , (dec 30, "naintilijonas")+      , (dec 30 + 1, "naintilijonas vienas")+      , (2 * dec 30, "du naintilijonai")+      , (3 * dec 30, "trys naintilijonai")+      , (4 * dec 30, "keturi naintilijonai")+      , (5 * dec 30, "penki naintilijonai")+      , (6 * dec 30, "šeši naintilijonai")+      , (7 * dec 30, "septyni naintilijonai")+      , (8 * dec 30, "aštuoni naintilijonai")+      , (9 * dec 30, "devyni naintilijonai")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/LIV/TestData.hs view
@@ -0,0 +1,209 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        liv++[@Native name@]     līvõ kēļ++[@English name@]    Livonian+-}+module Text.Numeral.Language.LIV.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-livonian/en/liv/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "null")+      , (1, "ikš")+      , (2, "kakš")+      , (3, "kuolm")+      , (4, "nēļa")+      , (5, "vīž")+      , (6, "kūž")+      , (7, "seis")+      , (8, "kōdõks")+      , (9, "īdõks")+      , (10, "kim")+      , (11, "ikštuoistõn")+      , (12, "kakštuoistõn")+      , (13, "kuolmtuoistõn")+      , (14, "nēļatuoistõn")+      , (15, "vīžtuoistõn")+      , (16, "kūžtuoistõn")+      , (17, "seistuoistõn")+      , (18, "kōdõkstuoistõn")+      , (19, "īdõkstuoistõn")+      , (20, "kakškimdõ")+      , (21, "kakškimdõ ikš")+      , (22, "kakškimdõ kakš")+      , (23, "kakškimdõ kuolm")+      , (24, "kakškimdõ nēļa")+      , (25, "kakškimdõ vīž")+      , (26, "kakškimdõ kūž")+      , (27, "kakškimdõ seis")+      , (28, "kakškimdõ kōdõks")+      , (29, "kakškimdõ īdõks")+      , (30, "kuolmkimdõ")+      , (31, "kuolmkimdõ ikš")+      , (32, "kuolmkimdõ kakš")+      , (33, "kuolmkimdõ kuolm")+      , (34, "kuolmkimdõ nēļa")+      , (35, "kuolmkimdõ vīž")+      , (36, "kuolmkimdõ kūž")+      , (37, "kuolmkimdõ seis")+      , (38, "kuolmkimdõ kōdõks")+      , (39, "kuolmkimdõ īdõks")+      , (40, "nēļakimdõ")+      , (41, "nēļakimdõ ikš")+      , (42, "nēļakimdõ kakš")+      , (43, "nēļakimdõ kuolm")+      , (44, "nēļakimdõ nēļa")+      , (45, "nēļakimdõ vīž")+      , (46, "nēļakimdõ kūž")+      , (47, "nēļakimdõ seis")+      , (48, "nēļakimdõ kōdõks")+      , (49, "nēļakimdõ īdõks")+      , (50, "vīžkimdõ")+      , (51, "vīžkimdõ ikš")+      , (52, "vīžkimdõ kakš")+      , (53, "vīžkimdõ kuolm")+      , (54, "vīžkimdõ nēļa")+      , (55, "vīžkimdõ vīž")+      , (56, "vīžkimdõ kūž")+      , (57, "vīžkimdõ seis")+      , (58, "vīžkimdõ kōdõks")+      , (59, "vīžkimdõ īdõks")+      , (60, "kūžkimdõ")+      , (61, "kūžkimdõ ikš")+      , (62, "kūžkimdõ kakš")+      , (63, "kūžkimdõ kuolm")+      , (64, "kūžkimdõ nēļa")+      , (65, "kūžkimdõ vīž")+      , (66, "kūžkimdõ kūž")+      , (67, "kūžkimdõ seis")+      , (68, "kūžkimdõ kōdõks")+      , (69, "kūžkimdõ īdõks")+      , (70, "seiskimdõ")+      , (71, "seiskimdõ ikš")+      , (72, "seiskimdõ kakš")+      , (73, "seiskimdõ kuolm")+      , (74, "seiskimdõ nēļa")+      , (75, "seiskimdõ vīž")+      , (76, "seiskimdõ kūž")+      , (77, "seiskimdõ seis")+      , (78, "seiskimdõ kōdõks")+      , (79, "seiskimdõ īdõks")+      , (80, "kōdõkskimdõ")+      , (81, "kōdõkskimdõ ikš")+      , (82, "kōdõkskimdõ kakš")+      , (83, "kōdõkskimdõ kuolm")+      , (84, "kōdõkskimdõ nēļa")+      , (85, "kōdõkskimdõ vīž")+      , (86, "kōdõkskimdõ kūž")+      , (87, "kōdõkskimdõ seis")+      , (88, "kōdõkskimdõ kōdõks")+      , (89, "kōdõkskimdõ īdõks")+      , (90, "īdõkskimdõ")+      , (91, "īdõkskimdõ ikš")+      , (92, "īdõkskimdõ kakš")+      , (93, "īdõkskimdõ kuolm")+      , (94, "īdõkskimdõ nēļa")+      , (95, "īdõkskimdõ vīž")+      , (96, "īdõkskimdõ kūž")+      , (97, "īdõkskimdõ seis")+      , (98, "īdõkskimdõ kōdõks")+      , (99, "īdõkskimdõ īdõks")+      , (100, "sadā")+      , (101, "sadā ikš")+      , (102, "sadā kakš")+      , (103, "sadā kuolm")+      , (104, "sadā nēļa")+      , (105, "sadā vīž")+      , (106, "sadā kūž")+      , (107, "sadā seis")+      , (108, "sadā kōdõks")+      , (109, "sadā īdõks")+      , (110, "sadā kim")+      , (123, "sadā kakškimdõ kuolm")+      , (200, "kakš saddõ")+      , (300, "kuolm saddõ")+      , (321, "kuolm saddõ kakškimdõ ikš")+      , (400, "nēļa saddõ")+      , (500, "vīž saddõ")+      , (600, "kūž saddõ")+      , (700, "seis saddõ")+      , (800, "kōdõks saddõ")+      , (900, "īdõks saddõ")+      , (909, "īdõks saddõ īdõks")+      , (990, "īdõks saddõ īdõkskimdõ")+      , (999, "īdõks saddõ īdõkskimdõ īdõks")+      , (1000, "tūontõ")+      , (1001, "tūontõ ikš")+      , (1008, "tūontõ kōdõks")+      , (1234, "tūontõ kakš saddõ kuolmkimdõ nēļa")+      , (2000, "kakš tūontõd")+      , (3000, "kuolm tūontõd")+      , (4000, "nēļa tūontõd")+      , (4321, "nēļa tūontõd kuolm saddõ kakškimdõ ikš")+      , (5000, "vīž tūontõd")+      , (6000, "kūž tūontõd")+      , (7000, "seis tūontõd")+      , (8000, "kōdõks tūontõd")+      , (9000, "īdõks tūontõd")+      , (10000, "kim tūontõd")+      , (12345, "kakštuoistõn tūontõd kuolm saddõ nēļakimdõ vīž")+      , (20000, "kakškimdõ tūontõd")+      , (30000, "kuolmkimdõ tūontõd")+      , (40000, "nēļakimdõ tūontõd")+      , (50000, "vīžkimdõ tūontõd")+      , (54321, "vīžkimdõ nēļa tūontõd kuolm saddõ kakškimdõ ikš")+      , (60000, "kūžkimdõ tūontõd")+      , (70000, "seiskimdõ tūontõd")+      , (80000, "kōdõkskimdõ tūontõd")+      , (90000, "īdõkskimdõ tūontõd")+      , (100000, "sadā tūontõd")+      , (123456, "sadā kakškimdõ kuolm tūontõd nēļa saddõ vīžkimdõ kūž")+      , (200000, "kakš saddõ tūontõd")+      , (300000, "kuolm saddõ tūontõd")+      , (400000, "nēļa saddõ tūontõd")+      , (500000, "vīž saddõ tūontõd")+      , (600000, "kūž saddõ tūontõd")+      , (654321, "kūž saddõ vīžkimdõ nēļa tūontõd kuolm saddõ kakškimdõ ikš")+      , (700000, "seis saddõ tūontõd")+      , (800000, "kōdõks saddõ tūontõd")+      , (900000, "īdõks saddõ tūontõd")+      , (1000000, "miljon")+      , (1000001, "miljon ikš")+      , (1234567, "miljon kakš saddõ kuolmkimdõ nēļa tūontõd vīž saddõ kūžkimdõ seis")+      , (2000000, "kakš miljonõd")+      , (3000000, "kuolm miljonõd")+      , (4000000, "nēļa miljonõd")+      , (5000000, "vīž miljonõd")+      , (6000000, "kūž miljonõd")+      , (7000000, "seis miljonõd")+      , (7654321, "seis miljonõd kūž saddõ vīžkimdõ nēļa tūontõd kuolm saddõ kakškimdõ ikš")+      , (8000000, "kōdõks miljonõd")+      , (9000000, "īdõks miljonõd")+      ]+    )+  ]
src-test/Text/Numeral/Language/LLD/TestData.hs view
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -24,9 +18,8 @@ --------------------------------------------------------------------------------  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.Grammar ( defaultInflection ) import "numerals" Text.Numeral.Misc ( dec ) import "this" Text.Numeral.Test ( TestData ) @@ -37,7 +30,7 @@  -- Sources: --   http://www.languagesandnumbers.com/how-to-count-in-ladin/en/lld/-cardinals ∷ (Integral i) ⇒ TestData i+cardinals :: (Integral i) => TestData i cardinals =   [ ( "masculine"     , masculine defaultInflection@@ -138,10 +131,10 @@       , (12345, "dodescmiletreicentecarantecinch")       , (dec 6, "un milion")       , (dec 6 + 1, "un milioneun")-      , (2 ⋅ dec 6, "doi milion")+      , (2 * dec 6, "doi milion")       , (123456789, "centevintetrei milionecatercentecincantesiesmilesetcenteotantenuef")       , (dec 9, "un miliard")-      , (2 ⋅ dec 9, "doi miliard")+      , (2 * dec 9, "doi miliard")       , (9876543210, "nuef miliardeotcentesetantesies milionecinchcentecarantetreimiledoicentediesc")       , (9999999999, "nuef miliardenuefcentenonantenuef milionenuefcentenonantenuefmilenuefcentenonantenuef")       ]
+ src-test/Text/Numeral/Language/LMO/TestData.hs view
@@ -0,0 +1,221 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        lmo++[@Native name@]     Lombard, Lumbaart++[@English name@]    Lombard+-}+module Text.Numeral.Language.LMO.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-lombard-milanese/en/lmo/++Note: The test data is probably Western Lombard (lom-wes) as oposed to+Eastern Lombard (lom-eas).+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "vun")+      , (2, "duu")+      , (3, "trii")+      , (4, "quatter")+      , (5, "cinch")+      , (6, "ses")+      , (7, "sett")+      , (8, "vott")+      , (9, "noeuv")+      , (10, "des")+      , (11, "vundes")+      , (12, "dodes")+      , (13, "tredes")+      , (14, "quattordes")+      , (15, "quindes")+      , (16, "sedes")+      , (17, "dersett")+      , (18, "desdott")+      , (19, "desnoeuv")+      , (20, "vint")+      , (21, "vintun")+      , (22, "vintduu")+      , (23, "vinttrii")+      , (24, "vintquatter")+      , (25, "vintcinch")+      , (26, "vintses")+      , (27, "vintsett")+      , (28, "vintott")+      , (29, "vintnoeuv")+      , (30, "trenta")+      , (31, "trentavun")+      , (32, "trentaduu")+      , (33, "trentatrii")+      , (34, "trentaquatter")+      , (35, "trentacinch")+      , (36, "trentases")+      , (37, "trentasett")+      , (38, "trentott")+      , (39, "trentanoeuv")+      , (40, "quaranta")+      , (41, "quarantavun")+      , (42, "quarantaduu")+      , (43, "quarantatrii")+      , (44, "quarantaquatter")+      , (45, "quarantacinch")+      , (46, "quarantases")+      , (47, "quarantasett")+      , (48, "quarantott")+      , (49, "quarantanoeuv")+      , (50, "cinquanta")+      , (51, "cinquantavun")+      , (52, "cinquantaduu")+      , (53, "cinquantatrii")+      , (54, "cinquantaquatter")+      , (55, "cinquantacinch")+      , (56, "cinquantases")+      , (57, "cinquantasett")+      , (58, "cinquantott")+      , (59, "cinquantanoeuv")+      , (60, "sessanta")+      , (61, "sessantavun")+      , (62, "sessantaduu")+      , (63, "sessantatrii")+      , (64, "sessantaquatter")+      , (65, "sessantacinch")+      , (66, "sessantases")+      , (67, "sessantasett")+      , (68, "sessantott")+      , (69, "sessantanoeuv")+      , (70, "settanta")+      , (71, "settantavun")+      , (72, "settantaduu")+      , (73, "settantatrii")+      , (74, "settantaquatter")+      , (75, "settantacinch")+      , (76, "settantases")+      , (77, "settantasett")+      , (78, "settantott")+      , (79, "settantanoeuv")+      , (80, "vottanta")+      , (81, "vottantavun")+      , (82, "vottantaduu")+      , (83, "vottantatrii")+      , (84, "vottantaquatter")+      , (85, "vottantacinch")+      , (86, "vottantases")+      , (87, "vottantasett")+      , (88, "vottantott")+      , (89, "vottantanoeuv")+      , (90, "novanta")+      , (91, "novantavun")+      , (92, "novantaduu")+      , (93, "novantatrii")+      , (94, "novantaquatter")+      , (95, "novantacinch")+      , (96, "novantases")+      , (97, "novantasett")+      , (98, "novantott")+      , (99, "novantanoeuv")+      , (100, "cent")+      , (101, "centvun")+      , (102, "centduu")+      , (103, "centtrii")+      , (104, "centquatter")+      , (105, "centcinch")+      , (106, "centses")+      , (107, "centsett")+      , (108, "centvott")+      , (109, "centnoeuv")+      , (110, "centdes")+      , (123, "centvinttrii")+      , (200, "dusent")+      , (300, "tresent")+      , (321, "tresentvintun")+      , (400, "quattercent")+      , (500, "cinchcent")+      , (600, "ses’cent")+      , (700, "settcent")+      , (800, "vottcent")+      , (900, "noeuvcent")+      , (909, "noeuvcentnoeuv")+      , (990, "noeuvcentnovanta")+      , (999, "noeuvcentnovantanoeuv")+      , (1000, "mila")+      , (1001, "mila e vun")+      , (1008, "mila e vott")+      , (1234, "mila e dusenttrentaquatter")+      , (2000, "dò mila")+      , (3000, "tré mila")+      , (4000, "quatter mila")+      , (4321, "quatter mila e tresentvintun")+      , (5000, "cinch mila")+      , (6000, "ses mila")+      , (7000, "sett mila")+      , (8000, "vott mila")+      , (9000, "noeuv mila")+      , (10000, "des mila")+      , (12345, "dodes mila e tresentquarantacinch")+      , (20000, "vint mila")+      , (30000, "trenta mila")+      , (40000, "quaranta mila")+      , (50000, "cinquanta mila")+      , (54321, "cinquantaquatter mila e tresentvintun")+      , (60000, "sessanta mila")+      , (70000, "settanta mila")+      , (80000, "vottanta mila")+      , (90000, "novanta mila")+      , (100000, "centmila")+      , (123456, "centvinttré mila e quattercentcinquantases")+      , (200000, "dusentmila")+      , (300000, "tresentmila")+      , (400000, "quattercentmila")+      , (500000, "cinchcentmila")+      , (600000, "ses’centmila")+      , (654321, "ses’centcinquantaquatter mila e tresentvintun")+      , (700000, "settcentmila")+      , (800000, "vottcentmila")+      , (900000, "noeuvcentmila")+      , (1000000, "on milion")+      , (1000001, "on milion e vun")+      , (1234567, "on milion e dusenttrentaquatter mila e cinchcentsessantasett")+      , (2000000, "duu milion")+      , (3000000, "trii milion")+      , (4000000, "quatter milion")+      , (5000000, "cinch milion")+      , (6000000, "ses milion")+      , (7000000, "sett milion")+      , (7654321, "sett milion e ses’centcinquantaquatter mila e tresentvintun")+      , (8000000, "vott milion")+      , (9000000, "noeuv milion")+      , (1000000000, "on miliard")+      , (1000000001, "on miliard e vun")+      , (2000000000, "duu miliard")+      , (3000000000, "trii miliard")+      , (4000000000, "quatter miliard")+      , (5000000000, "cinch miliard")+      , (6000000000, "ses miliard")+      , (7000000000, "sett miliard")+      , (8000000000, "vott miliard")+      , (9000000000, "noeuv miliard")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/LTZ/TestData.hs view
@@ -0,0 +1,239 @@+{-|+[@ISO639-1@]        lb++[@ISO639-2@]        ltz++[@ISO639-3@]        ltz++[@Native name@]     Lëtzebuergesch++[@English name@]    Luxembourgish+-}+module Text.Numeral.Language.LTZ.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-luxembourgish/en/ltz/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "null")+      , (1, "eent")+      , (2, "zwee")+      , (3, "dräi")+      , (4, "véier")+      , (5, "fënnef")+      , (6, "sechs")+      , (7, "siwen")+      , (8, "aacht")+      , (9, "néng")+      , (10, "zéng")+      , (11, "elef")+      , (12, "zwielef")+      , (13, "dräizéng")+      , (14, "véierzéng")+      , (15, "fofzéng")+      , (16, "siechzéng")+      , (17, "siwwenzéng")+      , (18, "uechtzéng")+      , (19, "nonzéng")+      , (20, "zwanzeg")+      , (21, "eenanzwanzeg")+      , (22, "zweeanzwanzeg")+      , (23, "dräianzwanzeg")+      , (24, "véieranzwanzeg")+      , (25, "fënnefanzwanzeg")+      , (26, "sechsanzwanzeg")+      , (27, "siwenanzwanzeg")+      , (28, "aachtanzwanzeg")+      , (29, "nénganzwanzeg")+      , (30, "drësseg")+      , (31, "eenandrësseg")+      , (32, "zweeandrësseg")+      , (33, "dräiandrësseg")+      , (34, "véierandrësseg")+      , (35, "fënnefandrësseg")+      , (36, "sechsandrësseg")+      , (37, "siwenandrësseg")+      , (38, "aachtandrësseg")+      , (39, "néngandrësseg")+      , (40, "véierzeg")+      , (41, "eenanvéierzeg")+      , (42, "zweeanvéierzeg")+      , (43, "dräianvéierzeg")+      , (44, "véieranvéierzeg")+      , (45, "fënnefanvéierzeg")+      , (46, "sechsanvéierzeg")+      , (47, "siwenanvéierzeg")+      , (48, "aachtanvéierzeg")+      , (49, "nénganvéierzeg")+      , (50, "fofzeg")+      , (51, "eenanfofzeg")+      , (52, "zweeanfofzeg")+      , (53, "dräianfofzeg")+      , (54, "véieranfofzeg")+      , (55, "fënnefanfofzeg")+      , (56, "sechsanfofzeg")+      , (57, "siwenanfofzeg")+      , (58, "aachtanfofzeg")+      , (59, "nénganfofzeg")+      , (60, "sechzeg")+      , (61, "eenansechzeg")+      , (62, "zweeansechzeg")+      , (63, "dräiansechzeg")+      , (64, "véieransechzeg")+      , (65, "fënnefansechzeg")+      , (66, "sechsansechzeg")+      , (67, "siwenansechzeg")+      , (68, "aachtansechzeg")+      , (69, "néngansechzeg")+      , (70, "siwwenzeg")+      , (71, "eenansiwwenzeg")+      , (72, "zweeansiwwenzeg")+      , (73, "dräiansiwwenzeg")+      , (74, "véieransiwwenzeg")+      , (75, "fënnefansiwwenzeg")+      , (76, "sechsansiwwenzeg")+      , (77, "siwenansiwwenzeg")+      , (78, "aachtansiwwenzeg")+      , (79, "néngansiwwenzeg")+      , (80, "achtzeg")+      , (81, "eenanachtzeg")+      , (82, "zweeanachtzeg")+      , (83, "dräianachtzeg")+      , (84, "véieranachtzeg")+      , (85, "fënnefanachtzeg")+      , (86, "sechsanachtzeg")+      , (87, "siwenanachtzeg")+      , (88, "aachtanachtzeg")+      , (89, "nénganachtzeg")+      , (90, "nonzeg")+      , (91, "eenannonzeg")+      , (92, "zweeannonzeg")+      , (93, "dräiannonzeg")+      , (94, "véierannonzeg")+      , (95, "fënnefannonzeg")+      , (96, "sechsannonzeg")+      , (97, "siwenannonzeg")+      , (98, "aachtannonzeg")+      , (99, "néngannonzeg")+      , (100, "honnert")+      , (101, "honnerteent")+      , (102, "honnertzwee")+      , (103, "honnertdräi")+      , (104, "honnertvéier")+      , (105, "honnertfënnef")+      , (106, "honnertsechs")+      , (107, "honnertsiwen")+      , (108, "honnertaacht")+      , (109, "honnertnéng")+      , (110, "honnertzéng")+      , (123, "honnertdräianzwanzeg")+      , (200, "zweehonnert")+      , (300, "dräihonnert")+      , (321, "dräihonnerteenanzwanzeg")+      , (400, "véierhonnert")+      , (500, "fënnefhonnert")+      , (600, "sechshonnert")+      , (700, "siwenhonnert")+      , (800, "aachthonnert")+      , (900, "nénghonnert")+      , (909, "nénghonnertnéng")+      , (990, "nénghonnertnonzeg")+      , (999, "nénghonnertnéngannonzeg")+      , (1000, "dausend")+      , (1001, "dausendeent")+      , (1008, "dausendaacht")+      , (1234, "dausendzweehonnertvéierandrësseg")+      , (2000, "zweedausend")+      , (3000, "dräidausend")+      , (4000, "véierdausend")+      , (4321, "véierdausenddräihonnerteenanzwanzeg")+      , (5000, "fënnefdausend")+      , (6000, "sechsdausend")+      , (7000, "siwendausend")+      , (8000, "aachtdausend")+      , (9000, "néngdausend")+      , (10000, "zéngdausend")+      , (12345, "zwielefdausenddräihonnertfënnefanvéierzeg")+      , (20000, "zwanzegdausend")+      , (30000, "drëssegdausend")+      , (40000, "véierzegdausend")+      , (50000, "fofzegdausend")+      , (54321, "véieranfofzegdausenddräihonnerteenanzwanzeg")+      , (60000, "sechzegdausend")+      , (70000, "siwwenzegdausend")+      , (80000, "achtzegdausend")+      , (90000, "nonzegdausend")+      , (100000, "honnertdausend")+      , (123456, "honnertdräianzwanzegdausendvéierhonnertsechsanfofzeg")+      , (200000, "zweehonnertdausend")+      , (300000, "dräihonnertdausend")+      , (400000, "véierhonnertdausend")+      , (500000, "fënnefhonnertdausend")+      , (600000, "sechshonnertdausend")+      , (654321, "sechshonnertvéieranfofzegdausenddräihonnerteenanzwanzeg")+      , (700000, "siwenhonnertdausend")+      , (800000, "aachthonnertdausend")+      , (900000, "nénghonnertdausend")+      , (1000000, "eng Millioun")+      , (1000001, "eng Millioun eent")+      , (1234567, "eng Millioun zweehonnertvéierandrëssegdausendfënnefhonnertsiwenansechzeg")+      , (2000000, "zwou Milliounen")+      , (3000000, "dräi Milliounen")+      , (4000000, "véier Milliounen")+      , (5000000, "fënnef Milliounen")+      , (6000000, "sechs Milliounen")+      , (7000000, "siwen Milliounen")+      , (7654321, "siwen Milliounen sechshonnertvéieranfofzegdausenddräihonnerteenanzwanzeg")+      , (8000000, "aacht Milliounen")+      , (9000000, "néng Milliounen")+      , (1000000000, "eng Milliard")+      , (1000000001, "eng Milliard eent")+      , (2000000000, "zwou Milliarden")+      , (3000000000, "dräi Milliarden")+      , (4000000000, "véier Milliarden")+      , (5000000000, "fënnef Milliarden")+      , (6000000000, "sechs Milliarden")+      , (7000000000, "siwen Milliarden")+      , (8000000000, "aacht Milliarden")+      , (9000000000, "néng Milliarden")+      , (1000000000000, "eng Billion")+      , (1000000000001, "eng Billion eent")+      , (2000000000000, "zwou Billionen")+      , (3000000000000, "dräi Billionen")+      , (4000000000000, "véier Billionen")+      , (5000000000000, "fënnef Billionen")+      , (6000000000000, "sechs Billionen")+      , (7000000000000, "siwen Billionen")+      , (8000000000000, "aacht Billionen")+      , (9000000000000, "néng Billionen")+      , (1000000000000000, "eng Billiard")+      , (1000000000000001, "eng Billiard eent")+      , (2000000000000000, "zwou Billiarden")+      , (3000000000000000, "dräi Billiarden")+      , (4000000000000000, "véier Billiarden")+      , (5000000000000000, "fënnef Billiarden")+      , (6000000000000000, "sechs Billiarden")+      , (7000000000000000, "siwen Billiarden")+      , (8000000000000000, "aacht Billiarden")+      , (9000000000000000, "néng Billiarden")+      ]+    )+  ]
− src-test/Text/Numeral/Language/MG/TestData.hs
@@ -1,162 +0,0 @@-{-# 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/MIC/TestData.hs view
@@ -0,0 +1,197 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        mic++[@ISO639-3@]        mic++[@Native name@]     Míkmawísimk++[@English name@]    Mi'kmaq+-}+module Text.Numeral.Language.MIC.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-micmac/en/mic/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "ne’wt")+      , (2, "ta’pu")+      , (3, "si’st")+      , (4, "ne’w")+      , (5, "na’n")+      , (6, "asukom")+      , (7, "l’uiknek")+      , (8, "ukmuljin")+      , (9, "pesqunatek")+      , (10, "newtiska’q")+      , (11, "newtiska’q jel ne’wt")+      , (12, "newtiska’q jel ta’pu")+      , (13, "newtiska’q jel si’st")+      , (14, "newtiska’q jel ne’w")+      , (15, "newtiska’q jel na’n")+      , (16, "newtiska’q jel asukom")+      , (17, "newtiska’q jel l’uiknek")+      , (18, "newtiska’q jel ukmuljin")+      , (19, "newtiska’q jel pesqunatek")+      , (20, "tapuiska’q")+      , (21, "tapuiska’q jel ne’wt")+      , (22, "tapuiska’q jel ta’pu")+      , (23, "tapuiska’q jel si’st")+      , (24, "tapuiska’q jel ne’w")+      , (25, "tapuiska’q jel na’n")+      , (26, "tapuiska’q jel asukom")+      , (27, "tapuiska’q jel l’uiknek")+      , (28, "tapuiska’q jel ukmuljin")+      , (29, "tapuiska’q jel pesqunatek")+      , (30, "nesiska’q")+      , (31, "nesiska’q jel ne’wt")+      , (32, "nesiska’q jel ta’pu")+      , (33, "nesiska’q jel si’st")+      , (34, "nesiska’q jel ne’w")+      , (35, "nesiska’q jel na’n")+      , (36, "nesiska’q jel asukom")+      , (37, "nesiska’q jel l’uiknek")+      , (38, "nesiska’q jel ukmuljin")+      , (39, "nesiska’q jel pesqunatek")+      , (40, "newiska’q")+      , (41, "newiska’q jel ne’wt")+      , (42, "newiska’q jel ta’pu")+      , (43, "newiska’q jel si’st")+      , (44, "newiska’q jel ne’w")+      , (45, "newiska’q jel na’n")+      , (46, "newiska’q jel asukom")+      , (47, "newiska’q jel l’uiknek")+      , (48, "newiska’q jel ukmuljin")+      , (49, "newiska’q jel pesqunatek")+      , (50, "naniska’q")+      , (51, "naniska’q jel ne’wt")+      , (52, "naniska’q jel ta’pu")+      , (53, "naniska’q jel si’st")+      , (54, "naniska’q jel ne’w")+      , (55, "naniska’q jel na’n")+      , (56, "naniska’q jel asukom")+      , (57, "naniska’q jel l’uiknek")+      , (58, "naniska’q jel ukmuljin")+      , (59, "naniska’q jel pesqunatek")+      , (60, "asukom te’siska’q")+      , (61, "asukom te’siska’q jel ne’wt")+      , (62, "asukom te’siska’q jel ta’pu")+      , (63, "asukom te’siska’q jel si’st")+      , (64, "asukom te’siska’q jel ne’w")+      , (65, "asukom te’siska’q jel na’n")+      , (66, "asukom te’siska’q jel asukom")+      , (67, "asukom te’siska’q jel l’uiknek")+      , (68, "asukom te’siska’q jel ukmuljin")+      , (69, "asukom te’siska’q jel pesqunatek")+      , (70, "l’uiknek te’siska’q")+      , (71, "l’uiknek te’siska’q jel ne’wt")+      , (72, "l’uiknek te’siska’q jel ta’pu")+      , (73, "l’uiknek te’siska’q jel si’st")+      , (74, "l’uiknek te’siska’q jel ne’w")+      , (75, "l’uiknek te’siska’q jel na’n")+      , (76, "l’uiknek te’siska’q jel asukom")+      , (77, "l’uiknek te’siska’q jel l’uiknek")+      , (78, "l’uiknek te’siska’q jel ukmuljin")+      , (79, "l’uiknek te’siska’q jel pesqunatek")+      , (80, "ukmuljin te’siska’q")+      , (81, "ukmuljin te’siska’q jel ne’wt")+      , (82, "ukmuljin te’siska’q jel ta’pu")+      , (83, "ukmuljin te’siska’q jel si’st")+      , (84, "ukmuljin te’siska’q jel ne’w")+      , (85, "ukmuljin te’siska’q jel na’n")+      , (86, "ukmuljin te’siska’q jel asukom")+      , (87, "ukmuljin te’siska’q jel l’uiknek")+      , (88, "ukmuljin te’siska’q jel ukmuljin")+      , (89, "ukmuljin te’siska’q jel pesqunatek")+      , (90, "pesqunatek te’siska’q")+      , (91, "pesqunatek te’siska’q jel ne’wt")+      , (92, "pesqunatek te’siska’q jel ta’pu")+      , (93, "pesqunatek te’siska’q jel si’st")+      , (94, "pesqunatek te’siska’q jel ne’w")+      , (95, "pesqunatek te’siska’q jel na’n")+      , (96, "pesqunatek te’siska’q jel asukom")+      , (97, "pesqunatek te’siska’q jel l’uiknek")+      , (98, "pesqunatek te’siska’q jel ukmuljin")+      , (99, "pesqunatek te’siska’q jel pesqunatek")+      , (100, "kaskimtlnaqn")+      , (101, "kaskimtlnaqn te’siska’q jel ne’wt")+      , (102, "kaskimtlnaqn te’siska’q jel ta’pu")+      , (103, "kaskimtlnaqn te’siska’q jel si’st")+      , (104, "kaskimtlnaqn te’siska’q jel ne’w")+      , (105, "kaskimtlnaqn te’siska’q jel na’n")+      , (106, "kaskimtlnaqn te’siska’q jel asukom")+      , (107, "kaskimtlnaqn te’siska’q jel l’uiknek")+      , (108, "kaskimtlnaqn te’siska’q jel ukmuljin")+      , (109, "kaskimtlnaqn te’siska’q jel pesqunatek")+      , (110, "kaskimtlnaqn te’siska’q jel newtiska’q")+      , (123, "kaskimtlnaqn te’siska’q jel tapuiska’q jel si’st")+      , (200, "ta’pu kaskimtlnaqn")+      , (300, "si’st kaskimtlnaqn")+      , (321, "si’st kaskimtlnaqn te’siska’q jel tapuiska’q jel ne’wt")+      , (400, "ne’w kaskimtlnaqn")+      , (500, "na’n kaskimtlnaqn")+      , (600, "asukom kaskimtlnaqn")+      , (700, "l’uiknek kaskimtlnaqn")+      , (800, "ukmuljin kaskimtlnaqn")+      , (900, "pesqunatek kaskimtlnaqn")+      , (909, "pesqunatek kaskimtlnaqn te’siska’q jel pesqunatek")+      , (990, "pesqunatek kaskimtlnaqn te’siska’q jel pesqunatek te’siska’q")+      , (999, "pesqunatek kaskimtlnaqn te’siska’q jel pesqunatek te’siska’q jel pesqunatek")+      , (1000, "pituimtlnaqn")+      , (1001, "pituimtlnaqn te’siska’q jel ne’wt")+      , (1008, "pituimtlnaqn te’siska’q jel ukmuljin")+      , (1234, "pituimtlnaqn te’siska’q jel ta’pu kaskimtlnaqn te’siska’q jel nesiska’q jel ne’w")+      , (2000, "ta’pu pituimtlnaqn")+      , (3000, "si’st pituimtlnaqn")+      , (4000, "ne’w pituimtlnaqn")+      , (4321, "ne’w pituimtlnaqn te’siska’q jel si’st kaskimtlnaqn te’siska’q jel tapuiska’q jel ne’wt")+      , (5000, "na’n pituimtlnaqn")+      , (6000, "asukom pituimtlnaqn")+      , (7000, "l’uiknek pituimtlnaqn")+      , (8000, "ukmuljin pituimtlnaqn")+      , (9000, "pesqunatek pituimtlnaqn")+      , (10000, "pituimtlnaqnepikatun")+      , (12345, "newtiska’q jel ta’pu pituimtlnaqn te’siska’q jel si’st kaskimtlnaqn te’siska’q jel newiska’q jel na’n")+      , (20000, "tapuiska’q pituimtlnaqn")+      , (30000, "nesiska’q pituimtlnaqn")+      , (40000, "newiska’q pituimtlnaqn")+      , (50000, "naniska’q pituimtlnaqn")+      , (54321, "naniska’q jel ne’w pituimtlnaqn te’siska’q jel si’st kaskimtlnaqn te’siska’q jel tapuiska’q jel ne’wt")+      , (60000, "asukom te’siska’q pituimtlnaqn")+      , (70000, "l’uiknek te’siska’q pituimtlnaqn")+      , (80000, "ukmuljin te’siska’q pituimtlnaqn")+      , (90000, "pesqunatek te’siska’q pituimtlnaqn")+      , (100000, "kaskimtlnaqn pituimtlnaqn")+      , (123456, "kaskimtlnaqn te’siska’q jel tapuiska’q jel si’st pituimtlnaqn te’siska’q jel ne’w kaskimtlnaqn te’siska’q jel naniska’q jel asukom")+      , (200000, "ta’pu kaskimtlnaqn pituimtlnaqn")+      , (300000, "si’st kaskimtlnaqn pituimtlnaqn")+      , (400000, "ne’w kaskimtlnaqn pituimtlnaqn")+      , (500000, "na’n kaskimtlnaqn pituimtlnaqn")+      , (600000, "asukom kaskimtlnaqn pituimtlnaqn")+      , (654321, "asukom kaskimtlnaqn te’siska’q jel naniska’q jel ne’w pituimtlnaqn te’siska’q jel si’st kaskimtlnaqn te’siska’q jel tapuiska’q jel ne’wt")+      , (700000, "l’uiknek kaskimtlnaqn pituimtlnaqn")+      , (800000, "ukmuljin kaskimtlnaqn pituimtlnaqn")+      , (900000, "pesqunatek kaskimtlnaqn pituimtlnaqn")+      , (1000000, "kji-pituimtlnaqn")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/MIN/TestData.hs view
@@ -0,0 +1,138 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        min++[@ISO639-3@]        min++[@Native name@]     Baso Minangkabau, باسو مينڠكاباو++[@English name@]    Minangkabau+-}+module Text.Numeral.Language.MIN.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-minangkabau/en/min/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "ciek")+      , (2, "duo")+      , (3, "tigo")+      , (4, "ampek")+      , (5, "limo")+      , (6, "anam")+      , (7, "tujuah")+      , (8, "salapan")+      , (9, "sambilan")+      , (10, "sapuluah")+      , (11, "sabaleh")+      , (12, "duo baleh")+      , (13, "tigo baleh")+      , (14, "ampek baleh")+      , (15, "limo baleh")+      , (16, "anam baleh")+      , (17, "tujuah baleh")+      , (18, "salapan baleh")+      , (19, "sambilan baleh")+      , (20, "duo puluah")+      , (21, "duo puluah ciek")+      , (22, "duo puluah duo")+      , (23, "duo puluah tigo")+      , (24, "duo puluah ampek")+      , (25, "duo puluah limo")+      , (26, "duo puluah anam")+      , (27, "duo puluah tujuah")+      , (28, "duo puluah salapan")+      , (29, "duo puluah sambilan")+      , (30, "tigo puluah")+      , (31, "tigo puluah ciek")+      , (32, "tigo puluah duo")+      , (33, "tigo puluah tigo")+      , (34, "tigo puluah ampek")+      , (35, "tigo puluah limo")+      , (36, "tigo puluah anam")+      , (37, "tigo puluah tujuah")+      , (38, "tigo puluah salapan")+      , (39, "tigo puluah sambilan")+      , (40, "ampek puluah")+      , (41, "ampek puluah ciek")+      , (42, "ampek puluah duo")+      , (43, "ampek puluah tigo")+      , (44, "ampek puluah ampek")+      , (45, "ampek puluah limo")+      , (46, "ampek puluah anam")+      , (47, "ampek puluah tujuah")+      , (48, "ampek puluah salapan")+      , (49, "ampek puluah sambilan")+      , (50, "limo puluah")+      , (51, "limo puluah ciek")+      , (52, "limo puluah duo")+      , (53, "limo puluah tigo")+      , (54, "limo puluah ampek")+      , (55, "limo puluah limo")+      , (56, "limo puluah anam")+      , (57, "limo puluah tujuah")+      , (58, "limo puluah salapan")+      , (59, "limo puluah sambilan")+      , (60, "anam puluah")+      , (61, "anam puluah ciek")+      , (62, "anam puluah duo")+      , (63, "anam puluah tigo")+      , (64, "anam puluah ampek")+      , (65, "anam puluah limo")+      , (66, "anam puluah anam")+      , (67, "anam puluah tujuah")+      , (68, "anam puluah salapan")+      , (69, "anam puluah sambilan")+      , (70, "tujuah puluah")+      , (71, "tujuah puluah ciek")+      , (72, "tujuah puluah duo")+      , (73, "tujuah puluah tigo")+      , (74, "tujuah puluah ampek")+      , (75, "tujuah puluah limo")+      , (76, "tujuah puluah anam")+      , (77, "tujuah puluah tujuah")+      , (78, "tujuah puluah salapan")+      , (79, "tujuah puluah sambilan")+      , (80, "salapan puluah")+      , (81, "salapan puluah ciek")+      , (82, "salapan puluah duo")+      , (83, "salapan puluah tigo")+      , (84, "salapan puluah ampek")+      , (85, "salapan puluah limo")+      , (86, "salapan puluah anam")+      , (87, "salapan puluah tujuah")+      , (88, "salapan puluah salapan")+      , (89, "salapan puluah sambilan")+      , (90, "sambilan puluah")+      , (91, "sambilan puluah ciek")+      , (92, "sambilan puluah duo")+      , (93, "sambilan puluah tigo")+      , (94, "sambilan puluah ampek")+      , (95, "sambilan puluah limo")+      , (96, "sambilan puluah anam")+      , (97, "sambilan puluah tujuah")+      , (98, "sambilan puluah salapan")+      , (99, "sambilan puluah sambilan")+      , (100, "saratuih")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/MLG/TestData.hs view
@@ -0,0 +1,155 @@+{-|+[@ISO639-1@]        mg++[@ISO639-2@]        mlg++[@ISO639-3@]        mlg++[@Native name@]     -++[@English name@]    Malagasy+-}++module Text.Numeral.Language.MLG.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Misc ( dec )+import "numerals" Text.Numeral.Grammar ( 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/MNK/TestData.hs view
@@ -0,0 +1,174 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        mnk++[@Native name@]     Mandingo, لغة مندنكا++[@English name@]    Mandinka+-}+module Text.Numeral.Language.MNK.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-mandinka/en/mnk/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "kiliŋ")+      , (2, "fula")+      , (3, "saba")+      , (4, "naani")+      , (5, "luulu")+      , (6, "wooro")+      , (7, "worowula")+      , (8, "sey")+      , (9, "kononto")+      , (10, "taŋ")+      , (11, "taŋ niŋ kiliŋ")+      , (12, "taŋ niŋ fula")+      , (13, "taŋ niŋ saba")+      , (14, "taŋ niŋ naani")+      , (15, "taŋ niŋ luulu")+      , (16, "taŋ niŋ wooro")+      , (17, "taŋ niŋ worowula")+      , (18, "taŋ niŋ sey")+      , (19, "taŋ niŋ kononto")+      , (20, "muwaŋ")+      , (21, "muwaŋ niŋ kiliŋ")+      , (22, "muwaŋ niŋ fula")+      , (23, "muwaŋ niŋ saba")+      , (24, "muwaŋ niŋ naani")+      , (25, "muwaŋ niŋ luulu")+      , (26, "muwaŋ niŋ wooro")+      , (27, "muwaŋ niŋ worowula")+      , (28, "muwaŋ niŋ sey")+      , (29, "muwaŋ niŋ kononto")+      , (30, "taŋ saba")+      , (31, "taŋ saba niŋ kiliŋ")+      , (32, "taŋ saba niŋ fula")+      , (33, "taŋ saba niŋ saba")+      , (34, "taŋ saba niŋ naani")+      , (35, "taŋ saba niŋ luulu")+      , (36, "taŋ saba niŋ wooro")+      , (37, "taŋ saba niŋ worowula")+      , (38, "taŋ saba niŋ sey")+      , (39, "taŋ saba niŋ kononto")+      , (40, "taŋ naani")+      , (41, "taŋ naani niŋ kiliŋ")+      , (42, "taŋ naani niŋ fula")+      , (43, "taŋ naani niŋ saba")+      , (44, "taŋ naani niŋ naani")+      , (45, "taŋ naani niŋ luulu")+      , (46, "taŋ naani niŋ wooro")+      , (47, "taŋ naani niŋ worowula")+      , (48, "taŋ naani niŋ sey")+      , (49, "taŋ naani niŋ kononto")+      , (50, "taŋ luulu")+      , (51, "taŋ luulu niŋ kiliŋ")+      , (52, "taŋ luulu niŋ fula")+      , (53, "taŋ luulu niŋ saba")+      , (54, "taŋ luulu niŋ naani")+      , (55, "taŋ luulu niŋ luulu")+      , (56, "taŋ luulu niŋ wooro")+      , (57, "taŋ luulu niŋ worowula")+      , (58, "taŋ luulu niŋ sey")+      , (59, "taŋ luulu niŋ kononto")+      , (60, "taŋ wooro")+      , (61, "taŋ wooro niŋ kiliŋ")+      , (62, "taŋ wooro niŋ fula")+      , (63, "taŋ wooro niŋ saba")+      , (64, "taŋ wooro niŋ naani")+      , (65, "taŋ wooro niŋ luulu")+      , (66, "taŋ wooro niŋ wooro")+      , (67, "taŋ wooro niŋ worowula")+      , (68, "taŋ wooro niŋ sey")+      , (69, "taŋ wooro niŋ kononto")+      , (70, "taŋ worowula")+      , (71, "taŋ worowula niŋ kiliŋ")+      , (72, "taŋ worowula niŋ fula")+      , (73, "taŋ worowula niŋ saba")+      , (74, "taŋ worowula niŋ naani")+      , (75, "taŋ worowula niŋ luulu")+      , (76, "taŋ worowula niŋ wooro")+      , (77, "taŋ worowula niŋ worowula")+      , (78, "taŋ worowula niŋ sey")+      , (79, "taŋ worowula niŋ kononto")+      , (80, "taŋ sey")+      , (81, "taŋ sey niŋ kiliŋ")+      , (82, "taŋ sey niŋ fula")+      , (83, "taŋ sey niŋ saba")+      , (84, "taŋ sey niŋ naani")+      , (85, "taŋ sey niŋ luulu")+      , (86, "taŋ sey niŋ wooro")+      , (87, "taŋ sey niŋ worowula")+      , (88, "taŋ sey niŋ sey")+      , (89, "taŋ sey niŋ kononto")+      , (90, "taŋ konoto")+      , (91, "taŋ konoto niŋ kiliŋ")+      , (92, "taŋ konoto niŋ fula")+      , (93, "taŋ konoto niŋ saba")+      , (94, "taŋ konoto niŋ naani")+      , (95, "taŋ konoto niŋ luulu")+      , (96, "taŋ konoto niŋ wooro")+      , (97, "taŋ konoto niŋ worowula")+      , (98, "taŋ konoto niŋ sey")+      , (99, "taŋ konoto niŋ kononto")+      , (100, "keme kiliŋ")+      , (101, "keme kiliŋ niŋ kiliŋ")+      , (102, "keme kiliŋ niŋ fula")+      , (103, "keme kiliŋ niŋ saba")+      , (104, "keme kiliŋ niŋ naani")+      , (105, "keme kiliŋ niŋ luulu")+      , (106, "keme kiliŋ niŋ wooro")+      , (107, "keme kiliŋ niŋ worowula")+      , (108, "keme kiliŋ niŋ sey")+      , (109, "keme kiliŋ niŋ kononto")+      , (110, "keme kiliŋ niŋ taŋ")+      , (123, "keme kiliŋ niŋ muwaŋ niŋ saba")+      , (200, "keme fula")+      , (300, "keme saba")+      , (321, "keme saba niŋ muwaŋ niŋ kiliŋ")+      , (400, "keme naani")+      , (500, "keme luulu")+      , (600, "keme wooro")+      , (700, "keme worowula")+      , (800, "keme sey")+      , (900, "keme kononto")+      , (909, "keme kononto niŋ kononto")+      , (990, "keme kononto niŋ taŋ konoto")+      , (999, "keme kononto niŋ taŋ konoto niŋ kononto")+      , (1000, "wuli kiliŋ")+      , (1001, "wuli kiliŋ niŋ kiliŋ")+      , (1008, "wuli kiliŋ niŋ sey")+      , (1234, "wuli kiliŋ niŋ keme fula niŋ taŋ saba niŋ naani")+      , (2000, "wuli fula")+      , (3000, "wuli saba")+      , (4000, "wuli naani")+      , (4321, "wuli naani niŋ keme saba niŋ muwaŋ niŋ kiliŋ")+      , (5000, "wuli luulu")+      , (6000, "wuli wooro")+      , (7000, "wuli worowula")+      , (8000, "wuli sey")+      , (9000, "wuli kononto")+      ]+    )+  ]
src-test/Text/Numeral/Language/MOH/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-acholi/en/moh -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/NAV/TestData.hs view
@@ -0,0 +1,208 @@+{-|+[@ISO639-1@]        nv++[@ISO639-2@]        nav++[@ISO639-3@]        nav++[@Native name@]     Diné bizaad++[@English name@]    Navajo+-}+module Text.Numeral.Language.NAV.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-navajo/en/nav/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "tʼááłáʼí")+      , (2, "naaki")+      , (3, "tááʼ")+      , (4, "dį́į́ʼ")+      , (5, "ashdlaʼ")+      , (6, "hastą́ą́")+      , (7, "tsostsʼid")+      , (8, "tseebíí")+      , (9, "náhástʼéí")+      , (10, "neeznáá")+      , (11, "łáʼtsʼáadah")+      , (12, "naakitsʼáadah")+      , (13, "táátsʼáadah")+      , (14, "dį́į́ʼtsʼáadah")+      , (15, "ashdlaʼáadah")+      , (16, "hastą́ʼáadah")+      , (17, "tsostsʼidtsʼáadah")+      , (18, "tseebíítsʼáadah")+      , (19, "náhástʼéítsʼáadah")+      , (20, "naadiin")+      , (21, "naadįįłaʼ")+      , (22, "naadįįnaaki")+      , (23, "naadįįtááʼ")+      , (24, "naadįįdį́į́ʼ")+      , (25, "naadįįʼashdlaʼ")+      , (26, "naadįįhastą́ą́")+      , (27, "naadįįtsostsʼid")+      , (28, "naadįįtseebíí")+      , (29, "naadįįnáhástʼéí")+      , (30, "tádiin")+      , (31, "tádiin dóó baʼąą tʼááłáʼí")+      , (32, "tádiin dóó baʼąą naaki")+      , (33, "tádiin dóó baʼąą tááʼ")+      , (34, "tádiin dóó baʼąą dį́į́ʼ")+      , (35, "tádiin dóó baʼąą ashdlaʼ")+      , (36, "tádiin dóó baʼąą hastą́ą́")+      , (37, "tádiin dóó baʼąą tsostsʼid")+      , (38, "tádiin dóó baʼąą tseebíí")+      , (39, "tádiin dóó baʼąą náhástʼéí")+      , (40, "dízdiin")+      , (41, "dízdįįłaʼ")+      , (42, "dízdįįnaaki")+      , (43, "dízdįįtááʼ")+      , (44, "dízdįįdį́į́ʼ")+      , (45, "dízdįįʼashdlaʼ")+      , (46, "dízdįįhastą́ą́")+      , (47, "dízdįįtsostsʼid")+      , (48, "dízdįįtseebíí")+      , (49, "dízdįįnáhástʼéí")+      , (50, "ashdladiin")+      , (51, "ashdladiin dóó baʼąą tʼááłáʼí")+      , (52, "ashdladiin dóó baʼąą naaki")+      , (53, "ashdladiin dóó baʼąą tááʼ")+      , (54, "ashdladiin dóó baʼąą dį́į́ʼ")+      , (55, "ashdladiin dóó baʼąą ashdlaʼ")+      , (56, "ashdladiin dóó baʼąą hastą́ą́")+      , (57, "ashdladiin dóó baʼąą tsostsʼid")+      , (58, "ashdladiin dóó baʼąą tseebíí")+      , (59, "ashdladiin dóó baʼąą náhástʼéí")+      , (60, "hastą́diin")+      , (61, "hastą́diin dóó baʼąą tʼááłáʼí")+      , (62, "hastą́diin dóó baʼąą naaki")+      , (63, "hastą́diin dóó baʼąą tááʼ")+      , (64, "hastą́diin dóó baʼąą dį́į́ʼ")+      , (65, "hastą́diin dóó baʼąą ashdlaʼ")+      , (66, "hastą́diin dóó baʼąą hastą́ą́")+      , (67, "hastą́diin dóó baʼąą tsostsʼid")+      , (68, "hastą́diin dóó baʼąą tseebíí")+      , (69, "hastą́diin dóó baʼąą náhástʼéí")+      , (70, "tsostsʼidiin")+      , (71, "tsostsʼidiin dóó baʼąą tʼááłáʼí")+      , (72, "tsostsʼidiin dóó baʼąą naaki")+      , (73, "tsostsʼidiin dóó baʼąą tááʼ")+      , (74, "tsostsʼidiin dóó baʼąą dį́į́ʼ")+      , (75, "tsostsʼidiin dóó baʼąą ashdlaʼ")+      , (76, "tsostsʼidiin dóó baʼąą hastą́ą́")+      , (77, "tsostsʼidiin dóó baʼąą tsostsʼid")+      , (78, "tsostsʼidiin dóó baʼąą tseebíí")+      , (79, "tsostsʼidiin dóó baʼąą náhástʼéí")+      , (80, "tseebídiin")+      , (81, "tseebídiin dóó baʼąą tʼááłáʼí")+      , (82, "tseebídiin dóó baʼąą naaki")+      , (83, "tseebídiin dóó baʼąą tááʼ")+      , (84, "tseebídiin dóó baʼąą dį́į́ʼ")+      , (85, "tseebídiin dóó baʼąą ashdlaʼ")+      , (86, "tseebídiin dóó baʼąą hastą́ą́")+      , (87, "tseebídiin dóó baʼąą tsostsʼid")+      , (88, "tseebídiin dóó baʼąą tseebíí")+      , (89, "tseebídiin dóó baʼąą náhástʼéí")+      , (90, "náhástʼédiin")+      , (91, "náhástʼédiin dóó baʼąą tʼááłáʼí")+      , (92, "náhástʼédiin dóó baʼąą naaki")+      , (93, "náhástʼédiin dóó baʼąą tááʼ")+      , (94, "náhástʼédiin dóó baʼąą dį́į́ʼ")+      , (95, "náhástʼédiin dóó baʼąą ashdlaʼ")+      , (96, "náhástʼédiin dóó baʼąą hastą́ą́")+      , (97, "náhástʼédiin dóó baʼąą tsostsʼid")+      , (98, "náhástʼédiin dóó baʼąą tseebíí")+      , (99, "náhástʼédiin dóó baʼąą náhástʼéí")+      , (100, "tʼááłáhádí neeznádiin")+      , (101, "tʼááłáhádí neeznádiin tʼááłáʼí")+      , (102, "tʼááłáhádí neeznádiin naaki")+      , (103, "tʼááłáhádí neeznádiin tááʼ")+      , (104, "tʼááłáhádí neeznádiin dį́į́ʼ")+      , (105, "tʼááłáhádí neeznádiin ashdlaʼ")+      , (106, "tʼááłáhádí neeznádiin hastą́ą́")+      , (107, "tʼááłáhádí neeznádiin tsostsʼid")+      , (108, "tʼááłáhádí neeznádiin tseebíí")+      , (109, "tʼááłáhádí neeznádiin náhástʼéí")+      , (110, "tʼááłáhádí neeznádiin neeznáá")+      , (123, "tʼááłáhádí neeznádiin naadįįtááʼ")+      , (200, "naakidi neeznádiin")+      , (300, "táadi neeznádiin")+      , (321, "táadi neeznádiin naadįįłaʼ")+      , (400, "dį́įʼdi neeznádiin")+      , (500, "ashdladi neeznádiin")+      , (600, "hastą́ądi neeznádiin")+      , (700, "tsostsʼidi neeznádiin")+      , (800, "tseebíidi neeznádiin")+      , (900, "náhástʼéidi neeznádiin")+      , (909, "náhástʼéidi neeznádiin náhástʼéí")+      , (990, "náhástʼéidi neeznádiin náhástʼédiin")+      , (999, "náhástʼéidi neeznádiin náhástʼédiin dóó baʼąą náhástʼéí")+      , (1000, "tʼááłáhádí mííl")+      , (1001, "tʼááłáhádí mííl tʼááłáʼí")+      , (1008, "tʼááłáhádí mííl tseebíí")+      , (1234, "tʼááłáhádí mííl naakidi neeznádiin tádiin dóó baʼąą dį́į́ʼ")+      , (2000, "naakidi mííl")+      , (3000, "táadi mííl")+      , (4000, "dį́įʼdi mííl")+      , (4321, "dį́įʼdi mííl táadi neeznádiin naadįįłaʼ")+      , (5000, "ashdladi mííl")+      , (6000, "hastą́ądi mííl")+      , (7000, "tsostsʼidi mííl")+      , (8000, "tseebíidi mííl")+      , (9000, "náhástʼéidi mííl")+      , (10000, "neeznáá mííl")+      , (12345, "naakitsʼáadah mííl táadi neeznádiin dízdįįʼashdlaʼ")+      , (20000, "naadiin mííl")+      , (30000, "tádiin mííl")+      , (40000, "dízdiin mííl")+      , (50000, "ashdladiin mííl")+      , (54321, "ashdladiin dóó baʼąą dį́įʼdi mííl táadi neeznádiin naadįįłaʼ")+      , (60000, "hastą́diin mííl")+      , (70000, "tsostsʼidiin mííl")+      , (80000, "tseebídiin mííl")+      , (90000, "náhástʼédiin mííl")+      , (100000, "tʼááłáhádí neeznádiin mííl")+      , (123456, "tʼááłáhádí neeznádiin naadįįtáadi mííl dį́įʼdi neeznádiin ashdladiin dóó baʼąą hastą́ą́")+      , (200000, "naakidi neeznádiin mííl")+      , (300000, "táadi neeznádiin mííl")+      , (400000, "dį́įʼdi neeznádiin mííl")+      , (500000, "ashdladi neeznádiin mííl")+      , (600000, "hastą́ądi neeznádiin mííl")+      , (654321, "hastą́ądi neeznádiin ashdladiin dóó baʼąą dį́įʼdi mííl táadi neeznádiin naadįįłaʼ")+      , (700000, "tsostsʼidi neeznádiin mííl")+      , (800000, "tseebíidi neeznádiin mííl")+      , (900000, "náhástʼéidi neeznádiin mííl")+      , (1000000, "tʼááłáhádí mííltsoh")+      , (1000001, "tʼááłáhádí mííltsoh tʼááłáʼí")+      , (1234567, "tʼááłáhádí mííltsoh naakidi neeznádiin tádiin dóó baʼąą dį́įʼdi mííl ashdladi neeznádiin hastą́diin dóó baʼąą tsostsʼid")+      , (2000000, "naakidi mííltsoh")+      , (3000000, "táadi mííltsoh")+      , (4000000, "dį́įʼdi mííltsoh")+      , (5000000, "ashdladi mííltsoh")+      , (6000000, "hastą́ądi mííltsoh")+      , (7000000, "tsostsʼidi mííltsoh")+      , (7654321, "tsostsʼidi mííltsoh hastą́ądi neeznádiin ashdladiin dóó baʼąą dį́įʼdi mííl táadi neeznádiin naadįįłaʼ")+      , (8000000, "tseebíidi mííltsoh")+      , (9000000, "náhástʼéidi mííltsoh")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/NEE/TestData.hs view
@@ -0,0 +1,141 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        nee++[@Native name@]     Nêlêmwa-Nixumwak++[@English name@]    Kumak+-}+module Text.Numeral.Language.NEE.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-nelemwa/en/nee/++Note: This data uses only one Nêlêmwa numerical classifier. There are+22 categories.+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "pwa-giik")+      , (2, "pwa-du")+      , (3, "pwa-gan")+      , (4, "pwa-baak")+      , (5, "pwa-nem")+      , (6, "pwa-nem-giik")+      , (7, "pwa-nem-du")+      , (8, "pwa-nem-gan")+      , (9, "pwa-nem-baak")+      , (10, "tujic")+      , (11, "tujic xa bwaat pwagiik")+      , (12, "tujic xa bwaat pwadu")+      , (13, "tujic xa bwaat pwagan")+      , (14, "tujic xa bwaat pwabaak")+      , (15, "tujic xa bwaat pwanem")+      , (16, "tujic xa bwaat pwanemgiik")+      , (17, "tujic xa bwaat pwanemdu")+      , (18, "tujic xa bwaat pwanemgan")+      , (19, "tujic xa bwaat pwanembaak")+      , (20, "aaxi ak")+      , (21, "aaxi ak xa bwaat pwagiik")+      , (22, "aaxi ak xa bwaat pwadu")+      , (23, "aaxi ak xa bwaat pwagan")+      , (24, "aaxi ak xa bwaat pwabaak")+      , (25, "aaxi ak xa bwaat pwanem")+      , (26, "aaxi ak xa bwaat pwanemgiik")+      , (27, "aaxi ak xa bwaat pwanemdu")+      , (28, "aaxi ak xa bwaat pwanemgan")+      , (29, "aaxi ak xa bwaat pwanembaak")+      , (30, "aaxi ak xa bwaat tujic")+      , (31, "aaxi ak xa bwaat tujic xa bwaat pwagiik")+      , (32, "aaxi ak xa bwaat tujic xa bwaat pwadu")+      , (33, "aaxi ak xa bwaat tujic xa bwaat pwagan")+      , (34, "aaxi ak xa bwaat tujic xa bwaat pwabaak")+      , (35, "aaxi ak xa bwaat tujic xa bwaat pwanem")+      , (36, "aaxi ak xa bwaat tujic xa bwaat pwanemgiik")+      , (37, "aaxi ak xa bwaat tujic xa bwaat pwanemdu")+      , (38, "aaxi ak xa bwaat tujic xa bwaat pwanemgan")+      , (39, "aaxi ak xa bwaat tujic xa bwaat pwanembaak")+      , (40, "aaru ak")+      , (41, "aaru ak xa bwaat pwagiik")+      , (42, "aaru ak xa bwaat pwadu")+      , (43, "aaru ak xa bwaat pwagan")+      , (44, "aaru ak xa bwaat pwabaak")+      , (45, "aaru ak xa bwaat pwanem")+      , (46, "aaru ak xa bwaat pwanemgiik")+      , (47, "aaru ak xa bwaat pwanemdu")+      , (48, "aaru ak xa bwaat pwanemgan")+      , (49, "aaru ak xa bwaat pwanembaak")+      , (50, "aaru ak xa bwaat tujic")+      , (51, "aaru ak xa bwaat tujic xa bwaat pwagiik")+      , (52, "aaru ak xa bwaat tujic xa bwaat pwadu")+      , (53, "aaru ak xa bwaat tujic xa bwaat pwagan")+      , (54, "aaru ak xa bwaat tujic xa bwaat pwabaak")+      , (55, "aaru ak xa bwaat tujic xa bwaat pwanem")+      , (56, "aaru ak xa bwaat tujic xa bwaat pwanemgiik")+      , (57, "aaru ak xa bwaat tujic xa bwaat pwanemdu")+      , (58, "aaru ak xa bwaat tujic xa bwaat pwanemgan")+      , (59, "aaru ak xa bwaat tujic xa bwaat pwanembaak")+      , (60, "aaxan ak")+      , (61, "aaxan ak xa bwaat pwagiik")+      , (62, "aaxan ak xa bwaat pwadu")+      , (63, "aaxan ak xa bwaat pwagan")+      , (64, "aaxan ak xa bwaat pwabaak")+      , (65, "aaxan ak xa bwaat pwanem")+      , (66, "aaxan ak xa bwaat pwanemgiik")+      , (67, "aaxan ak xa bwaat pwanemdu")+      , (68, "aaxan ak xa bwaat pwanemgan")+      , (69, "aaxan ak xa bwaat pwanembaak")+      , (70, "aaxan ak xa bwaat tujic")+      , (71, "aaxan ak xa bwaat tujic xa bwaat pwagiik")+      , (72, "aaxan ak xa bwaat tujic xa bwaat pwadu")+      , (73, "aaxan ak xa bwaat tujic xa bwaat pwagan")+      , (74, "aaxan ak xa bwaat tujic xa bwaat pwabaak")+      , (75, "aaxan ak xa bwaat tujic xa bwaat pwanem")+      , (76, "aaxan ak xa bwaat tujic xa bwaat pwanemgiik")+      , (77, "aaxan ak xa bwaat tujic xa bwaat pwanemdu")+      , (78, "aaxan ak xa bwaat tujic xa bwaat pwanemgan")+      , (79, "aaxan ak xa bwaat tujic xa bwaat pwanembaak")+      , (80, "aavaak ak")+      , (81, "aavaak ak xa bwaat pwagiik")+      , (82, "aavaak ak xa bwaat pwadu")+      , (83, "aavaak ak xa bwaat pwagan")+      , (84, "aavaak ak xa bwaat pwabaak")+      , (85, "aavaak ak xa bwaat pwanem")+      , (86, "aavaak ak xa bwaat pwanemgiik")+      , (87, "aavaak ak xa bwaat pwanemdu")+      , (88, "aavaak ak xa bwaat pwanemgan")+      , (89, "aavaak ak xa bwaat pwanembaak")+      , (90, "aavaak ak xa bwaat tujic")+      , (91, "aavaak ak xa bwaat tujic xa bwaat pwagiik")+      , (92, "aavaak ak xa bwaat tujic xa bwaat pwadu")+      , (93, "aavaak ak xa bwaat tujic xa bwaat pwagan")+      , (94, "aavaak ak xa bwaat tujic xa bwaat pwabaak")+      , (95, "aavaak ak xa bwaat tujic xa bwaat pwanem")+      , (96, "aavaak ak xa bwaat tujic xa bwaat pwanemgiik")+      , (97, "aavaak ak xa bwaat tujic xa bwaat pwanemdu")+      , (98, "aavaak ak xa bwaat tujic xa bwaat pwanemgan")+      , (99, "aavaak ak xa bwaat tujic xa bwaat pwanembaak")+      , (100, "aanem ak")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/NEN/TestData.hs view
@@ -0,0 +1,68 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        nen++[@Native name@]     -++[@English name@]    Nengone+-}+module Text.Numeral.Language.NEN.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-nengone/en/nen/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "sa")+      , (2, "rewe")+      , (3, "tini")+      , (4, "ece")+      , (5, "sedong")+      , (6, "sedong ne sa")+      , (7, "sedong ne rew")+      , (8, "sedong ne tin")+      , (9, "sedong ne ec")+      , (10, "ruenin")+      , (11, "ruenin ne sa")+      , (12, "ruenin ne rew")+      , (13, "ruenin ne tin")+      , (14, "ruenin ne ec")+      , (15, "adenin")+      , (16, "adenin ne sa")+      , (17, "adenin ne rew")+      , (18, "adenin ne tin")+      , (19, "adenin ne ec")+      , (20, "sarengom")+      , (21, "sarengom ne sa")+      , (22, "sarengom ne rew")+      , (23, "sarengom ne tin")+      , (24, "sarengom ne ec")+      , (25, "sarengom ne sedong")+      , (26, "sarengom ne sedosa")+      , (27, "sarengom ne sedorew")+      , (28, "sarengom ne sedotin")+      , (29, "sarengom ne sedoec")+      , (30, "sarengom ne ruenin")+      ]+    )+  ]
− src-test/Text/Numeral/Language/NL/TestData.hs
@@ -1,380 +0,0 @@-{-# 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/NLD/TestData.hs view
@@ -0,0 +1,373 @@+{-|+[@ISO639-1@]        nl++[@ISO639-2B@]       dut++[@ISO639-3@]        nld++[@Native name@]     Nederlands++[@English name@]    Dutch+-}++module Text.Numeral.Language.NLD.TestData+    ( cardinals+    , ordinals+    , partitives+    , multiplicatives+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar ( 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
@@ -1,170 +0,0 @@-{-# 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/NOB/TestData.hs view
@@ -0,0 +1,162 @@+{-|+[@ISO639-1@]        nb++[@ISO639-2B@]       nob++[@ISO639-3@]        nob++[@Native name@]     Bokmål++[@English name@]    Norwegian Bokmål+-}++module Text.Numeral.Language.NOB.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -23,8 +17,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -32,7 +25,7 @@ -- Test data -------------------------------------------------------------------------------- -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/OCI/TestData.hs view
@@ -0,0 +1,221 @@+{-|+[@ISO639-1@]        oc++[@ISO639-2@]        oci++[@ISO639-3@]        oci++[@Native name@]     occitan, lenga d'òc++[@English name@]    Occitan+-}+module Text.Numeral.Language.OCI.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-occitan/en/oci/http://www.languagesandnumbers.com/how-to-count-in-occitan/en/oci/++Note: This is the Languedocien dialect.+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "zèro")+      , (1, "un")+      , (2, "dos")+      , (3, "tres")+      , (4, "quatre")+      , (5, "cinc")+      , (6, "sièis")+      , (7, "sèt")+      , (8, "uèch")+      , (9, "nòu")+      , (10, "dètz")+      , (11, "onze")+      , (12, "dotze")+      , (13, "tretze")+      , (14, "catòrze")+      , (15, "quinze")+      , (16, "setze")+      , (17, "dètz-e-sèt")+      , (18, "dètz-e-uèch")+      , (19, "dètz-e-nòu")+      , (20, "vint")+      , (21, "vint-e-un")+      , (22, "vint-e-dos")+      , (23, "vint-e-tres")+      , (24, "vint-e-quatre")+      , (25, "vint-e-cinc")+      , (26, "vint-e-sièis")+      , (27, "vint-e-sèt")+      , (28, "vint-e-uèch")+      , (29, "vint-e-nòu")+      , (30, "trenta")+      , (31, "trenta un")+      , (32, "trenta dos")+      , (33, "trenta tres")+      , (34, "trenta quatre")+      , (35, "trenta cinc")+      , (36, "trenta sièis")+      , (37, "trenta sèt")+      , (38, "trenta uèch")+      , (39, "trenta nòu")+      , (40, "quaranta")+      , (41, "quaranta un")+      , (42, "quaranta dos")+      , (43, "quaranta tres")+      , (44, "quaranta quatre")+      , (45, "quaranta cinc")+      , (46, "quaranta sièis")+      , (47, "quaranta sèt")+      , (48, "quaranta uèch")+      , (49, "quaranta nòu")+      , (50, "cinquanta")+      , (51, "cinquanta un")+      , (52, "cinquanta dos")+      , (53, "cinquanta tres")+      , (54, "cinquanta quatre")+      , (55, "cinquanta cinc")+      , (56, "cinquanta sièis")+      , (57, "cinquanta sèt")+      , (58, "cinquanta uèch")+      , (59, "cinquanta nòu")+      , (60, "seissanta")+      , (61, "seissanta un")+      , (62, "seissanta dos")+      , (63, "seissanta tres")+      , (64, "seissanta quatre")+      , (65, "seissanta cinc")+      , (66, "seissanta sièis")+      , (67, "seissanta sèt")+      , (68, "seissanta uèch")+      , (69, "seissanta nòu")+      , (70, "setanta")+      , (71, "setanta un")+      , (72, "setanta dos")+      , (73, "setanta tres")+      , (74, "setanta quatre")+      , (75, "setanta cinc")+      , (76, "setanta sièis")+      , (77, "setanta sèt")+      , (78, "setanta uèch")+      , (79, "setanta nòu")+      , (80, "ochanta")+      , (81, "ochanta un")+      , (82, "ochanta dos")+      , (83, "ochanta tres")+      , (84, "ochanta quatre")+      , (85, "ochanta cinc")+      , (86, "ochanta sièis")+      , (87, "ochanta sèt")+      , (88, "ochanta uèch")+      , (89, "ochanta nòu")+      , (90, "nonanta")+      , (91, "nonanta un")+      , (92, "nonanta dos")+      , (93, "nonanta tres")+      , (94, "nonanta quatre")+      , (95, "nonanta cinc")+      , (96, "nonanta sièis")+      , (97, "nonanta sèt")+      , (98, "nonanta uèch")+      , (99, "nonanta nòu")+      , (100, "cent")+      , (101, "cent un")+      , (102, "cent dos")+      , (103, "cent tres")+      , (104, "cent quatre")+      , (105, "cent cinc")+      , (106, "cent sièis")+      , (107, "cent sèt")+      , (108, "cent uèch")+      , (109, "cent nòu")+      , (110, "cent dètz")+      , (123, "cent vint-e-tres")+      , (200, "dos cents")+      , (300, "tres cents")+      , (321, "tres cents vint-e-un")+      , (400, "quatre cents")+      , (500, "cinc cents")+      , (600, "sièis cents")+      , (700, "sèt cents")+      , (800, "uèch cents")+      , (900, "nòu cents")+      , (909, "nòu cents nòu")+      , (990, "nòu cents nonanta")+      , (999, "nòu cents nonanta nòu")+      , (1000, "mila")+      , (1001, "mila un")+      , (1008, "mila uèch")+      , (1234, "mila dos cents trenta quatre")+      , (2000, "dos mila")+      , (3000, "tres mila")+      , (4000, "quatre mila")+      , (4321, "quatre mila tres cents vint-e-un")+      , (5000, "cinc mila")+      , (6000, "sièis mila")+      , (7000, "sèt mila")+      , (8000, "uèch mila")+      , (9000, "nòu mila")+      , (10000, "dètz mila")+      , (12345, "dotze mila tres cents quaranta cinc")+      , (20000, "vint mila")+      , (30000, "trenta mila")+      , (40000, "quaranta mila")+      , (50000, "cinquanta mila")+      , (54321, "cinquanta quatre mila tres cents vint-e-un")+      , (60000, "seissanta mila")+      , (70000, "setanta mila")+      , (80000, "ochanta mila")+      , (90000, "nonanta mila")+      , (100000, "cent mila")+      , (123456, "cent vint-e-tres mila quatre cents cinquanta sièis")+      , (200000, "dos cents mila")+      , (300000, "tres cents mila")+      , (400000, "quatre cents mila")+      , (500000, "cinc cents mila")+      , (600000, "sièis cents mila")+      , (654321, "sièis cents cinquanta quatre mila tres cents vint-e-un")+      , (700000, "sèt cents mila")+      , (800000, "uèch cents mila")+      , (900000, "nòu cents mila")+      , (1000000, "un milion")+      , (1000001, "un milion un")+      , (1234567, "un milion dos cents trenta quatre mila cinc cents seissanta sèt")+      , (2000000, "dos milions")+      , (3000000, "tres milions")+      , (4000000, "quatre milions")+      , (5000000, "cinc milions")+      , (6000000, "sièis milions")+      , (7000000, "sèt milions")+      , (7654321, "sèt milions sièis cents cinquanta quatre mila tres cents vint-e-un")+      , (8000000, "uèch milions")+      , (9000000, "nòu milions")+      , (1000000000, "un miliard")+      , (1000000001, "un miliard un")+      , (2000000000, "dos miliards")+      , (3000000000, "tres miliards")+      , (4000000000, "quatre miliards")+      , (5000000000, "cinc miliards")+      , (6000000000, "sièis miliards")+      , (7000000000, "sèt miliards")+      , (8000000000, "uèch miliards")+      , (9000000000, "nòu miliards")+      ]+    )+  ]
− src-test/Text/Numeral/Language/OJ/TestData.hs
@@ -1,159 +0,0 @@-{-# 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/OJI/TestData.hs view
@@ -0,0 +1,170 @@+{-|+[@ISO639-1@]        oj++[@ISO639-2@]        oji++[@ISO639-3@]        oji++[@Native name@]     ᐊᓂᔑᓈᐯᒧᐎᓐ (Anishinaabemowin)++[@English name@]    Ojibwe+-}++module Text.Numeral.Language.OJI.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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")+      , (101, "ngodwaak shaa bezhik")+      , (102, "ngodwaak shaa niizh")+      , (103, "ngodwaak shaa nswi")+      , (104, "ngodwaak shaa niiwin")+      , (105, "ngodwaak shaa naanan")+      , (106, "ngodwaak shaa ngodwaaswi")+      , (107, "ngodwaak shaa niizhwaaswi")+      , (108, "ngodwaak shaa nshwaaswi")+      , (109, "ngodwaak shaa zhaangswi")+      , (110, "ngodwaak shaa mdaaswi")+      , (123, "ngodwaak shaa niizhtaana shaa nswi")+      , (200, "niizhwaak")+      , (300, "nswaak")+      , (321, "nswaak shaa niizhtaana shaa bezhik")+      , (400, "niiwaak")+      , (448, "niiwaak shaa niimtaana shaa nshwaaswi")+      , (500, "naanwaak")+      , (600, "ngodwaaswaak")+      , (700, "niizhwaaswaak")+      , (800, "nshwaaswaak")+      , (900, "zhaangswaak")+      , (909, "zhaangswaak shaa zhaangswi")+      , (990, "zhaangswaak shaa zhaangsmitaana")+      , (999, "zhaangswaak shaa zhaangsmitaana shaa zhaangswi")+      , (1000, "mdaaswaak")+      , (1001, "mdaaswaak shaa bezhik")+      , (1008, "mdaaswaak shaa nshwaaswi")+      , (1222, "mdaaswaak shaa niizhwaak shaa niizhtaana shaa niizh")+      , (1234, "mdaaswaak shaa niizhwaak shaa nsimtaana shaa niiwin")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/ONE/TestData.hs view
@@ -0,0 +1,162 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        one++[@Native name@]     Onʌyotaʔa:ka++[@English name@]    Oneida+-}+module Text.Numeral.Language.ONE.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-oneida/en/one/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "úskah")+      , (2, "téken")+      , (3, "áhsʌ")+      , (4, "kayé")+      , (5, "wisk")+      , (6, "yá·yahk")+      , (7, "tsya·ták")+      , (8, "tékluˀ")+      , (9, "wá·tlu")+      , (10, "oye·lí")+      , (11, "úskah yawʌ·lé")+      , (12, "tékni yawʌ·lé")+      , (13, "áhsʌ yawʌ·lé")+      , (14, "kayé yawʌ·lé")+      , (15, "wisk yawʌ·lé")+      , (16, "yá·yahk yawʌ·lé")+      , (17, "tsya·ták yawʌ·lé")+      , (18, "tékluˀ yawʌ·lé")+      , (19, "wá·tlu yawʌ·lé")+      , (20, "tewáshʌ")+      , (21, "tewáshʌ úskah")+      , (22, "tewáshʌ téken")+      , (23, "tewáshʌ áhsʌ")+      , (24, "tewáshʌ kayé")+      , (25, "tewáshʌ wisk")+      , (26, "tewáshʌ yá·yahk")+      , (27, "tewáshʌ tsya·ták")+      , (28, "tewáshʌ tékluˀ")+      , (29, "tewáshʌ wá·tlu")+      , (30, "áhsʌ niwáshʌ")+      , (31, "áhsʌ niwáshʌ úskah")+      , (32, "áhsʌ niwáshʌ téken")+      , (33, "áhsʌ niwáshʌ áhsʌ")+      , (34, "áhsʌ niwáshʌ kayé")+      , (35, "áhsʌ niwáshʌ wisk")+      , (36, "áhsʌ niwáshʌ yá·yahk")+      , (37, "áhsʌ niwáshʌ tsya·ták")+      , (38, "áhsʌ niwáshʌ tékluˀ")+      , (39, "áhsʌ niwáshʌ wá·tlu")+      , (40, "kayé niwáshʌ")+      , (41, "kayé niwáshʌ úskah")+      , (42, "kayé niwáshʌ téken")+      , (43, "kayé niwáshʌ áhsʌ")+      , (44, "kayé niwáshʌ kayé")+      , (45, "kayé niwáshʌ wisk")+      , (46, "kayé niwáshʌ yá·yahk")+      , (47, "kayé niwáshʌ tsya·ták")+      , (48, "kayé niwáshʌ tékluˀ")+      , (49, "kayé niwáshʌ wá·tlu")+      , (50, "wisk niwáshʌ")+      , (51, "wisk niwáshʌ úskah")+      , (52, "wisk niwáshʌ téken")+      , (53, "wisk niwáshʌ áhsʌ")+      , (54, "wisk niwáshʌ kayé")+      , (55, "wisk niwáshʌ wisk")+      , (56, "wisk niwáshʌ yá·yahk")+      , (57, "wisk niwáshʌ tsya·ták")+      , (58, "wisk niwáshʌ tékluˀ")+      , (59, "wisk niwáshʌ wá·tlu")+      , (60, "yá·yahk niwáshʌ")+      , (61, "yá·yahk niwáshʌ úskah")+      , (62, "yá·yahk niwáshʌ téken")+      , (63, "yá·yahk niwáshʌ áhsʌ")+      , (64, "yá·yahk niwáshʌ kayé")+      , (65, "yá·yahk niwáshʌ wisk")+      , (66, "yá·yahk niwáshʌ yá·yahk")+      , (67, "yá·yahk niwáshʌ tsya·ták")+      , (68, "yá·yahk niwáshʌ tékluˀ")+      , (69, "yá·yahk niwáshʌ wá·tlu")+      , (70, "tsya·ták niwáshʌ")+      , (71, "tsya·ták niwáshʌ úskah")+      , (72, "tsya·ták niwáshʌ téken")+      , (73, "tsya·ták niwáshʌ áhsʌ")+      , (74, "tsya·ták niwáshʌ kayé")+      , (75, "tsya·ták niwáshʌ wisk")+      , (76, "tsya·ták niwáshʌ yá·yahk")+      , (77, "tsya·ták niwáshʌ tsya·ták")+      , (78, "tsya·ták niwáshʌ tékluˀ")+      , (79, "tsya·ták niwáshʌ wá·tlu")+      , (80, "tékluˀ niwáshʌ")+      , (81, "tékluˀ niwáshʌ úskah")+      , (82, "tékluˀ niwáshʌ téken")+      , (83, "tékluˀ niwáshʌ áhsʌ")+      , (84, "tékluˀ niwáshʌ kayé")+      , (85, "tékluˀ niwáshʌ wisk")+      , (86, "tékluˀ niwáshʌ yá·yahk")+      , (87, "tékluˀ niwáshʌ tsya·ták")+      , (88, "tékluˀ niwáshʌ tékluˀ")+      , (89, "tékluˀ niwáshʌ wá·tlu")+      , (90, "wá·tlu niwáshʌ")+      , (91, "wá·tlu niwáshʌ úskah")+      , (92, "wá·tlu niwáshʌ téken")+      , (93, "wá·tlu niwáshʌ áhsʌ")+      , (94, "wá·tlu niwáshʌ kayé")+      , (95, "wá·tlu niwáshʌ wisk")+      , (96, "wá·tlu niwáshʌ yá·yahk")+      , (97, "wá·tlu niwáshʌ tsya·ták")+      , (98, "wá·tlu niwáshʌ tékluˀ")+      , (99, "wá·tlu niwáshʌ wá·tlu")+      , (100, "tewʌˀnyáwelu")+      , (101, "tewʌˀnyáwelu ok úskah")+      , (102, "tewʌˀnyáwelu ok téken")+      , (103, "tewʌˀnyáwelu ok áhsʌ")+      , (104, "tewʌˀnyáwelu ok kayé")+      , (105, "tewʌˀnyáwelu ok wisk")+      , (106, "tewʌˀnyáwelu ok yá·yahk")+      , (107, "tewʌˀnyáwelu ok tsya·ták")+      , (108, "tewʌˀnyáwelu ok tékluˀ")+      , (109, "tewʌˀnyáwelu ok wá·tlu")+      , (110, "tewʌˀnyáwelu ok oye·lí")+      , (123, "tewʌˀnyáwelu ok tewáshʌ áhsʌ")+      , (200, "tékni tewʌˀnyáwelu")+      , (300, "áhsʌ tewʌˀnyáwelu")+      , (321, "áhsʌ tewʌˀnyáwelu ok tewáshʌ úskah")+      , (400, "kayé tewʌˀnyáwelu")+      , (500, "wisk tewʌˀnyáwelu")+      , (600, "yá·yahk tewʌˀnyáwelu")+      , (700, "tsya·ták tewʌˀnyáwelu")+      , (800, "tékluˀ tewʌˀnyáwelu")+      , (900, "wá·tlu tewʌˀnyáwelu")+      , (909, "wá·tlu tewʌˀnyáwelu ok wá·tlu")+      , (990, "wá·tlu tewʌˀnyáwelu ok wá·tlu niwáshʌ")+      , (999, "wá·tlu tewʌˀnyáwelu ok wá·tlu niwáshʌ wá·tlu")+      , (1000, "skanutó·tslat")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/ORM/TestData.hs view
@@ -0,0 +1,175 @@+{-|+[@ISO639-1@]        om++[@ISO639-2@]        orm++[@ISO639-3@]        orm++[@Native name@]     Afaan Oromo++[@English name@]    Oromo+-}+module Text.Numeral.Language.ORM.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-oromo/en/orm/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "duwwa")+      , (1, "tokko")+      , (2, "lama")+      , (3, "sadi")+      , (4, "afur")+      , (5, "shan")+      , (6, "jaya")+      , (7, "torba")+      , (8, "saddeet")+      , (9, "sagal")+      , (10, "khudan")+      , (11, "khuda-tokko")+      , (12, "khuda-lama")+      , (13, "khuda-sadi")+      , (14, "khuda-afur")+      , (15, "khuda-shan")+      , (16, "khuda-jaya")+      , (17, "khuda-torba")+      , (18, "khuda-saddeet")+      , (19, "khuda-sagal")+      , (20, "digdama")+      , (21, "digdamii-tokko")+      , (22, "digdamii-lama")+      , (23, "digdamii-sadi")+      , (24, "digdamii-afur")+      , (25, "digdamii-shan")+      , (26, "digdamii-jaya")+      , (27, "digdamii-torba")+      , (28, "digdamii-saddeet")+      , (29, "digdamii-sagal")+      , (30, "soddoma")+      , (31, "soddomii-tokko")+      , (32, "soddomii-lama")+      , (33, "soddomii-sadi")+      , (34, "soddomii-afur")+      , (35, "soddomii-shan")+      , (36, "soddomii-jaya")+      , (37, "soddomii-torba")+      , (38, "soddomii-saddeet")+      , (39, "soddomii-sagal")+      , (40, "afurtama")+      , (41, "afurtamii-tokko")+      , (42, "afurtamii-lama")+      , (43, "afurtamii-sadi")+      , (44, "afurtamii-afur")+      , (45, "afurtamii-shan")+      , (46, "afurtamii-jaya")+      , (47, "afurtamii-torba")+      , (48, "afurtamii-saddeet")+      , (49, "afurtamii-sagal")+      , (50, "shantama")+      , (51, "shantamii-tokko")+      , (52, "shantamii-lama")+      , (53, "shantamii-sadi")+      , (54, "shantamii-afur")+      , (55, "shantamii-shan")+      , (56, "shantamii-jaya")+      , (57, "shantamii-torba")+      , (58, "shantamii-saddeet")+      , (59, "shantamii-sagal")+      , (60, "jaatama")+      , (61, "jaatamii-tokko")+      , (62, "jaatamii-lama")+      , (63, "jaatamii-sadi")+      , (64, "jaatamii-afur")+      , (65, "jaatamii-shan")+      , (66, "jaatamii-jaya")+      , (67, "jaatamii-torba")+      , (68, "jaatamii-saddeet")+      , (69, "jaatamii-sagal")+      , (70, "torbatama")+      , (71, "torbatamii-tokko")+      , (72, "torbatamii-lama")+      , (73, "torbatamii-sadi")+      , (74, "torbatamii-afur")+      , (75, "torbatamii-shan")+      , (76, "torbatamii-jaya")+      , (77, "torbatamii-torba")+      , (78, "torbatamii-saddeet")+      , (79, "torbatamii-sagal")+      , (80, "saddeetama")+      , (81, "saddeetamii-tokko")+      , (82, "saddeetamii-lama")+      , (83, "saddeetamii-sadi")+      , (84, "saddeetamii-afur")+      , (85, "saddeetamii-shan")+      , (86, "saddeetamii-jaya")+      , (87, "saddeetamii-torba")+      , (88, "saddeetamii-saddeet")+      , (89, "saddeetamii-sagal")+      , (90, "sagaltama")+      , (91, "sagaltamii-tokko")+      , (92, "sagaltamii-lama")+      , (93, "sagaltamii-sadi")+      , (94, "sagaltamii-afur")+      , (95, "sagaltamii-shan")+      , (96, "sagaltamii-jaya")+      , (97, "sagaltamii-torba")+      , (98, "sagaltamii-saddeet")+      , (99, "sagaltamii-sagal")+      , (100, "dhibba")+      , (101, "dhibba tokko")+      , (102, "dhibba lama")+      , (103, "dhibba sadi")+      , (104, "dhibba afur")+      , (105, "dhibba shan")+      , (106, "dhibba jaya")+      , (107, "dhibba torba")+      , (108, "dhibba saddeet")+      , (109, "dhibba sagal")+      , (110, "dhibba khudan")+      , (123, "dhibba digdamii-sadi")+      , (200, "lama dhibba")+      , (300, "sadi dhibba")+      , (321, "sadi dhibba digdamii-tokko")+      , (400, "afur dhibba")+      , (500, "shan dhibba")+      , (600, "jaya dhibba")+      , (700, "torba dhibba")+      , (800, "saddeet dhibba")+      , (900, "sagal dhibba")+      , (909, "sagal dhibba sagal")+      , (990, "sagal dhibba sagaltama")+      , (999, "sagal dhibba sagaltamii-sagal")+      , (1000, "kuma")+      , (1001, "kuma tokko")+      , (1008, "kuma saddeet")+      , (1234, "kuma lama dhibba soddomii-afur")+      , (2000, "lama kuma")+      , (3000, "sadi kuma")+      , (4000, "afur kuma")+      , (4321, "afur kuma sadi dhibba digdamii-tokko")+      , (5000, "shan kuma")+      , (6000, "jaya kuma")+      , (7000, "torba kuma")+      , (8000, "saddeet kuma")+      , (9000, "sagal kuma")+      ]+    )+  ]
src-test/Text/Numeral/Language/PAA/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -22,8 +17,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -31,7 +25,7 @@ -- Test data -------------------------------------------------------------------------------- -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
src-test/Text/Numeral/Language/PDC/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-3@]        pdc @@ -17,9 +12,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Integral )-import "base-unicode-symbols" Prelude.Unicode ( (⋅) )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "numerals" Text.Numeral.Misc ( dec ) import "this" Text.Numeral.Test ( TestData ) @@ -32,7 +25,7 @@   http://www.languagesandnumbers.com/how-to-count-in-pennsylvania-german/en/pdc/ -} -cardinals ∷ (Integral i) ⇒ TestData i+cardinals :: (Integral i) => TestData i cardinals =   [ ( "default"     , defaultInflection@@ -163,7 +156,7 @@       , (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")+      , (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
@@ -1,204 +0,0 @@-{-# 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/POL/TestData.hs view
@@ -0,0 +1,196 @@+{-|+[@ISO639-1@]        pl++[@ISO639-2@]        pol++[@ISO639-3@]        pol++[@Native name@]     język polski++[@English name@]    Polish+-}++module Text.Numeral.Language.POL.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/POR/TestData.hs view
@@ -0,0 +1,291 @@+{-|+[@ISO639-1@]        pt++[@ISO639-2@]        por++[@ISO639-3@]        por++[@Native name@]     Português++[@English name@]    Portuguese+-}++module Text.Numeral.Language.POR.TestData (cardinals, ordinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Control.Arrow ( second )+import "base" Data.Monoid ( (<>) )+import "numerals" Text.Numeral.Grammar+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/PT/TestData.hs
@@ -1,302 +0,0 @@-{-# 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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -36,7 +30,7 @@ -}  -- Note: This is the Prilep dialect as spoken in Macedonia.-cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/RMY_KAL/TestData.hs view
@@ -0,0 +1,175 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        -++[@Native name@]     -++[@English name@]    Kalderash Romani+-}+module Text.Numeral.Language.RMY_KAL.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-kalderash-romani/en/rmy-kal/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (0, "núla")+      , (1, "jek")+      , (2, "duj")+      , (3, "trin")+      , (4, "štar")+      , (5, "panź")+      , (6, "šov")+      , (7, "jefta")+      , (8, "oxto")+      , (9, "iňa")+      , (10, "deš")+      , (11, "dešujek")+      , (12, "dešuduj")+      , (13, "dešutrin")+      , (14, "dešuštar")+      , (15, "dešupanź")+      , (16, "dešušov")+      , (17, "dešjefta")+      , (18, "dešoxto")+      , (19, "dešuiňa")+      , (20, "biš")+      , (21, "biš taj jek")+      , (22, "biš taj duj")+      , (23, "biš taj trin")+      , (24, "biš taj štar")+      , (25, "biš taj panź")+      , (26, "biš taj šov")+      , (27, "biš taj jefta")+      , (28, "biš taj oxto")+      , (29, "biš taj iňa")+      , (30, "tranda")+      , (31, "tranda taj jek")+      , (32, "tranda taj duj")+      , (33, "tranda taj trin")+      , (34, "tranda taj štar")+      , (35, "tranda taj panź")+      , (36, "tranda taj šov")+      , (37, "tranda taj jefta")+      , (38, "tranda taj oxto")+      , (39, "tranda taj iňa")+      , (40, "saranda")+      , (41, "saranda taj jek")+      , (42, "saranda taj duj")+      , (43, "saranda taj trin")+      , (44, "saranda taj štar")+      , (45, "saranda taj panź")+      , (46, "saranda taj šov")+      , (47, "saranda taj jefta")+      , (48, "saranda taj oxto")+      , (49, "saranda taj iňa")+      , (50, "pinda")+      , (51, "pinda taj jek")+      , (52, "pinda taj duj")+      , (53, "pinda taj trin")+      , (54, "pinda taj štar")+      , (55, "pinda taj panź")+      , (56, "pinda taj šov")+      , (57, "pinda taj jefta")+      , (58, "pinda taj oxto")+      , (59, "pinda taj iňa")+      , (60, "šovardeš")+      , (61, "šovardeš taj jek")+      , (62, "šovardeš taj duj")+      , (63, "šovardeš taj trin")+      , (64, "šovardeš taj štar")+      , (65, "šovardeš taj panź")+      , (66, "šovardeš taj šov")+      , (67, "šovardeš taj jefta")+      , (68, "šovardeš taj oxto")+      , (69, "šovardeš taj iňa")+      , (70, "jeftavardeš")+      , (71, "jeftavardeš taj jek")+      , (72, "jeftavardeš taj duj")+      , (73, "jeftavardeš taj trin")+      , (74, "jeftavardeš taj štar")+      , (75, "jeftavardeš taj panź")+      , (76, "jeftavardeš taj šov")+      , (77, "jeftavardeš taj jefta")+      , (78, "jeftavardeš taj oxto")+      , (79, "jeftavardeš taj iňa")+      , (80, "oxtovardeš")+      , (81, "oxtovardeš taj jek")+      , (82, "oxtovardeš taj duj")+      , (83, "oxtovardeš taj trin")+      , (84, "oxtovardeš taj štar")+      , (85, "oxtovardeš taj panź")+      , (86, "oxtovardeš taj šov")+      , (87, "oxtovardeš taj jefta")+      , (88, "oxtovardeš taj oxto")+      , (89, "oxtovardeš taj iňa")+      , (90, "iňavardeš")+      , (91, "iňavardeš taj jek")+      , (92, "iňavardeš taj duj")+      , (93, "iňavardeš taj trin")+      , (94, "iňavardeš taj štar")+      , (95, "iňavardeš taj panź")+      , (96, "iňavardeš taj šov")+      , (97, "iňavardeš taj jefta")+      , (98, "iňavardeš taj oxto")+      , (99, "iňavardeš taj iňa")+      , (100, "šêl")+      , (101, "šêl jek")+      , (102, "šêl duj")+      , (103, "šêl trin")+      , (104, "šêl štar")+      , (105, "šêl panź")+      , (106, "šêl šov")+      , (107, "šêl jefta")+      , (108, "šêl oxto")+      , (109, "šêl iňa")+      , (110, "šêl deš")+      , (123, "šêl biš taj trin")+      , (200, "duj šêla")+      , (300, "trin šêla")+      , (321, "trin šêla biš taj jek")+      , (400, "štar šêla")+      , (500, "panź šêla")+      , (600, "šov šêla")+      , (700, "jefta šêla")+      , (800, "oxto šêla")+      , (900, "iňa šêla")+      , (909, "iňa šêla iňa")+      , (990, "iňa šêla iňavardeš")+      , (999, "iňa šêla iňavardeš taj iňa")+      , (1000, "mija")+      , (1001, "mija jek")+      , (1008, "mija oxto")+      , (1234, "mija duj šêla tranda taj štar")+      , (2000, "duj miji")+      , (3000, "trin miji")+      , (4000, "štar miji")+      , (4321, "štar miji trin šêla biš taj jek")+      , (5000, "panź miji")+      , (6000, "šov miji")+      , (7000, "jefta miji")+      , (8000, "oxto miji")+      , (9000, "iňa miji")+      ]+    )+  ]
− src-test/Text/Numeral/Language/RO/TestData.hs
@@ -1,144 +0,0 @@-{-# 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/RON/TestData.hs view
@@ -0,0 +1,137 @@+{-|+[@ISO639-1@]        ro++[@ISO639-2B@]       rum++[@ISO639-2T@]       ron++[@ISO639-3@]        ron++[@Native name@]     română++[@English name@]    Romanian+-}++module Text.Numeral.Language.RON.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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
@@ -1,192 +0,0 @@-{-# 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/RUS/TestData.hs view
@@ -0,0 +1,184 @@+{-|+[@ISO639-1@]        ru++[@ISO639-2@]        rus++[@ISO639-3@]        rus++[@Native name@]     Русский язык++[@English name@]    Russian+-}++module Text.Numeral.Language.RUS.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -23,8 +17,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -37,7 +30,7 @@   http://www.sf.airnet.ne.jp/~ts/language/number/scots.html -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/SME/TestData.hs view
@@ -0,0 +1,208 @@+{-|+[@ISO639-1@]        se++[@ISO639-2@]        sme++[@ISO639-3@]        sme++[@Native name@]     davvisámegiella++[@English name@]    Northern Sami+-}+module Text.Numeral.Language.SME.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-northern-sami/en/sme/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "okta")+      , (2, "guokte")+      , (3, "golbma")+      , (4, "njeallje")+      , (5, "vihtta")+      , (6, "guhtta")+      , (7, "čieža")+      , (8, "gávcci")+      , (9, "ovcci")+      , (10, "logi")+      , (11, "oktanuppelohkái")+      , (12, "guoktenuppelohkái")+      , (13, "golbmanuppelohkái")+      , (14, "njealljenuppelohkái")+      , (15, "vihttanuppelohkái")+      , (16, "guhttanuppelohkái")+      , (17, "čiežanuppelohkái")+      , (18, "gávccinuppelohkái")+      , (19, "ovccinuppelohkái")+      , (20, "guoktelogi")+      , (21, "guoktelogiokta")+      , (22, "guoktelogiguokte")+      , (23, "guoktelogigolbma")+      , (24, "guokteloginjeallje")+      , (25, "guoktelogivihtta")+      , (26, "guoktelogiguhtta")+      , (27, "guoktelogičieža")+      , (28, "guoktelogigávcci")+      , (29, "guoktelogiovcci")+      , (30, "golbmalogi")+      , (31, "golbmalogiokta")+      , (32, "golbmalogiguokte")+      , (33, "golbmalogigolbma")+      , (34, "golbmaloginjeallje")+      , (35, "golbmalogivihtta")+      , (36, "golbmalogiguhtta")+      , (37, "golbmalogičieža")+      , (38, "golbmalogigávcci")+      , (39, "golbmalogiovcci")+      , (40, "njealljelogi")+      , (41, "njealljelogiokta")+      , (42, "njealljelogiguokte")+      , (43, "njealljelogigolbma")+      , (44, "njealljeloginjeallje")+      , (45, "njealljelogivihtta")+      , (46, "njealljelogiguhtta")+      , (47, "njealljelogičieža")+      , (48, "njealljelogigávcci")+      , (49, "njealljelogiovcci")+      , (50, "vihttalogi")+      , (51, "vihttalogiokta")+      , (52, "vihttalogiguokte")+      , (53, "vihttalogigolbma")+      , (54, "vihttaloginjeallje")+      , (55, "vihttalogivihtta")+      , (56, "vihttalogiguhtta")+      , (57, "vihttalogičieža")+      , (58, "vihttalogigávcci")+      , (59, "vihttalogiovcci")+      , (60, "guhttalogi")+      , (61, "guhttalogiokta")+      , (62, "guhttalogiguokte")+      , (63, "guhttalogigolbma")+      , (64, "guhttaloginjeallje")+      , (65, "guhttalogivihtta")+      , (66, "guhttalogiguhtta")+      , (67, "guhttalogičieža")+      , (68, "guhttalogigávcci")+      , (69, "guhttalogiovcci")+      , (70, "čiežalogi")+      , (71, "čiežalogiokta")+      , (72, "čiežalogiguokte")+      , (73, "čiežalogigolbma")+      , (74, "čiežaloginjeallje")+      , (75, "čiežalogivihtta")+      , (76, "čiežalogiguhtta")+      , (77, "čiežalogičieža")+      , (78, "čiežalogigávcci")+      , (79, "čiežalogiovcci")+      , (80, "gávccilogi")+      , (81, "gávccilogiokta")+      , (82, "gávccilogiguokte")+      , (83, "gávccilogigolbma")+      , (84, "gávcciloginjeallje")+      , (85, "gávccilogivihtta")+      , (86, "gávccilogiguhtta")+      , (87, "gávccilogičieža")+      , (88, "gávccilogigávcci")+      , (89, "gávccilogiovcci")+      , (90, "ovccilogi")+      , (91, "ovccilogiokta")+      , (92, "ovccilogiguokte")+      , (93, "ovccilogigolbma")+      , (94, "ovcciloginjeallje")+      , (95, "ovccilogivihtta")+      , (96, "ovccilogiguhtta")+      , (97, "ovccilogičieža")+      , (98, "ovccilogigávcci")+      , (99, "ovccilogiovcci")+      , (100, "čuođi")+      , (101, "čuođiokta")+      , (102, "čuođiguokte")+      , (103, "čuođigolbma")+      , (104, "čuođinjeallje")+      , (105, "čuođivihtta")+      , (106, "čuođiguhtta")+      , (107, "čuođičieža")+      , (108, "čuođigávcci")+      , (109, "čuođiovcci")+      , (110, "čuođilogi")+      , (123, "čuođiguoktelogigolbma")+      , (200, "guoktečuođi")+      , (300, "golbmačuođi")+      , (321, "golbmačuođiguoktelogiokta")+      , (400, "njeallječuođi")+      , (500, "vihttačuođi")+      , (600, "guhttačuođi")+      , (700, "čiežačuođi")+      , (800, "gávccičuođi")+      , (900, "ovccičuođi")+      , (909, "ovccičuođiovcci")+      , (990, "ovccičuođiovccilogi")+      , (999, "ovccičuođiovccilogiovcci")+      , (1000, "duhat")+      , (1001, "duhatokta")+      , (1008, "duhatgávcci")+      , (1234, "duhatguoktečuođigolbmaloginjeallje")+      , (2000, "guokteduhat")+      , (3000, "golbmaduhat")+      , (4000, "njealljeduhat")+      , (4321, "njealljeduhatgolbmačuođiguoktelogiokta")+      , (5000, "vihttaduhat")+      , (6000, "guhttaduhat")+      , (7000, "čiežaduhat")+      , (8000, "gávcciduhat")+      , (9000, "ovcciduhat")+      , (10000, "logi duhat")+      , (12345, "guoktenuppelohkái duhatgolbmačuođinjealljelogivihtta")+      , (20000, "guoktelogi duhat")+      , (30000, "golbmalogi duhat")+      , (40000, "njealljelogi duhat")+      , (50000, "vihttalogi duhat")+      , (54321, "vihttaloginjealljeduhatgolbmačuođiguoktelogiokta")+      , (60000, "guhttalogi duhat")+      , (70000, "čiežalogi duhat")+      , (80000, "gávccilogi duhat")+      , (90000, "ovccilogi duhat")+      , (100000, "čuođi duhat")+      , (123456, "čuođiguoktelogigolbmaduhatnjeallječuođivihttalogiguhtta")+      , (200000, "guoktečuođi duhat")+      , (300000, "golbmačuođi duhat")+      , (400000, "njeallječuođi duhat")+      , (500000, "vihttačuođi duhat")+      , (600000, "guhttačuođi duhat")+      , (654321, "guhttačuođivihttaloginjealljeduhatgolbmačuođiguoktelogiokta")+      , (700000, "čiežačuođi duhat")+      , (800000, "gávccičuođi duhat")+      , (900000, "ovccičuođi duhat")+      , (1000000, "miljon")+      , (1000001, "miljonokta")+      , (1234567, "miljonguoktečuođigolbmaloginjealljeduhatvihttačuođiguhttalogičieža")+      , (2000000, "guoktemiljovnna")+      , (3000000, "golbmamiljovnna")+      , (4000000, "njealljemiljovnna")+      , (5000000, "vihttamiljovnna")+      , (6000000, "guhttamiljovnna")+      , (7000000, "čiežamiljovnna")+      , (7654321, "čiežamiljovnnaguhttačuođivihttaloginjealljeduhatgolbmačuođiguoktelogiokta")+      , (8000000, "gávccimiljovnna")+      , (9000000, "ovccimiljovnna")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/SMN/TestData.hs view
@@ -0,0 +1,208 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        smn++[@ISO639-3@]        smn++[@Native name@]     anarâškielâ++[@English name@]    Inari Sami+-}+module Text.Numeral.Language.SMN.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-inari-sami/en/smn/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "ohtâ")+      , (2, "kyehti")+      , (3, "kulmâ")+      , (4, "nelji")+      , (5, "vittâ")+      , (6, "kuttâ")+      , (7, "čiččâm")+      , (8, "käävci")+      , (9, "oovce")+      , (10, "love")+      , (11, "ohtunubáloh")+      , (12, "kyehtnubáloh")+      , (13, "kulmânubáloh")+      , (14, "neljinubáloh")+      , (15, "vittânubáloh")+      , (16, "kuttânubáloh")+      , (17, "čiččâmnubáloh")+      , (18, "käävcinubáloh")+      , (19, "oovcenubáloh")+      , (20, "kyehtlov")+      , (21, "kyehtlovohtâ")+      , (22, "kyehtlovkyehti")+      , (23, "kyehtlovkulmâ")+      , (24, "kyehtlovnelji")+      , (25, "kyehtlovvittâ")+      , (26, "kyehtlovkuttâ")+      , (27, "kyehtlovčiččâm")+      , (28, "kyehtlovkäävci")+      , (29, "kyehtlovoovce")+      , (30, "kulmâlov")+      , (31, "kulmâlovohtâ")+      , (32, "kulmâlovkyehti")+      , (33, "kulmâlovkulmâ")+      , (34, "kulmâlovnelji")+      , (35, "kulmâlovvittâ")+      , (36, "kulmâlovkuttâ")+      , (37, "kulmâlovčiččâm")+      , (38, "kulmâlovkäävci")+      , (39, "kulmâlovoovce")+      , (40, "neljilov")+      , (41, "neljilovohtâ")+      , (42, "neljilovkyehti")+      , (43, "neljilovkulmâ")+      , (44, "neljilovnelji")+      , (45, "neljilovvittâ")+      , (46, "neljilovkuttâ")+      , (47, "neljilovčiččâm")+      , (48, "neljilovkäävci")+      , (49, "neljilovoovce")+      , (50, "vittlov")+      , (51, "vittlovohtâ")+      , (52, "vittlovkyehti")+      , (53, "vittlovkulmâ")+      , (54, "vittlovnelji")+      , (55, "vittlovvittâ")+      , (56, "vittlovkuttâ")+      , (57, "vittlovčiččâm")+      , (58, "vittlovkäävci")+      , (59, "vittlovoovce")+      , (60, "kuttlov")+      , (61, "kuttlovohtâ")+      , (62, "kuttlovkyehti")+      , (63, "kuttlovkulmâ")+      , (64, "kuttlovnelji")+      , (65, "kuttlovvittâ")+      , (66, "kuttlovkuttâ")+      , (67, "kuttlovčiččâm")+      , (68, "kuttlovkäävci")+      , (69, "kuttlovoovce")+      , (70, "čiččâmlov")+      , (71, "čiččâmlovohtâ")+      , (72, "čiččâmlovkyehti")+      , (73, "čiččâmlovkulmâ")+      , (74, "čiččâmlovnelji")+      , (75, "čiččâmlovvittâ")+      , (76, "čiččâmlovkuttâ")+      , (77, "čiččâmlovčiččâm")+      , (78, "čiččâmlovkäävci")+      , (79, "čiččâmlovoovce")+      , (80, "kähcilov")+      , (81, "kähcilovohtâ")+      , (82, "kähcilovkyehti")+      , (83, "kähcilovkulmâ")+      , (84, "kähcilovnelji")+      , (85, "kähcilovvittâ")+      , (86, "kähcilovkuttâ")+      , (87, "kähcilovčiččâm")+      , (88, "kähcilovkäävci")+      , (89, "kähcilovoovce")+      , (90, "ohcelov")+      , (91, "ohcelovohtâ")+      , (92, "ohcelovkyehti")+      , (93, "ohcelovkulmâ")+      , (94, "ohcelovnelji")+      , (95, "ohcelovvittâ")+      , (96, "ohcelovkuttâ")+      , (97, "ohcelovčiččâm")+      , (98, "ohcelovkäävci")+      , (99, "ohcelovoovce")+      , (100, "čyeđe")+      , (101, "čyeđe ohtâ")+      , (102, "čyeđe kyehti")+      , (103, "čyeđe kulmâ")+      , (104, "čyeđe nelji")+      , (105, "čyeđe vittâ")+      , (106, "čyeđe kuttâ")+      , (107, "čyeđe čiččâm")+      , (108, "čyeđe käävci")+      , (109, "čyeđe oovce")+      , (110, "čyeđe love")+      , (123, "čyeđe kyehtlovkulmâ")+      , (200, "kyehtičyeđe")+      , (300, "kulmâčyeđe")+      , (321, "kulmâčyeđe kyehtlovohtâ")+      , (400, "neljičyeđe")+      , (500, "vittâčyeđe")+      , (600, "kuttâčyeđe")+      , (700, "čiččâmčyeđe")+      , (800, "käävcičyeđe")+      , (900, "oovcečyeđe")+      , (909, "oovcečyeđe oovce")+      , (990, "oovcečyeđe ohcelov")+      , (999, "oovcečyeđe ohcelovoovce")+      , (1000, "tuhhát")+      , (1001, "tuhhát ohtâ")+      , (1008, "tuhhát käävci")+      , (1234, "tuhhát kyehtičyeđe kulmâlovnelji")+      , (2000, "kyehttuhhát")+      , (3000, "kulmâtuhhát")+      , (4000, "neljituhhát")+      , (4321, "neljituhhát kulmâčyeđe kyehtlovohtâ")+      , (5000, "vittâtuhhát")+      , (6000, "kuttâtuhhát")+      , (7000, "čiččâmtuhhát")+      , (8000, "käävcituhhát")+      , (9000, "oovcetuhhát")+      , (10000, "love tuhhát")+      , (12345, "kyehtnubáloh tuhhát kulmâčyeđe neljilovvittâ")+      , (20000, "kyehtlov tuhhát")+      , (30000, "kulmâlov tuhhát")+      , (40000, "neljilov tuhhát")+      , (50000, "vittlov tuhhát")+      , (54321, "vittlovneljituhhát kulmâčyeđe kyehtlovohtâ")+      , (60000, "kuttlov tuhhát")+      , (70000, "čiččâmlov tuhhát")+      , (80000, "kähcilov tuhhát")+      , (90000, "ohcelov tuhhát")+      , (100000, "čyeđe tuhhát")+      , (123456, "čyeđe kyehtlovkulmâtuhhát neljičyeđe vittlovkuttâ")+      , (200000, "kyehtičyeđe tuhhát")+      , (300000, "kulmâčyeđe tuhhát")+      , (400000, "neljičyeđe tuhhát")+      , (500000, "vittâčyeđe tuhhát")+      , (600000, "kuttâčyeđe tuhhát")+      , (654321, "kuttâčyeđe vittlovneljituhhát kulmâčyeđe kyehtlovohtâ")+      , (700000, "čiččâmčyeđe tuhhát")+      , (800000, "käävcičyeđe tuhhát")+      , (900000, "oovcečyeđe tuhhát")+      , (1000000, "miljon")+      , (1000001, "miljon ohtâ")+      , (1234567, "miljon kyehtičyeđe kulmâlovneljituhhát vittâčyeđe kuttlovčiččâm")+      , (2000000, "kyehti miljona")+      , (3000000, "kulmâ miljona")+      , (4000000, "nelji miljona")+      , (5000000, "vittâ miljona")+      , (6000000, "kuttâ miljona")+      , (7000000, "čiččâm miljona")+      , (7654321, "čiččâm miljona kuttâčyeđe vittlovneljituhhát kulmâčyeđe kyehtlovohtâ")+      , (8000000, "käävci miljona")+      , (9000000, "oovce miljona")+      ]+    )+  ]
+ src-test/Text/Numeral/Language/SPA/TestData.hs view
@@ -0,0 +1,273 @@+{-|+[@ISO639-1@]        es++[@ISO639-2B@]       spa++[@ISO639-3@]        spa++[@Native name@]     Español++[@English name@]    Spanish+-}++module Text.Numeral.Language.SPA.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Prelude ( (+), Integral )+import "numerals" Text.Numeral.Misc ( dec )+import "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Grammar ( 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/SV/TestData.hs
@@ -1,308 +0,0 @@-{-# 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/SWE/TestData.hs view
@@ -0,0 +1,300 @@+{-|+[@ISO639-1@]        sv++[@ISO639-2B@]       swe++[@ISO639-3@]        swe++[@Native name@]     svenska++[@English name@]    Swedish+-}++module Text.Numeral.Language.SWE.TestData+    ( cardinals+    , ordinals+    , partitives+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -36,7 +30,7 @@   http://lingweb.eva.mpg.de/numeral/Tarahumara-Central.htm -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection@@ -121,16 +115,16 @@       , (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")+      , (80, "osá nahuosa macoy")+      , (81, "osá nahuosa macoy miná biré")+      , (82, "osá nahuosa macoy miná ocuá")+      , (83, "osá nahuosa macoy miná biquiyá")+      , (84, "osá nahuosa macoy miná nahuosa")+      , (85, "osá nahuosa macoy miná marí")+      , (86, "osá nahuosa macoy miná usani")+      , (87, "osá nahuosa macoy miná quicháo")+      , (88, "osá nahuosa macoy miná osá nahuó")+      , (89, "osá nahuosa macoy miná químacoy")       , (90, "que macoisa macoy")       , (91, "que macoisa macoy miná biré")       , (92, "que macoisa macoy miná ocuá")
+ src-test/Text/Numeral/Language/TGS/TestData.hs view
@@ -0,0 +1,161 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        tgs++[@Native name@]     -++[@English name@]    Nume+-}+module Text.Numeral.Language.TGS.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-nume/en/tgs/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "tuwal")+      , (2, "i-ru")+      , (3, "i-tol")+      , (4, "i-βet")+      , (5, "tiβi-lim")+      , (6, "leβe-te")+      , (7, "leβe-ru")+      , (8, "leβe-tol")+      , (9, "leβe-βet")+      , (10, "sanuβul tuwal")+      , (11, "sanuβul tuwal ndi win tuwal")+      , (12, "sanuβul tuwal ndi win ti-ru")+      , (13, "sanuβul tuwal ndi win ti-tol")+      , (14, "sanuβul tuwal ndi win ti-βet")+      , (15, "sanuβul tuwal ndi win tiβi-lim")+      , (16, "sanuβul tuwal ndi win ti-leβe-te")+      , (17, "sanuβul tuwal ndi win ti-leβe-ru")+      , (18, "sanuβul tuwal ndi win ti-leβe-tol")+      , (19, "sanuβul tuwal ndi win ti-leβe-βet")+      , (20, "sanuβul ru")+      , (21, "sanuβul ru ndi win tuwal")+      , (22, "sanuβul ru ndi win ti-ru")+      , (23, "sanuβul ru ndi win ti-tol")+      , (24, "sanuβul ru ndi win ti-βet")+      , (25, "sanuβul ru ndi win tiβi-lim")+      , (26, "sanuβul ru ndi win ti-leβe-te")+      , (27, "sanuβul ru ndi win ti-leβe-ru")+      , (28, "sanuβul ru ndi win ti-leβe-tol")+      , (29, "sanuβul ru ndi win ti-leβe-βet")+      , (30, "sanuβul tol")+      , (31, "sanuβul tol ndi win tuwal")+      , (32, "sanuβul tol ndi win ti-ru")+      , (33, "sanuβul tol ndi win ti-tol")+      , (34, "sanuβul tol ndi win ti-βet")+      , (35, "sanuβul tol ndi win tiβi-lim")+      , (36, "sanuβul tol ndi win ti-leβe-te")+      , (37, "sanuβul tol ndi win ti-leβe-ru")+      , (38, "sanuβul tol ndi win ti-leβe-tol")+      , (39, "sanuβul tol ndi win ti-leβe-βet")+      , (40, "sanuβul βet")+      , (41, "sanuβul βet ndi win tuwal")+      , (42, "sanuβul βet ndi win ti-ru")+      , (43, "sanuβul βet ndi win ti-tol")+      , (44, "sanuβul βet ndi win ti-βet")+      , (45, "sanuβul βet ndi win tiβi-lim")+      , (46, "sanuβul βet ndi win ti-leβe-te")+      , (47, "sanuβul βet ndi win ti-leβe-ru")+      , (48, "sanuβul βet ndi win ti-leβe-tol")+      , (49, "sanuβul βet ndi win ti-leβe-βet")+      , (50, "sanuβul tiβi-lim")+      , (51, "sanuβul tiβi-lim ndi win tuwal")+      , (52, "sanuβul tiβi-lim ndi win ti-ru")+      , (53, "sanuβul tiβi-lim ndi win ti-tol")+      , (54, "sanuβul tiβi-lim ndi win ti-βet")+      , (55, "sanuβul tiβi-lim ndi win tiβi-lim")+      , (56, "sanuβul tiβi-lim ndi win ti-leβe-te")+      , (57, "sanuβul tiβi-lim ndi win ti-leβe-ru")+      , (58, "sanuβul tiβi-lim ndi win ti-leβe-tol")+      , (59, "sanuβul tiβi-lim ndi win ti-leβe-βet")+      , (60, "sanuβul leβe-te")+      , (61, "sanuβul leβe-te ndi win tuwal")+      , (62, "sanuβul leβe-te ndi win ti-ru")+      , (63, "sanuβul leβe-te ndi win ti-tol")+      , (64, "sanuβul leβe-te ndi win ti-βet")+      , (65, "sanuβul leβe-te ndi win tiβi-lim")+      , (66, "sanuβul leβe-te ndi win ti-leβe-te")+      , (67, "sanuβul leβe-te ndi win ti-leβe-ru")+      , (68, "sanuβul leβe-te ndi win ti-leβe-tol")+      , (69, "sanuβul leβe-te ndi win ti-leβe-βet")+      , (70, "sanuβul leβe-ru")+      , (71, "sanuβul leβe-ru ndi win tuwal")+      , (72, "sanuβul leβe-ru ndi win ti-ru")+      , (73, "sanuβul leβe-ru ndi win ti-tol")+      , (74, "sanuβul leβe-ru ndi win ti-βet")+      , (75, "sanuβul leβe-ru ndi win tiβi-lim")+      , (76, "sanuβul leβe-ru ndi win ti-leβe-te")+      , (77, "sanuβul leβe-ru ndi win ti-leβe-ru")+      , (78, "sanuβul leβe-ru ndi win ti-leβe-tol")+      , (79, "sanuβul leβe-ru ndi win ti-leβe-βet")+      , (80, "sanuβul leβe-tol")+      , (81, "sanuβul leβe-tol ndi win tuwal")+      , (82, "sanuβul leβe-tol ndi win ti-ru")+      , (83, "sanuβul leβe-tol ndi win ti-tol")+      , (84, "sanuβul leβe-tol ndi win ti-βet")+      , (85, "sanuβul leβe-tol ndi win tiβi-lim")+      , (86, "sanuβul leβe-tol ndi win ti-leβe-te")+      , (87, "sanuβul leβe-tol ndi win ti-leβe-ru")+      , (88, "sanuβul leβe-tol ndi win ti-leβe-tol")+      , (89, "sanuβul leβe-tol ndi win ti-leβe-βet")+      , (90, "sanuβul leβe-βet")+      , (91, "sanuβul leβe-βet ndi win tuwal")+      , (92, "sanuβul leβe-βet ndi win ti-ru")+      , (93, "sanuβul leβe-βet ndi win ti-tol")+      , (94, "sanuβul leβe-βet ndi win ti-βet")+      , (95, "sanuβul leβe-βet ndi win tiβi-lim")+      , (96, "sanuβul leβe-βet ndi win ti-leβe-te")+      , (97, "sanuβul leβe-βet ndi win ti-leβe-ru")+      , (98, "sanuβul leβe-βet ndi win ti-leβe-tol")+      , (99, "sanuβul leβe-βet ndi win ti-leβe-βet")+      , (100, "muweldul")+      , (101, "muweldul ndi win tuwal")+      , (102, "muweldul ndi win ti-ru")+      , (103, "muweldul ndi win ti-tol")+      , (104, "muweldul ndi win ti-βet")+      , (105, "muweldul ndi win tiβi-lim")+      , (106, "muweldul ndi win ti-leβe-te")+      , (107, "muweldul ndi win ti-leβe-ru")+      , (108, "muweldul ndi win ti-leβe-tol")+      , (109, "muweldul ndi win ti-leβe-βet")+      , (110, "muweldul sanuβul tuwal")+      , (123, "muweldul sanuβul ru ndi win ti-tol")+      , (200, "muweldul i-ru")+      , (300, "muweldul i-tol")+      , (321, "muweldul i-tol sanuβul ru ndi win tuwal")+      , (400, "muweldul i-βet")+      , (500, "muweldul tiβi-lim")+      , (600, "muweldul leβe-te")+      , (700, "muweldul leβe-ru")+      , (800, "muweldul leβe-tol")+      , (900, "muweldul leβe-βet")+      , (909, "muweldul leβe-βet ndi win ti-leβe-βet")+      , (990, "muweldul leβe-βet sanuβul leβe-βet")+      , (999, "muweldul leβe-βet sanuβul leβe-βet ndi win ti-leβe-βet")+      ]+    )+  ]
− src-test/Text/Numeral/Language/TR/TestData.hs
@@ -1,262 +0,0 @@-{-# 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/TUR/TestData.hs view
@@ -0,0 +1,255 @@+{-|+[@ISO639-1@]        tr++[@ISO639-2@]        tur++[@ISO639-3@]        tur++[@Native name@]     Türkçe++[@English name@]    Turkish+-}++module Text.Numeral.Language.TUR.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/WMW/TestData.hs view
@@ -0,0 +1,174 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        wmw++[@Native name@]     -++[@English name@]    Mwani+-}+module Text.Numeral.Language.WMW.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-mwani/en/wmw/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "m’moja")+      , (2, "mbire")+      , (3, "natu")+      , (4, "n’né")+      , (5, "n’tano")+      , (6, "sita")+      , (7, "saba")+      , (8, "nane")+      , (9, "khénta")+      , (10, "kumi")+      , (11, "kumi na m’moja")+      , (12, "kumi na mbire")+      , (13, "kumi na natu")+      , (14, "kumi na n’né")+      , (15, "kumi na n’tano")+      , (16, "kumi na sita")+      , (17, "kumi na saba")+      , (18, "kumi na nane")+      , (19, "kumi na khénta")+      , (20, "shirini")+      , (21, "shirini na m’moja")+      , (22, "shirini na mbire")+      , (23, "shirini na natu")+      , (24, "shirini na n’né")+      , (25, "shirini na n’tano")+      , (26, "shirini na sita")+      , (27, "shirini na saba")+      , (28, "shirini na nane")+      , (29, "shirini na khénta")+      , (30, "talatini")+      , (31, "talatini na m’moja")+      , (32, "talatini na mbire")+      , (33, "talatini na natu")+      , (34, "talatini na n’né")+      , (35, "talatini na n’tano")+      , (36, "talatini na sita")+      , (37, "talatini na saba")+      , (38, "talatini na nane")+      , (39, "talatini na khénta")+      , (40, "arubaine")+      , (41, "arubaine na m’moja")+      , (42, "arubaine na mbire")+      , (43, "arubaine na natu")+      , (44, "arubaine na n’né")+      , (45, "arubaine na n’tano")+      , (46, "arubaine na sita")+      , (47, "arubaine na saba")+      , (48, "arubaine na nane")+      , (49, "arubaine na khénta")+      , (50, "amusine")+      , (51, "amusine na m’moja")+      , (52, "amusine na mbire")+      , (53, "amusine na natu")+      , (54, "amusine na n’né")+      , (55, "amusine na n’tano")+      , (56, "amusine na sita")+      , (57, "amusine na saba")+      , (58, "amusine na nane")+      , (59, "amusine na khénta")+      , (60, "sitine")+      , (61, "sitine na m’moja")+      , (62, "sitine na mbire")+      , (63, "sitine na natu")+      , (64, "sitine na n’né")+      , (65, "sitine na n’tano")+      , (66, "sitine na sita")+      , (67, "sitine na saba")+      , (68, "sitine na nane")+      , (69, "sitine na khénta")+      , (70, "sabine")+      , (71, "sabine na m’moja")+      , (72, "sabine na mbire")+      , (73, "sabine na natu")+      , (74, "sabine na n’né")+      , (75, "sabine na n’tano")+      , (76, "sabine na sita")+      , (77, "sabine na saba")+      , (78, "sabine na nane")+      , (79, "sabine na khénta")+      , (80, "tamanine")+      , (81, "tamanine na m’moja")+      , (82, "tamanine na mbire")+      , (83, "tamanine na natu")+      , (84, "tamanine na n’né")+      , (85, "tamanine na n’tano")+      , (86, "tamanine na sita")+      , (87, "tamanine na saba")+      , (88, "tamanine na nane")+      , (89, "tamanine na khénta")+      , (90, "tusuine")+      , (91, "tusuine na m’moja")+      , (92, "tusuine na mbire")+      , (93, "tusuine na natu")+      , (94, "tusuine na n’né")+      , (95, "tusuine na n’tano")+      , (96, "tusuine na sita")+      , (97, "tusuine na saba")+      , (98, "tusuine na nane")+      , (99, "tusuine na khénta")+      , (100, "mia")+      , (101, "mia na m’moja")+      , (102, "mia na mbire")+      , (103, "mia na natu")+      , (104, "mia na n’né")+      , (105, "mia na n’tano")+      , (106, "mia na sita")+      , (107, "mia na saba")+      , (108, "mia na nane")+      , (109, "mia na khénta")+      , (110, "mia na kumi")+      , (123, "mia na shirini na natu")+      , (200, "mia mbire")+      , (300, "mia natu")+      , (321, "mia natu na shirini na m’moja")+      , (400, "mia n’né")+      , (500, "mia n’tano")+      , (600, "mia sita")+      , (700, "mia saba")+      , (800, "mia nane")+      , (900, "mia khénta")+      , (909, "mia khénta na khénta")+      , (990, "mia khénta na tusuine")+      , (999, "mia khénta na tusuine na khénta")+      , (1000, "álufu")+      , (1001, "álufu m’moja na m’moja")+      , (1008, "álufu m’moja na nane")+      , (1234, "álufu m’moja na mia mbire na talatini na n’né")+      , (2000, "álufu mbire")+      , (3000, "álufu natu")+      , (4000, "álufu n’né")+      , (4321, "álufu n’né na mia natu na shirini na m’moja")+      , (5000, "álufu n’tano")+      , (6000, "álufu sita")+      , (7000, "álufu saba")+      , (8000, "álufu nane")+      , (9000, "álufu khénta")+      ]+    )+  ]
− src-test/Text/Numeral/Language/WO/TestData.hs
@@ -1,174 +0,0 @@-{-# 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/WOL/TestData.hs view
@@ -0,0 +1,167 @@+{-|+[@ISO639-1@]        wo++[@ISO639-2@]        wo1++[@ISO639-3@]        wo1++[@Native name@]     Wolof++[@English name@]    Wolof+-}++module Text.Numeral.Language.WOL.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( 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/XPQ/TestData.hs view
@@ -0,0 +1,138 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        xpq++[@Native name@]     -++[@English name@]    Mohegan-Pequot+-}+module Text.Numeral.Language.XPQ.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-mohegan-pequot/en/xpq/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "nuqut")+      , (2, "nis")+      , (3, "shwi")+      , (4, "yáw")+      , (5, "nupáw")+      , (6, "qutôsk")+      , (7, "nisôsk")+      , (8, "shwôsk")+      , (9, "pásukokun")+      , (10, "páyaq")+      , (11, "páyaq napni nuqut")+      , (12, "páyaq napni nis")+      , (13, "páyaq napni shwi")+      , (14, "páyaq napni yáw")+      , (15, "páyaq napni nupáw")+      , (16, "páyaq napni qutôsk")+      , (17, "páyaq napni nisôsk")+      , (18, "páyaq napni shwôsk")+      , (19, "páyaq napni pásukokun")+      , (20, "nisuncák")+      , (21, "nisuncák napni nuqut")+      , (22, "nisuncák napni nis")+      , (23, "nisuncák napni shwi")+      , (24, "nisuncák napni yáw")+      , (25, "nisuncák napni nupáw")+      , (26, "nisuncák napni qutôsk")+      , (27, "nisuncák napni nisôsk")+      , (28, "nisuncák napni shwôsk")+      , (29, "nisuncák napni pásukokun")+      , (30, "swuncák")+      , (31, "swuncák napni nuqut")+      , (32, "swuncák napni nis")+      , (33, "swuncák napni shwi")+      , (34, "swuncák napni yáw")+      , (35, "swuncák napni nupáw")+      , (36, "swuncák napni qutôsk")+      , (37, "swuncák napni nisôsk")+      , (38, "swuncák napni shwôsk")+      , (39, "swuncák napni pásukokun")+      , (40, "yáwuncák")+      , (41, "yáwuncák napni nuqut")+      , (42, "yáwuncák napni nis")+      , (43, "yáwuncák napni shwi")+      , (44, "yáwuncák napni yáw")+      , (45, "yáwuncák napni nupáw")+      , (46, "yáwuncák napni qutôsk")+      , (47, "yáwuncák napni nisôsk")+      , (48, "yáwuncák napni shwôsk")+      , (49, "yáwuncák napni pásukokun")+      , (50, "nupáw-cahshuncák")+      , (51, "nupáw-cahshuncák napni nuqut")+      , (52, "nupáw-cahshuncák napni nis")+      , (53, "nupáw-cahshuncák napni shwi")+      , (54, "nupáw-cahshuncák napni yáw")+      , (55, "nupáw-cahshuncák napni nupáw")+      , (56, "nupáw-cahshuncák napni qutôsk")+      , (57, "nupáw-cahshuncák napni nisôsk")+      , (58, "nupáw-cahshuncák napni shwôsk")+      , (59, "nupáw-cahshuncák napni pásukokun")+      , (60, "qutôsk-cahshuncák")+      , (61, "qutôsk-cahshuncák napni nuqut")+      , (62, "qutôsk-cahshuncák napni nis")+      , (63, "qutôsk-cahshuncák napni shwi")+      , (64, "qutôsk-cahshuncák napni yáw")+      , (65, "qutôsk-cahshuncák napni nupáw")+      , (66, "qutôsk-cahshuncák napni qutôsk")+      , (67, "qutôsk-cahshuncák napni nisôsk")+      , (68, "qutôsk-cahshuncák napni shwôsk")+      , (69, "qutôsk-cahshuncák napni pásukokun")+      , (70, "nisôsk-cahshuncák")+      , (71, "nisôsk-cahshuncák napni nuqut")+      , (72, "nisôsk-cahshuncák napni nis")+      , (73, "nisôsk-cahshuncák napni shwi")+      , (74, "nisôsk-cahshuncák napni yáw")+      , (75, "nisôsk-cahshuncák napni nupáw")+      , (76, "nisôsk-cahshuncák napni qutôsk")+      , (77, "nisôsk-cahshuncák napni nisôsk")+      , (78, "nisôsk-cahshuncák napni shwôsk")+      , (79, "nisôsk-cahshuncák napni pásukokun")+      , (80, "shwôsk-cahshuncák")+      , (81, "shwôsk-cahshuncák napni nuqut")+      , (82, "shwôsk-cahshuncák napni nis")+      , (83, "shwôsk-cahshuncák napni shwi")+      , (84, "shwôsk-cahshuncák napni yáw")+      , (85, "shwôsk-cahshuncák napni nupáw")+      , (86, "shwôsk-cahshuncák napni qutôsk")+      , (87, "shwôsk-cahshuncák napni nisôsk")+      , (88, "shwôsk-cahshuncák napni shwôsk")+      , (89, "shwôsk-cahshuncák napni pásukokun")+      , (90, "pásukokun-cahshuncák")+      , (91, "pásukokun-cahshuncák napni nuqut")+      , (92, "pásukokun-cahshuncák napni nis")+      , (93, "pásukokun-cahshuncák napni shwi")+      , (94, "pásukokun-cahshuncák napni yáw")+      , (95, "pásukokun-cahshuncák napni nupáw")+      , (96, "pásukokun-cahshuncák napni qutôsk")+      , (97, "pásukokun-cahshuncák napni nisôsk")+      , (98, "pásukokun-cahshuncák napni shwôsk")+      , (99, "pásukokun-cahshuncák napni pásukokun")+      , (100, "pásuq")+      ]+    )+  ]
src-test/Text/Numeral/Language/YOR/TestData.hs view
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        yo @@ -23,8 +17,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude     ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -32,7 +25,7 @@ -- Test data -------------------------------------------------------------------------------- -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection@@ -148,4 +141,3 @@       ]     )   ]-
+ src-test/Text/Numeral/Language/ZAI/TestData.hs view
@@ -0,0 +1,174 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        zai++[@Native name@]     diidxazá++[@English name@]    Isthmus Zapotec+-}+module Text.Numeral.Language.ZAI.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-isthmus-zapotec/en/zai/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "tobi")+      , (2, "chupa")+      , (3, "chonna")+      , (4, "tapa")+      , (5, "gaayu’")+      , (6, "xhoopa’")+      , (7, "gadxe")+      , (8, "xhono")+      , (9, "ga’")+      , (10, "chii")+      , (11, "chii ne tobi")+      , (12, "chii ne chupa")+      , (13, "chii ne chonna")+      , (14, "chii ne tapa")+      , (15, "chii ne gaayu’")+      , (16, "chii ne xhoopa’")+      , (17, "chii ne gadxe")+      , (18, "chii ne xhono")+      , (19, "chii ne ga’")+      , (20, "gande")+      , (21, "gande ne tobi")+      , (22, "gande ne chupa")+      , (23, "gande ne chonna")+      , (24, "gande ne tapa")+      , (25, "gande ne gaayu’")+      , (26, "gande ne xhoopa’")+      , (27, "gande ne gadxe")+      , (28, "gande ne xhono")+      , (29, "gande ne ga’")+      , (30, "gande chii")+      , (31, "gande chii ne tobi")+      , (32, "gande chii ne chupa")+      , (33, "gande chii ne chonna")+      , (34, "gande chii ne tapa")+      , (35, "gande chii ne gaayu’")+      , (36, "gande chii ne xhoopa’")+      , (37, "gande chii ne gadxe")+      , (38, "gande chii ne xhono")+      , (39, "gande chii ne ga’")+      , (40, "chupa late gande")+      , (41, "chupa late gande ne tobi")+      , (42, "chupa late gande ne chupa")+      , (43, "chupa late gande ne chonna")+      , (44, "chupa late gande ne tapa")+      , (45, "chupa late gande ne gaayu’")+      , (46, "chupa late gande ne xhoopa’")+      , (47, "chupa late gande ne gadxe")+      , (48, "chupa late gande ne xhono")+      , (49, "chupa late gande ne ga’")+      , (50, "chupa late gande chii")+      , (51, "chupa late gande chii ne tobi")+      , (52, "chupa late gande chii ne chupa")+      , (53, "chupa late gande chii ne chonna")+      , (54, "chupa late gande chii ne tapa")+      , (55, "chupa late gande chii ne gaayu’")+      , (56, "chupa late gande chii ne xhoopa’")+      , (57, "chupa late gande chii ne gadxe")+      , (58, "chupa late gande chii ne xhono")+      , (59, "chupa late gande chii ne ga’")+      , (60, "chonna late gande")+      , (61, "chonna late gande ne tobi")+      , (62, "chonna late gande ne chupa")+      , (63, "chonna late gande ne chonna")+      , (64, "chonna late gande ne tapa")+      , (65, "chonna late gande ne gaayu’")+      , (66, "chonna late gande ne xhoopa’")+      , (67, "chonna late gande ne gadxe")+      , (68, "chonna late gande ne xhono")+      , (69, "chonna late gande ne ga’")+      , (70, "chonna late gande chii")+      , (71, "chonna late gande chii ne tobi")+      , (72, "chonna late gande chii ne chupa")+      , (73, "chonna late gande chii ne chonna")+      , (74, "chonna late gande chii ne tapa")+      , (75, "chonna late gande chii ne gaayu’")+      , (76, "chonna late gande chii ne xhoopa’")+      , (77, "chonna late gande chii ne gadxe")+      , (78, "chonna late gande chii ne xhono")+      , (79, "chonna late gande chii ne ga’")+      , (80, "tapa late gande")+      , (81, "tapa late gande ne tobi")+      , (82, "tapa late gande ne chupa")+      , (83, "tapa late gande ne chonna")+      , (84, "tapa late gande ne tapa")+      , (85, "tapa late gande ne gaayu’")+      , (86, "tapa late gande ne xhoopa’")+      , (87, "tapa late gande ne gadxe")+      , (88, "tapa late gande ne xhono")+      , (89, "tapa late gande ne ga’")+      , (90, "tapa late gande chii")+      , (91, "tapa late gande chii ne tobi")+      , (92, "tapa late gande chii ne chupa")+      , (93, "tapa late gande chii ne chonna")+      , (94, "tapa late gande chii ne tapa")+      , (95, "tapa late gande chii ne gaayu’")+      , (96, "tapa late gande chii ne xhoopa’")+      , (97, "tapa late gande chii ne gadxe")+      , (98, "tapa late gande chii ne xhono")+      , (99, "tapa late gande chii ne ga’")+      , (100, "ti gayuaa")+      , (101, "ti gayuaa tobi")+      , (102, "ti gayuaa chupa")+      , (103, "ti gayuaa chonna")+      , (104, "ti gayuaa tapa")+      , (105, "ti gayuaa gaayu’")+      , (106, "ti gayuaa xhoopa’")+      , (107, "ti gayuaa gadxe")+      , (108, "ti gayuaa xhono")+      , (109, "ti gayuaa ga’")+      , (110, "ti gayuaa chii")+      , (123, "ti gayuaa gande ne chonna")+      , (200, "chupa gayuaa")+      , (300, "chonna gayuaa")+      , (321, "chonna gayuaa gande ne tobi")+      , (400, "tapa gayuaa")+      , (500, "gaayu’ gayuaa")+      , (600, "xhoopa’ gayuaa")+      , (700, "gadxe gayuaa")+      , (800, "xhono gayuaa")+      , (900, "ga’ gayuaa")+      , (909, "ga’ gayuaa ga’")+      , (990, "ga’ gayuaa tapa late gande chii")+      , (999, "ga’ gayuaa tapa late gande chii ne ga’")+      , (1000, "ti mil")+      , (1001, "ti mil ne tobi")+      , (1008, "ti mil ne xhono")+      , (1234, "ti mil ne chupa gayuaa gande chii ne tapa")+      , (2000, "chupa mil")+      , (3000, "chonna mil")+      , (4000, "tapa mil")+      , (4321, "tapa mil ne chonna gayuaa gande ne tobi")+      , (5000, "gaayu’ mil")+      , (6000, "xhoopa’ mil")+      , (7000, "gadxe mil")+      , (8000, "xhono mil")+      , (9000, "ga’ mil")+      ]+    )+  ]
src-test/Text/Numeral/Language/ZAQ/TestData.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE UnicodeSyntax       #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-aloapam-zapotec/en/zaq/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
− src-test/Text/Numeral/Language/ZH/TestData.hs
@@ -1,349 +0,0 @@-{-# 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/ZHO/TestData.hs view
@@ -0,0 +1,342 @@+{-|+[@ISO639-1@]        zh++[@ISO639-2B@]       chi++[@ISO639-2T@]       zho++[@ISO639-3@]        cmn++[@Native name@]     官話++[@English name@]    Chinese+-}++module Text.Numeral.Language.ZHO.TestData+    ( trad_cardinals+    , simpl_cardinals+    , finance_trad_cardinals+    , finance_simpl_cardinals+    , pinyin_cardinals+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Monoid ( (<>) )+import "numerals" Text.Numeral.Grammar ( 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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -21,8 +16,7 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Prelude ( Num )-import "numerals" Text.Numeral.Grammar.Reified ( defaultInflection )+import "numerals" Text.Numeral.Grammar ( defaultInflection ) import "this" Text.Numeral.Test ( TestData )  @@ -35,7 +29,7 @@   http://www.languagesandnumbers.com/how-to-count-in-choapan-zapotec/en/zpc/ -} -cardinals ∷ (Num i) ⇒ TestData i+cardinals :: (Num i) => TestData i cardinals =   [ ( "default"     , defaultInflection
+ src-test/Text/Numeral/Language/ZPL/TestData.hs view
@@ -0,0 +1,161 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        zpl++[@Native name@]     East Sola de Vega Zapotec++[@English name@]    Lachixío Zapotec+-}+module Text.Numeral.Language.ZPL.TestData (cardinals) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "numerals" Text.Numeral.Grammar ( defaultInflection )+import "this" Text.Numeral.Test ( TestData )+++--------------------------------------------------------------------------------+-- Test data+--------------------------------------------------------------------------------++{-+Sources:+  http://www.languagesandnumbers.com/how-to-count-in-lachixio-zapotec/en/zpl/+-}++cardinals :: (Num i) => TestData i+cardinals =+  [ ( "default"+    , defaultInflection+    , [ (1, "tucu")+      , (2, "chiucu")+      , (3, "chuna")+      , (4, "tacu")+      , (5, "ayu’")+      , (6, "xu’cu")+      , (7, "achi")+      , (8, "xunu")+      , (9, "quie’")+      , (10, "chi’i")+      , (11, "chi’i tucu")+      , (12, "chi’i chiucu")+      , (13, "chi’i chuna")+      , (14, "chi’i tacu")+      , (15, "chi’i ayu’")+      , (16, "chi’i xu’cu")+      , (17, "chi’i achi")+      , (18, "chi’i xunu")+      , (19, "chi’i quie’")+      , (20, "ala")+      , (21, "ala tucu")+      , (22, "ala chiucu")+      , (23, "ala chuna")+      , (24, "ala tacu")+      , (25, "ala ayu’")+      , (26, "ala xu’cu")+      , (27, "ala achi")+      , (28, "ala xunu")+      , (29, "ala quie’")+      , (30, "ala llichi’i")+      , (31, "ala llichi’i tucu")+      , (32, "ala llichi’i chiucu")+      , (33, "ala llichi’i chuna")+      , (34, "ala llichi’i tacu")+      , (35, "ala llichi’i ayu’")+      , (36, "ala llichi’i xu’cu")+      , (37, "ala llichi’i achi")+      , (38, "ala llichi’i xunu")+      , (39, "ala llichi’i quie’")+      , (40, "chiu’a")+      , (41, "chiu’a tucu")+      , (42, "chiu’a chiucu")+      , (43, "chiu’a chuna")+      , (44, "chiu’a tacu")+      , (45, "chiu’a ayu’")+      , (46, "chiu’a xu’cu")+      , (47, "chiu’a achi")+      , (48, "chiu’a xunu")+      , (49, "chiu’a quie’")+      , (50, "chiu’a nu’ chi’i")+      , (51, "chiu’a nu’ chi’i tucu")+      , (52, "chiu’a nu’ chi’i chiucu")+      , (53, "chiu’a nu’ chi’i chuna")+      , (54, "chiu’a nu’ chi’i tacu")+      , (55, "chiu’a nu’ chi’i ayu’")+      , (56, "chiu’a nu’ chi’i xu’cu")+      , (57, "chiu’a nu’ chi’i achi")+      , (58, "chiu’a nu’ chi’i xunu")+      , (59, "chiu’a nu’ chi’i quie’")+      , (60, "ayuna")+      , (61, "ayuna tucu")+      , (62, "ayuna chiucu")+      , (63, "ayuna chuna")+      , (64, "ayuna tacu")+      , (65, "ayuna ayu’")+      , (66, "ayuna xu’cu")+      , (67, "ayuna achi")+      , (68, "ayuna xunu")+      , (69, "ayuna quie’")+      , (70, "ayuna nu’ chi’i")+      , (71, "ayuna nu’ chi’i tucu")+      , (72, "ayuna nu’ chi’i chiucu")+      , (73, "ayuna nu’ chi’i chuna")+      , (74, "ayuna nu’ chi’i tacu")+      , (75, "ayuna nu’ chi’i ayu’")+      , (76, "ayuna nu’ chi’i xu’cu")+      , (77, "ayuna nu’ chi’i achi")+      , (78, "ayuna nu’ chi’i xunu")+      , (79, "ayuna nu’ chi’i quie’")+      , (80, "tacu nu’ ala")+      , (81, "tacu nu’ ala tucu")+      , (82, "tacu nu’ ala chiucu")+      , (83, "tacu nu’ ala chuna")+      , (84, "tacu nu’ ala tacu")+      , (85, "tacu nu’ ala ayu’")+      , (86, "tacu nu’ ala xu’cu")+      , (87, "tacu nu’ ala achi")+      , (88, "tacu nu’ ala xunu")+      , (89, "tacu nu’ ala quie’")+      , (90, "chuna ala lli chi’i")+      , (91, "chuna ala lli chi’i tucu")+      , (92, "chuna ala lli chi’i chiucu")+      , (93, "chuna ala lli chi’i chuna")+      , (94, "chuna ala lli chi’i tacu")+      , (95, "chuna ala lli chi’i ayu’")+      , (96, "chuna ala lli chi’i xu’cu")+      , (97, "chuna ala lli chi’i achi")+      , (98, "chuna ala lli chi’i xunu")+      , (99, "chuna ala lli chi’i quie’")+      , (100, "tucu ayu’u")+      , (101, "tucu ayu’u tucu")+      , (102, "tucu ayu’u chiucu")+      , (103, "tucu ayu’u chuna")+      , (104, "tucu ayu’u tacu")+      , (105, "tucu ayu’u ayu’")+      , (106, "tucu ayu’u xu’cu")+      , (107, "tucu ayu’u achi")+      , (108, "tucu ayu’u xunu")+      , (109, "tucu ayu’u quie’")+      , (110, "tucu ayu’u chi’i")+      , (123, "tucu ayu’u ala chuna")+      , (200, "chiucu ayu’u")+      , (300, "chuna ayu’u")+      , (321, "chuna ayu’u ala tucu")+      , (400, "tacu ayu’u")+      , (500, "ayu’ ayu’u")+      , (600, "xu’cu ayu’u")+      , (700, "achi ayu’u")+      , (800, "xunu ayu’u")+      , (900, "quie’ ayu’u")+      , (909, "quie’ ayu’u quie’")+      , (990, "quie’ ayu’u chuna ala lli chi’i")+      , (999, "quie’ ayu’u chuna ala lli chi’i quie’")+      ]+    )+  ]
src-test/Text/Numeral/Test.hs view
@@ -5,7 +5,7 @@ module Text.Numeral.Test ( TestData ) where  import "base" Data.String ( String )-import "numerals" Text.Numeral.Grammar.Reified ( Inflection )+import "numerals" Text.Numeral.Grammar ( Inflection ) import "text" Data.Text ( Text )  type TestData n = [(String, Inflection, [(n, Text)])]
src-test/test.hs view
@@ -1,10 +1,3 @@-{-# LANGUAGE NoImplicitPrelude   #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE PackageImports      #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE UnicodeSyntax       #-}-- module Main where  @@ -12,25 +5,15 @@ -- 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" Control.Monad      ( when )+import "base" Data.Function      ( on )+import "base" Data.List          ( groupBy, intercalate, sortBy )+import "base" Data.Maybe         ( fromMaybe ) 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 "numerals" Text.Numeral.Grammar+import "numerals" Text.Numeral.Misc ( dec, intLog ) import "QuickCheck" Test.QuickCheck.Modifiers     ( Positive(Positive), NonNegative(NonNegative) ) import "test-framework" Test.Framework ( defaultMainWithOpts@@ -44,125 +27,169 @@ 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.AFR as AFR import qualified "numerals" Text.Numeral.Language.AMP as AMP-import qualified "numerals" Text.Numeral.Language.BG  as BG+import qualified "numerals" Text.Numeral.Language.BUL as BUL+import qualified "numerals" Text.Numeral.Language.CES as CES 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.CRO as CRO+import qualified "numerals" Text.Numeral.Language.DEU as DEU+import qualified "numerals" Text.Numeral.Language.ENG as ENG+import qualified "numerals" Text.Numeral.Language.EPO as EPO+import qualified "numerals" Text.Numeral.Language.FIN as FIN+import qualified "numerals" Text.Numeral.Language.FRA as FRA import qualified "numerals" Text.Numeral.Language.FUR as FUR+import qualified "numerals" Text.Numeral.Language.GLV as GLV 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.HEB as HEB 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.ITA as ITA+import qualified "numerals" Text.Numeral.Language.JPN as JPN+import qualified "numerals" Text.Numeral.Language.LAT as LAT 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.MLG as MLG+import qualified "numerals" Text.Numeral.Language.NEN as NEN+import qualified "numerals" Text.Numeral.Language.NLD as NLD+import qualified "numerals" Text.Numeral.Language.NOB as NOB import qualified "numerals" Text.Numeral.Language.NQM as NQM-import qualified "numerals" Text.Numeral.Language.OJ  as OJ+import qualified "numerals" Text.Numeral.Language.OJI as OJI 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.POL as POL+import qualified "numerals" Text.Numeral.Language.POR as POR+import qualified "numerals" Text.Numeral.Language.RUS as RUS 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.SPA as SPA+import qualified "numerals" Text.Numeral.Language.SWE as SWE+import qualified "numerals" Text.Numeral.Language.TUR as TUR+import qualified "numerals" Text.Numeral.Language.WOL as WOL import qualified "numerals" Text.Numeral.Language.YOR as YOR-import qualified "numerals" Text.Numeral.Language.ZH  as ZH+import qualified "numerals" Text.Numeral.Language.ZHO as ZHO  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.AFR.TestData as AFR 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.ARN.TestData as ARN 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.AZE.TestData as AZE+import qualified "this" Text.Numeral.Language.BAK.TestData as BAK+import qualified "this" Text.Numeral.Language.BAM.TestData as BAM+import qualified "this" Text.Numeral.Language.BUL.TestData as BUL import qualified "this" Text.Numeral.Language.CAF.TestData as CAF+import qualified "this" Text.Numeral.Language.CAR.TestData as CAR+import qualified "this" Text.Numeral.Language.CAT.TestData as CAT import qualified "this" Text.Numeral.Language.CBK.TestData as CBK+import qualified "this" Text.Numeral.Language.CES.TestData as CES 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.CKU.TestData as CKU 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.CRO.TestData as CRO 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.COS.TestData as COS+import qualified "this" Text.Numeral.Language.CRG.TestData as CRG+import qualified "this" Text.Numeral.Language.CYM.TestData as CYM+import qualified "this" Text.Numeral.Language.DEU.TestData as DEU 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.EKK.TestData as EKK+import qualified "this" Text.Numeral.Language.EMI.TestData as EMI+import qualified "this" Text.Numeral.Language.ENG.TestData as ENG+import qualified "this" Text.Numeral.Language.EPO.TestData as EPO+import qualified "this" Text.Numeral.Language.FAO.TestData as FAO+import qualified "this" Text.Numeral.Language.FIN.TestData as FIN+import qualified "this" Text.Numeral.Language.FRA.TestData as FRA+import qualified "this" Text.Numeral.Language.FRA_JER.TestData as FRA_JER+import qualified "this" Text.Numeral.Language.FRR.TestData as FRR 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.GLG.TestData as GLG+import qualified "this" Text.Numeral.Language.GLV.TestData as GLV 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.HAT.TestData as HAT+import qualified "this" Text.Numeral.Language.HEB.TestData as HEB 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.HRV.TestData as HRV+import qualified "this" Text.Numeral.Language.HUN.TestData as HUN+import qualified "this" Text.Numeral.Language.HUP.TestData as HUP+import qualified "this" Text.Numeral.Language.HUR.TestData as HUR+import qualified "this" Text.Numeral.Language.HYE.TestData as HYE+import qualified "this" Text.Numeral.Language.IBO.TestData as IBO+import qualified "this" Text.Numeral.Language.IND.TestData as IND+import qualified "this" Text.Numeral.Language.INH.TestData as INH+import qualified "this" Text.Numeral.Language.ITA.TestData as ITA+import qualified "this" Text.Numeral.Language.IZH.TestData as IZH+import qualified "this" Text.Numeral.Language.JPN.TestData as JPN 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.KLB.TestData as KLB+import qualified "this" Text.Numeral.Language.KMR.TestData as KMR+import qualified "this" Text.Numeral.Language.KRL.TestData as KRL+import qualified "this" Text.Numeral.Language.LAT.TestData as LAT+import qualified "this" Text.Numeral.Language.LAV.TestData as LAV+import qualified "this" Text.Numeral.Language.LIN.TestData as LIN+import qualified "this" Text.Numeral.Language.LIT.TestData as LIT+import qualified "this" Text.Numeral.Language.LIV.TestData as LIV 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.LMO.TestData as LMO+import qualified "this" Text.Numeral.Language.LTZ.TestData as LTZ+import qualified "this" Text.Numeral.Language.MIC.TestData as MIC+import qualified "this" Text.Numeral.Language.MIN.TestData as MIN+import qualified "this" Text.Numeral.Language.MLG.TestData as MLG+import qualified "this" Text.Numeral.Language.MNK.TestData as MNK 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.NAV.TestData as NAV+import qualified "this" Text.Numeral.Language.NEE.TestData as NEE+import qualified "this" Text.Numeral.Language.NEN.TestData as NEN+import qualified "this" Text.Numeral.Language.NLD.TestData as NLD+import qualified "this" Text.Numeral.Language.NOB.TestData as NOB 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.OCI.TestData as OCI+import qualified "this" Text.Numeral.Language.OJI.TestData as OJI+import qualified "this" Text.Numeral.Language.ONE.TestData as ONE+import qualified "this" Text.Numeral.Language.ORM.TestData as ORM 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.POL.TestData as POL+import qualified "this" Text.Numeral.Language.POR.TestData as POR 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.RMY_KAL.TestData as RMY_KAL+import qualified "this" Text.Numeral.Language.RON.TestData as RON+import qualified "this" Text.Numeral.Language.RUS.TestData as RUS 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.SME.TestData as SME+import qualified "this" Text.Numeral.Language.SMN.TestData as SMN+import qualified "this" Text.Numeral.Language.SPA.TestData as SPA+import qualified "this" Text.Numeral.Language.SQI.TestData as SQI+import qualified "this" Text.Numeral.Language.SWE.TestData as SWE 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.TGS.TestData as TGS+import qualified "this" Text.Numeral.Language.TUR.TestData as TUR+import qualified "this" Text.Numeral.Language.WMW.TestData as WMW+import qualified "this" Text.Numeral.Language.WOL.TestData as WOL+import qualified "this" Text.Numeral.Language.XPQ.TestData as XPQ import qualified "this" Text.Numeral.Language.YOR.TestData as YOR+import qualified "this" Text.Numeral.Language.ZAI.TestData as ZAI 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.ZHO.TestData as ZHO import qualified "this" Text.Numeral.Language.ZPC.TestData as ZPC+import qualified "this" Text.Numeral.Language.ZPL.TestData as ZPL   -------------------------------------------------------------------------------- -- Test suite -------------------------------------------------------------------------------- -main ∷ IO ()-main = do opts ← interpretArgsOrExit =<< getArgs+main :: IO ()+main = do opts <- interpretArgsOrExit =<< getArgs           defaultMainWithOpts tests opts { ropt_hide_successes = Just True } -tests ∷ [Test]+tests :: [Test] tests =   [ testGroup "Grammar"     [ testGroup "Case"@@ -200,394 +227,564 @@     ]   , testGroup "ACH"     [ testGroup "unique data"-      [testUnique "cardinal" (ACH.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (ACH.cardinals :: TestData Integer)]     ]   , testGroup "ADY"     [ testGroup "unique data"-      [testUnique "cardinal" (ADY.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (ADY.cardinals :: TestData Integer)]     ]   , testGroup "AF"     [ testGroup "unique data"-      [ testUnique "cardinal" (AF.cardinals ∷ TestData ℤ)-      , testUnique "ordinal"  (AF.ordinals  ∷ TestData ℤ)+      [ testUnique "cardinal" (AFR.cardinals :: TestData Integer)+      , testUnique "ordinal"  (AFR.ordinals  :: TestData Integer)       ]-    , mkTests "cardinal" AF.cardinal (AF.cardinals ∷ TestData ℤ)-    , mkTests "ordinal"  AF.ordinal  (AF.ordinals  ∷ TestData ℤ)+    , mkTests "cardinal" AFR.cardinal (AFR.cardinals :: TestData Integer)+    , mkTests "ordinal"  AFR.ordinal  (AFR.ordinals  :: TestData Integer)     ]   , testGroup "AMP"     [ testGroup "unique data"-      [testUnique "cardinal" (AMP.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" AMP.cardinal (AMP.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (AMP.cardinals :: TestData Integer)]+    , mkTests "cardinal" AMP.cardinal (AMP.cardinals :: TestData Integer)     ]   , testGroup "ARI"     [ testGroup "unique data"-      [testUnique "cardinal" (ARI.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (ARI.cardinals :: TestData Integer)]     ]+  , testGroup "ARN"+    [ testGroup "unique data"+      [testUnique "cardinal" (ARN.cardinals :: TestData Integer)]+    ]   , testGroup "AST"     [ testGroup "unique data"-      [testUnique "cardinal" (AST.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (AST.cardinals :: TestData Integer)]     ]-  , testGroup "AZ"+  , testGroup "AZE"     [ testGroup "unique data"-      [testUnique "cardinal" (AZ.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (AZE.cardinals :: TestData Integer)]     ]-  , testGroup "BA"+  , testGroup "BAK"     [ testGroup "unique data"-      [testUnique "cardinal" (BA.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (BAK.cardinals :: TestData Integer)]     ]-  , testGroup "BG"+  , testGroup "BUL"     [ testGroup "unique data"-      [testUnique "cardinal" (BG.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" BG.cardinal (BG.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (BUL.cardinals :: TestData Integer)]+    , mkTests "cardinal" BUL.cardinal (BUL.cardinals :: TestData Integer)     ]-  , testGroup "BM"+  , testGroup "BAM"     [ testGroup "unique data"-      [testUnique "cardinal" (BM.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (BAM.cardinals :: TestData Integer)]     ]-  , testGroup "CA"+  , testGroup "CAT"     [ testGroup "unique data"-      [testUnique "cardinal" (CA.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (CAT.cardinals :: TestData Integer)]     ]   , testGroup "CAF"     [ testGroup "unique data"-      [ testUnique "cardinal" (CAF.cardinals ∷ TestData ℤ)-      , testUnique "cardinal (syllabic)" (CAF.syllabic_cardinals ∷ TestData ℤ)+      [ testUnique "cardinal" (CAF.cardinals :: TestData Integer)+      , testUnique "cardinal (syllabic)" (CAF.syllabic_cardinals :: TestData Integer)       ]     ]+  , testGroup "CAR"+    [ testGroup "unique data"+      [testUnique "cardinal" (CAR.cardinals :: TestData Integer)]+    ]   , testGroup "CBK"     [ testGroup "unique data"-      [testUnique "cardinal" (CBK.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (CBK.cardinals :: TestData Integer)]     ]   , testGroup "CHN"     [ testGroup "unique data"-      [testUnique "cardinal" (CHN.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" CHN.cardinal (CHN.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (CHN.cardinals :: TestData Integer)]+    , mkTests "cardinal" CHN.cardinal (CHN.cardinals :: TestData Integer)     ]   , testGroup "CHR"     [ testGroup "unique data"-      [testUnique "cardinal" (CHR.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" CHR.cardinal (CHR.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (CHR.cardinals :: TestData Integer)]+    , mkTests "cardinal" CHR.cardinal (CHR.cardinals :: TestData Integer)     ]+  , testGroup "CKU"+    [ testGroup "unique data"+      [testUnique "cardinal" (CKU.cardinals :: TestData Integer)]+    ]   , testGroup "CLM"     [ testGroup "unique data"-      [testUnique "cardinal" (CLM.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" CLM.cardinal (CLM.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (CLM.cardinals :: TestData Integer)]+    , mkTests "cardinal" CLM.cardinal (CLM.cardinals :: TestData Integer)     ]-  , testGroup "CO"+  , testGroup "CRO"     [ testGroup "unique data"-      [testUnique "cardinal" (CO.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (CRO.cardinals :: TestData Integer)]+    , mkTests "cardinal" CRO.cardinal (CRO.cardinals :: TestData Integer)     ]+  , testGroup "COS"+    [ testGroup "unique data"+      [testUnique "cardinal" (COS.cardinals :: TestData Integer)]+    ]   , testGroup "COD"     [ testGroup "unique data"-      [testUnique "cardinal" (COD.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (COD.cardinals :: TestData Integer)]     ]   , testGroup "COO"     [ testGroup "unique data"-      [testUnique "cardinal" (COO.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (COO.cardinals :: TestData Integer)]     ]-  , testGroup "CS"+  , testGroup "CRG"     [ testGroup "unique data"-      [testUnique "cardinal" (CS.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" CS.cardinal (CS.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (CRG.cardinals :: TestData Integer)]     ]-  , testGroup "CY"+  , testGroup "CES"     [ testGroup "unique data"-      [testUnique "cardinal" (CY.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (CES.cardinals :: TestData Integer)]+    , mkTests "cardinal" CES.cardinal (CES.cardinals :: TestData Integer)     ]-  , testGroup "DE"+  , testGroup "CYM"     [ testGroup "unique data"-      [ testUnique "cardinal" (DE.cardinals ∷ TestData ℤ)-      , testUnique "ordinal"  (DE.ordinals  ∷ TestData ℤ)+      [testUnique "cardinal" (CYM.cardinals :: TestData Integer)]+    ]+  , testGroup "DEU"+    [ testGroup "unique data"+      [ testUnique "cardinal" (DEU.cardinals :: TestData Integer)+      , testUnique "ordinal"  (DEU.ordinals  :: TestData Integer)       ]-    , mkTests "cardinal" DE.cardinal (DE.cardinals ∷ TestData ℤ)-    , mkTests "ordinal"  DE.ordinal  (DE.ordinals  ∷ TestData ℤ)+    , mkTests "cardinal" DEU.cardinal (DEU.cardinals :: TestData Integer)+    , mkTests "ordinal"  DEU.ordinal  (DEU.ordinals  :: TestData Integer)     ]   , testGroup "DJK"     [ testGroup "unique data"-      [testUnique "cardinal" (DJK.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (DJK.cardinals :: TestData Integer)]     ]-  , testGroup "EN"+  , testGroup "EMI"+    [ testGroup "unique data"+      [testUnique "cardinal" (EMI.cardinals :: TestData Integer)]+    ]+  , testGroup "ENG"     [ testGroup "GB"       [ testGroup "unique data"-        [ testUnique "cardinal" (EN.gb_cardinals ∷ TestData ℤ)-        , testUnique "ordinal"  (EN.gb_ordinals  ∷ TestData ℤ)+        [ testUnique "cardinal" (ENG.gb_cardinals :: TestData Integer)+        , testUnique "ordinal"  (ENG.gb_ordinals  :: TestData Integer)         ]-      , mkTests "cardinal" EN.gb_cardinal (EN.gb_cardinals ∷ TestData ℤ)-      , mkTests "ordinal"  EN.gb_ordinal  (EN.gb_ordinals  ∷ TestData ℤ)+      , mkTests "cardinal" ENG.gb_cardinal (ENG.gb_cardinals :: TestData Integer)+      , mkTests "ordinal"  ENG.gb_ordinal  (ENG.gb_ordinals  :: TestData Integer)       ]     , testGroup "US"       [ testGroup "unique data"-        [ testUnique "cardinal" (EN.us_cardinals ∷ TestData ℤ)-        , testUnique "ordinal"  (EN.us_ordinals  ∷ TestData ℤ)+        [ testUnique "cardinal" (ENG.us_cardinals :: TestData Integer)+        , testUnique "ordinal"  (ENG.us_ordinals  :: TestData Integer)         ]-      , mkTests "cardinal" EN.us_cardinal (EN.us_cardinals ∷ TestData ℤ)-      , mkTests "ordinal"  EN.us_ordinal  (EN.us_ordinals  ∷ TestData ℤ)+      , mkTests "cardinal" ENG.us_cardinal (ENG.us_cardinals :: TestData Integer)+      , mkTests "ordinal"  ENG.us_ordinal  (ENG.us_ordinals  :: TestData Integer)       ]     ]-  , testGroup "EO"+  , testGroup "EPO"     [ testGroup "unique data"-      [testUnique "cardinal" (EO.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" EO.cardinal (EO.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (EPO.cardinals :: TestData Integer)]+    , mkTests "cardinal" EPO.cardinal (EPO.cardinals :: TestData Integer)     ]-  , testGroup "ES"+  , testGroup "SPA"     [ testGroup "unique data"-      [testUnique "cardinal" (ES.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" ES.cardinal (ES.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (SPA.cardinals :: TestData Integer)]+    , mkTests "cardinal" SPA.cardinal (SPA.cardinals :: TestData Integer)     ]-  , testGroup "ET"+  , testGroup "SQI"     [ testGroup "unique data"-      [testUnique "cardinal" (ET.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (SQI.cardinals :: TestData Integer)]     ]-  , testGroup "FI"+  , testGroup "EKK"     [ testGroup "unique data"-      [ testUnique "cardinal" (FI.cardinals ∷ TestData ℤ)-      , testUnique "ordinal"  (FI.ordinals  ∷ TestData ℤ)+      [testUnique "cardinal" (EKK.cardinals :: TestData Integer)]+    ]+  , testGroup "FIN"+    [ testGroup "unique data"+      [ testUnique "cardinal" (FIN.cardinals :: TestData Integer)+      , testUnique "ordinal"  (FIN.ordinals  :: TestData Integer)       ]-    , mkTests "cardinal" FI.cardinal (FI.cardinals ∷ TestData ℤ)-    , mkTests "ordinal"  FI.ordinal  (FI.ordinals ∷ TestData ℤ)+    , mkTests "cardinal" FIN.cardinal (FIN.cardinals :: TestData Integer)+    , mkTests "ordinal"  FIN.ordinal  (FIN.ordinals :: TestData Integer)     ]-  , testGroup "FO"+  , testGroup "FAO"     [ testGroup "unique data"-      [testUnique "cardinal" (FO.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (FAO.cardinals :: TestData Integer)]     ]-  , testGroup "FR"+  , testGroup "FRA"     [ testGroup "unique data"-      [ testUnique "cardinal" (FR.cardinals ∷ TestData ℤ)-      , testUnique "ordinal"  (FR.ordinals  ∷ TestData ℤ)+      [ testUnique "cardinal" (FRA.cardinals :: TestData Integer)+      , testUnique "ordinal"  (FRA.ordinals  :: TestData Integer)       ]-    , mkTests "cardinal" FR.cardinal (FR.cardinals ∷ TestData ℤ)-    , mkTests "ordinal"  FR.ordinal  (FR.ordinals  ∷ TestData ℤ)+    , mkTests "cardinal" FRA.cardinal (FRA.cardinals :: TestData Integer)+    , mkTests "ordinal"  FRA.ordinal  (FRA.ordinals  :: TestData Integer)     ]+  , testGroup "FRR"+    [ testGroup "unique data"+      [testUnique "cardinal" (FRR.cardinals :: TestData Integer)]+    ]+  , testGroup "FRA_JER"+    [ testGroup "unique data"+      [testUnique "cardinal" (FRA_JER.cardinals :: TestData Integer)]+    ]   , testGroup "FUR"     [ testGroup "unique data"-      [testUnique "cardinal" (FUR.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" FUR.cardinal (FUR.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (FUR.cardinals :: TestData Integer)]+    , mkTests "cardinal" FUR.cardinal (FUR.cardinals :: TestData Integer)    ]   , testGroup "GCF_MTQ"     [ testGroup "unique data"-      [testUnique "cardinal" (GCF_MTQ.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (GCF_MTQ.cardinals :: TestData Integer)]     ]   , testGroup "GIL"     [ testGroup "unique data"-      [testUnique "cardinal" (GIL.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (GIL.cardinals :: TestData Integer)]     ]-  , testGroup "GL"+  , testGroup "GLG"     [ testGroup "unique data"-      [testUnique "cardinal" (GL.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (GLG.cardinals :: TestData Integer)]     ]   , testGroup "GSW"     [ testGroup "unique data"-      [testUnique "cardinal" (GSW.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" GSW.cardinal (GSW.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (GSW.cardinals :: TestData Integer)]+    , mkTests "cardinal" GSW.cardinal (GSW.cardinals :: TestData Integer)     ]-  , testGroup "GV"+  , testGroup "GLV"     [ testGroup "unique data"-      [testUnique "cardinal" (GV.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" GV.cardinal  (GV.cardinals  ∷ TestData ℤ)+      [testUnique "cardinal" (GLV.cardinals :: TestData Integer)]+    , mkTests "cardinal" GLV.cardinal  (GLV.cardinals  :: TestData Integer)     ]   , testGroup "HAI"     [ testGroup "unique data"-      [testUnique "cardinal" (HAI.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (HAI.cardinals :: TestData Integer)]     ]-  , testGroup "HE"+  , testGroup "HEB"     [ testGroup "unique data"-      [testUnique "cardinal" (HE.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" HE.cardinal  (HE.cardinals  ∷ TestData ℤ)+      [testUnique "cardinal" (HEB.cardinals :: TestData Integer)]+    , mkTests "cardinal" HEB.cardinal  (HEB.cardinals  :: TestData Integer)     ]   , testGroup "HOP"     [ testGroup "unique data"-      [testUnique "cardinal" (HOP.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" HOP.cardinal (HOP.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (HOP.cardinals :: TestData Integer)]+    , mkTests "cardinal" HOP.cardinal (HOP.cardinals :: TestData Integer)     ]-  , testGroup "HR"+  , testGroup "HRV"     [ testGroup "unique data"-      [testUnique "cardinal" (HR.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (HRV.cardinals :: TestData Integer)]     ]-  , testGroup "HU"+  , testGroup "HAT"     [ testGroup "unique data"-      [testUnique "cardinal" (HU.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (HAT.cardinals :: TestData Integer)]     ]-  , testGroup "HY"+  , testGroup "HUN"     [ testGroup "unique data"-      [testUnique "cardinal" (HY.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (HUN.cardinals :: TestData Integer)]     ]-  , testGroup "IT"+  , testGroup "HUP"     [ testGroup "unique data"-      [testUnique "cardinal" (IT.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" IT.cardinal (IT.cardinals ∷ TestData ℤ)-    , mkTests "ordinal"  IT.ordinal  (IT.ordinals  ∷ TestData ℤ)+      [testUnique "cardinal" (HUP.cardinals :: TestData Integer)]     ]-  , testGroup "JA"+  , testGroup "HUR"+    [ testGroup "unique data"+      [testUnique "cardinal" (HUR.cardinals :: TestData Integer)]+    ]+  , testGroup "HYE"+    [ testGroup "unique data"+      [testUnique "cardinal" (HYE.cardinals :: TestData Integer)]+    ]+  , testGroup "IND"+    [ testGroup "unique data"+      [testUnique "cardinal" (IND.cardinals :: TestData Integer)]+    ]+  , testGroup "IBO"+    [ testGroup "unique data"+      [testUnique "cardinal" (IBO.cardinals :: TestData Integer)]+    ]+  , testGroup "INH"+    [ testGroup "unique data"+      [testUnique "cardinal" (INH.cardinals :: TestData Integer)]+    ]+  , testGroup "ITA"+    [ testGroup "unique data"+      [testUnique "cardinal" (ITA.cardinals :: TestData Integer)]+    , mkTests "cardinal" ITA.cardinal (ITA.cardinals :: TestData Integer)+    , mkTests "ordinal"  ITA.ordinal  (ITA.ordinals  :: TestData Integer)+    ]+  , testGroup "IZH"+    [ testGroup "unique data"+      [testUnique "cardinal" (IZH.cardinals :: TestData Integer)]+    ]+  , testGroup "JPN"     [ testGroup "preferred"       [ testGroup "unique data"-        [testUnique "cardinal" (JA.preferred_cardinals ∷ TestData ℤ)]-      , mkTests "cardinal" JA.preferred_cardinal-                          (JA.preferred_cardinals ∷ TestData ℤ)+        [testUnique "cardinal" (JPN.preferred_cardinals :: TestData Integer)]+      , mkTests "cardinal" JPN.preferred_cardinal+                          (JPN.preferred_cardinals :: TestData Integer)       ]     , testGroup "kanji"       [ testGroup "unique data"-        [testUnique "cardinal" (JA.kanji_cardinals ∷ TestData ℤ)]-      , mkTests "cardinal" JA.kanji_cardinal (JA.kanji_cardinals ∷ TestData ℤ)+        [testUnique "cardinal" (JPN.kanji_cardinals :: TestData Integer)]+      , mkTests "cardinal" JPN.kanji_cardinal (JPN.kanji_cardinals :: TestData Integer)       ]     , testGroup "daiji"       [ testGroup "unique data"-        [testUnique "cardinal" (JA.daiji_cardinals ∷ TestData ℤ)]-      , mkTests "cardinal" JA.daiji_cardinal (JA.daiji_cardinals ∷ TestData ℤ)+        [testUnique "cardinal" (JPN.daiji_cardinals :: TestData Integer)]+      , mkTests "cardinal" JPN.daiji_cardinal (JPN.daiji_cardinals :: TestData Integer)       ]     ]   , testGroup "KAP"     [ testGroup "unique data"-      [testUnique "cardinal" (KAP.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (KAP.cardinals :: TestData Integer)]     ]   , testGroup "KEA"     [ testGroup "unique data"-      [testUnique "cardinal" (KEA.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (KEA.cardinals :: TestData Integer)]     ]-  , testGroup "LA"+  , testGroup "KLB"     [ testGroup "unique data"-      [testUnique "cardinal" (LA.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" LA.cardinal (LA.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (KLB.cardinals :: TestData Integer)]     ]+  , testGroup "KMR"+    [ testGroup "unique data"+      [testUnique "cardinal" (KMR.cardinals :: TestData Integer)]+    ]+  , testGroup "KRL"+    [ testGroup "unique data"+      [testUnique "cardinal" (KRL.cardinals :: TestData Integer)]+    ]+  , testGroup "LAT"+    [ testGroup "unique data"+      [testUnique "cardinal" (LAT.cardinals :: TestData Integer)]+    , mkTests "cardinal" LAT.cardinal (LAT.cardinals :: TestData Integer)+    ]+  , testGroup "LTZ"+    [ testGroup "unique data"+      [testUnique "cardinal" (LTZ.cardinals :: TestData Integer)]+    ]+  , testGroup "LIV"+    [ testGroup "unique data"+      [testUnique "cardinal" (LIV.cardinals :: TestData Integer)]+    ]   , testGroup "LLD"     [ testGroup "unique data"-      [testUnique "cardinal" (LLD.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" LLD.cardinal (LLD.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (LLD.cardinals :: TestData Integer)]+    , mkTests "cardinal" LLD.cardinal (LLD.cardinals :: TestData Integer)     ]-  , testGroup "MG"+  , testGroup "LMO"     [ testGroup "unique data"-      [testUnique "cardinal" (MG.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" MG.cardinal (MG.cardinals  ∷ TestData ℤ)+      [testUnique "cardinal" (LMO.cardinals :: TestData Integer)]     ]+  , testGroup "LIN"+    [ testGroup "unique data"+      [testUnique "cardinal" (LIN.cardinals :: TestData Integer)]+    ]+  , testGroup "LIT"+    [ testGroup "unique data"+      [testUnique "cardinal" (LIT.cardinals :: TestData Integer)]+    ]+  , testGroup "LAV"+    [ testGroup "unique data"+      [testUnique "cardinal" (LAV.cardinals :: TestData Integer)]+    ]+  , testGroup "MLG"+    [ testGroup "unique data"+      [testUnique "cardinal" (MLG.cardinals :: TestData Integer)]+    , mkTests "cardinal" MLG.cardinal (MLG.cardinals  :: TestData Integer)+    ]+  , testGroup "MIC"+    [ testGroup "unique data"+      [testUnique "cardinal" (MIC.cardinals :: TestData Integer)]+    ]+  , testGroup "MIN"+    [ testGroup "unique data"+      [testUnique "cardinal" (MIN.cardinals :: TestData Integer)]+    ]+  , testGroup "MNK"+    [ testGroup "unique data"+      [testUnique "cardinal" (MNK.cardinals :: TestData Integer)]+    ]   , testGroup "MOH"     [ testGroup "unique data"-      [testUnique "cardinal" (MOH.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (MOH.cardinals :: TestData Integer)]     ]-  , testGroup "NL"+  , testGroup "NEE"     [ testGroup "unique data"-      [ testUnique "cardinal"       (NL.cardinals       ∷ TestData ℤ)-      , testUnique "ordinal"        (NL.ordinals        ∷ TestData ℤ)-      , testUnique "partitive"      (NL.partitives      ∷ TestData (ℤ, ℤ))-      , testUnique "multiplicative" (NL.multiplicatives ∷ TestData ℤ)+      [testUnique "cardinal" (NEE.cardinals :: TestData Integer)]+    ]+  , testGroup "NEN"+    [ testGroup "unique data"+      [testUnique "cardinal" (NEN.cardinals :: TestData Integer)]+    , mkTests "cardinal" NEN.cardinal (NEN.cardinals :: TestData Integer)+    ]+  , testGroup "NLD"+    [ testGroup "unique data"+      [ testUnique "cardinal"       (NLD.cardinals       :: TestData Integer)+      , testUnique "ordinal"        (NLD.ordinals        :: TestData Integer)+      , testUnique "partitive"      (NLD.partitives      :: TestData (Integer, Integer))+      , testUnique "multiplicative" (NLD.multiplicatives :: TestData Integer)       ]-    , 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 ℤ)+    , mkTests "cardinal"       NLD.cardinal  (NLD.cardinals  :: TestData Integer)+    , mkTests "ordinal"        NLD.ordinal   (NLD.ordinals   :: TestData Integer)+    , mkTests "partitive"      NLD.partitive (NLD.partitives :: TestData (Integer, Integer))+    , mkTests "multiplicative" NLD.multiplicative (NLD.multiplicatives :: TestData Integer)     ]-  , testGroup "NO"+  , testGroup "NOB"     [ testGroup "unique data"-      [testUnique "cardinal" (NO.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" NO.cardinal  (NO.cardinals  ∷ TestData ℤ)+      [testUnique "cardinal" (NOB.cardinals :: TestData Integer)]+    , mkTests "cardinal" NOB.cardinal (NOB.cardinals  :: TestData Integer)     ]   , testGroup "NQM"     [ testGroup "unique data"-      [testUnique "cardinal" (NQM.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" NQM.cardinal (NQM.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (NQM.cardinals :: TestData Integer)]+    , mkTests "cardinal" NQM.cardinal (NQM.cardinals :: TestData Integer)     ]-  , testGroup "OJ"+  , testGroup "NAV"     [ testGroup "unique data"-      [testUnique "cardinal" (OJ.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" OJ.cardinal  (OJ.cardinals  ∷ TestData ℤ)+      [testUnique "cardinal" (NAV.cardinals :: TestData Integer)]     ]+  , testGroup "OCI"+    [ testGroup "unique data"+      [testUnique "cardinal" (OCI.cardinals :: TestData Integer)]+    ]+  , testGroup "OJI"+    [ testGroup "unique data"+      [testUnique "cardinal" (OJI.cardinals :: TestData Integer)]+    , mkTests "cardinal" OJI.cardinal (OJI.cardinals  :: TestData Integer)+    ]+  , testGroup "ONE"+    [ testGroup "unique data"+      [testUnique "cardinal" (ONE.cardinals :: TestData Integer)]+    ]+  , testGroup "ORM"+    [ testGroup "unique data"+      [testUnique "cardinal" (ORM.cardinals :: TestData Integer)]+    ]   , testGroup "PAA"     [ testGroup "unique data"-      [testUnique "cardinal" (PAA.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (PAA.cardinals :: TestData Integer)]     ]   , testGroup "PDC"     [ testGroup "unique data"-      [testUnique "cardinal" (PDC.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" PDC.cardinal (PDC.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (PDC.cardinals :: TestData Integer)]+    , mkTests "cardinal" PDC.cardinal (PDC.cardinals :: TestData Integer)     ]-  , testGroup "PL"+  , testGroup "POL"     [ testGroup "unique data"-      [testUnique "cardinal" (PL.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" PL.cardinal  (PL.cardinals  ∷ TestData ℤ)+      [testUnique "cardinal" (POL.cardinals :: TestData Integer)]+    , mkTests "cardinal" POL.cardinal (POL.cardinals  :: TestData Integer)     ]-  , testGroup "PT"+  , testGroup "POR"     [ testGroup "unique data"-      [testUnique "cardinal" (PT.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" PT.cardinal (PT.cardinals  ∷ TestData ℤ)-    , mkTests "ordinal"  PT.ordinal  (PT.ordinals   ∷ TestData ℤ)+      [testUnique "cardinal" (POR.cardinals :: TestData Integer)]+    , mkTests "cardinal" POR.cardinal (POR.cardinals  :: TestData Integer)+    , mkTests "ordinal"  POR.ordinal  (POR.ordinals   :: TestData Integer)     ]   , testGroup "RMN_DZA"     [ testGroup "unique data"-      [testUnique "cardinal" (RMN_DZA.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (RMN_DZA.cardinals :: TestData Integer)]     ]-  , testGroup "RO"+  , testGroup "RMY_KAL"     [ testGroup "unique data"-      [testUnique "cardinal" (RO.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (RMY_KAL.cardinals :: TestData Integer)]     ]-  , testGroup "RU"+  , testGroup "RON"     [ testGroup "unique data"-      [testUnique "cardinal" (RU.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" RU.cardinal  (RU.cardinals  ∷ TestData ℤ)+      [testUnique "cardinal" (RON.cardinals :: TestData Integer)]     ]+  , testGroup "RUS"+    [ testGroup "unique data"+      [testUnique "cardinal" (RUS.cardinals :: TestData Integer)]+    , mkTests "cardinal" RUS.cardinal (RUS.cardinals  :: TestData Integer)+    ]   , testGroup "SCO"     [ testGroup "unique data"-      [testUnique "cardinal" (SCO.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" SCO.cardinal (SCO.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (SCO.cardinals :: TestData Integer)]+    , mkTests "cardinal" SCO.cardinal (SCO.cardinals :: TestData Integer)     ]-  , testGroup "SV"+  , testGroup "SME"     [ testGroup "unique data"-      [ testUnique "cardinal" (SV.cardinals ∷ TestData ℤ)-      , testUnique "ordinal"  (SV.ordinals  ∷ TestData ℤ)+      [testUnique "cardinal" (SME.cardinals :: TestData Integer)]+    ]+  , testGroup "SMN"+    [ testGroup "unique data"+      [testUnique "cardinal" (SMN.cardinals :: TestData Integer)]+    ]+  , testGroup "SWE"+    [ testGroup "unique data"+      [ testUnique "cardinal" (SWE.cardinals :: TestData Integer)+      , testUnique "ordinal"  (SWE.ordinals  :: TestData Integer)       ]-    , mkTests "cardinal" SV.cardinal (SV.cardinals ∷ TestData ℤ)-    , mkTests "ordinal"  SV.ordinal  (SV.ordinals  ∷ TestData ℤ)+    , mkTests "cardinal" SWE.cardinal (SWE.cardinals :: TestData Integer)+    , mkTests "ordinal"  SWE.ordinal  (SWE.ordinals  :: TestData Integer)     ]   , testGroup "TAR"     [ testGroup "unique data"-      [testUnique "cardinal" (TAR.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (TAR.cardinals :: TestData Integer)]     ]-  , testGroup "TR"+  , testGroup "TGS"     [ testGroup "unique data"-      [testUnique "cardinal" (TR.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" TR.cardinal (TR.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (TGS.cardinals :: TestData Integer)]     ]-  , testGroup "WO"+  , testGroup "TUR"     [ testGroup "unique data"-      [testUnique "cardinal" (WO.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" WO.cardinal (WO.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (TUR.cardinals :: TestData Integer)]+    , mkTests "cardinal" TUR.cardinal (TUR.cardinals :: TestData Integer)     ]+  , testGroup "WMW"+    [ testGroup "unique data"+      [testUnique "cardinal" (WMW.cardinals :: TestData Integer)]+    ]+  , testGroup "WOL"+    [ testGroup "unique data"+      [testUnique "cardinal" (WOL.cardinals :: TestData Integer)]+    , mkTests "cardinal" WOL.cardinal (WOL.cardinals :: TestData Integer)+    ]+  , testGroup "XPQ"+    [ testGroup "unique data"+      [testUnique "cardinal" (XPQ.cardinals :: TestData Integer)]+    ]   , testGroup "YOR"     [ testGroup "unique data"-      [testUnique "cardinal" (YOR.cardinals ∷ TestData ℤ)]-    , mkTests "cardinal" YOR.cardinal (YOR.cardinals ∷ TestData ℤ)+      [testUnique "cardinal" (YOR.cardinals :: TestData Integer)]+    , mkTests "cardinal" YOR.cardinal (YOR.cardinals :: TestData Integer)     ]+  , testGroup "ZAI"+    [ testGroup "unique data"+      [testUnique "cardinal" (ZAI.cardinals :: TestData Integer)]+    ]   , testGroup "ZAQ"     [ testGroup "unique data"-      [testUnique "cardinal" (ZAQ.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (ZAQ.cardinals :: TestData Integer)]     ]-  , testGroup "ZH"+  , testGroup "ZHO"     [ testGroup "characters (traditional)"       [ testGroup "unique data"-        [testUnique "cardinal" (ZH.trad_cardinals ∷ TestData ℤ)]-      , mkTests "cardinal" ZH.trad_cardinal (ZH.trad_cardinals ∷ TestData ℤ)+        [testUnique "cardinal" (ZHO.trad_cardinals :: TestData Integer)]+      , mkTests "cardinal" ZHO.trad_cardinal (ZHO.trad_cardinals :: TestData Integer)       ]     , testGroup "characters (simplified)"       [ testGroup "unique data"-        [testUnique "cardinal" (ZH.simpl_cardinals ∷ TestData ℤ)]-      , mkTests "cardinal" ZH.simpl_cardinal (ZH.simpl_cardinals ∷ TestData ℤ)+        [testUnique "cardinal" (ZHO.simpl_cardinals :: TestData Integer)]+      , mkTests "cardinal" ZHO.simpl_cardinal (ZHO.simpl_cardinals :: TestData Integer)       ]     , 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 ℤ)+        [testUnique "cardinal" (ZHO.finance_trad_cardinals :: TestData Integer)]+      , mkTests "cardinal" ZHO.finance_trad_cardinal (ZHO.finance_trad_cardinals :: TestData Integer)       ]     , 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 ℤ)+        [testUnique "cardinal" (ZHO.finance_simpl_cardinals :: TestData Integer)]+      , mkTests "cardinal" ZHO.finance_simpl_cardinal (ZHO.finance_simpl_cardinals :: TestData Integer)       ]     , testGroup "pinyin"       [ testGroup "unique data"-        [testUnique "cardinal" (ZH.pinyin_cardinals ∷ TestData ℤ)]-      , mkTests "cardinal" ZH.pinyin_cardinal (ZH.pinyin_cardinals ∷ TestData ℤ)+        [testUnique "cardinal" (ZHO.pinyin_cardinals :: TestData Integer)]+      , mkTests "cardinal" ZHO.pinyin_cardinal (ZHO.pinyin_cardinals :: TestData Integer)       ]+    ]   , testGroup "ZPC"     [ testGroup "unique data"-      [testUnique "cardinal" (ZPC.cardinals ∷ TestData ℤ)]+      [testUnique "cardinal" (ZPC.cardinals :: TestData Integer)]     ]+  , testGroup "ZPL"+    [ testGroup "unique data"+      [testUnique "cardinal" (ZPL.cardinals :: TestData Integer)]     ]   ] @@ -598,7 +795,7 @@  {- -- TODO: this takes way to long for large values (10 ^ 60000 - 1)-testBounds ∷ Text → (ℤ → Maybe Text) → (ℤ, ℤ) → Test+testBounds :: Text -> (Integer -> Maybe Text) -> (Integer, Integer) -> Test testBounds name conversion bounds@(lo, hi) =       testGroup name                 [ testCase "lower bound" $ assertBool "conversion error" $ checkConv lo@@ -606,68 +803,68 @@                 -- , testProperty "in between" $ forAll (choose bounds) checkConv                 ]     where-      checkConv ∷ ℤ → Bool-      checkConv = isJust ∘ conversion+      checkConv :: Integer -> Bool+      checkConv = isJust . conversion -} -testInf ∷ (GR.Inflection → GR.Inflection) → (GR.Inflection → Bool) → Assertion-testInf set test = assertBool "False" $ test $ set GR.defaultInflection+testInf :: (Inflection -> Inflection) -> (Inflection -> Bool) -> Assertion+testInf set test = assertBool "False" $ test $ set defaultInflection -intLog_pow10 ∷ Positive ℤ → Bool-intLog_pow10 (Positive x) = x ≡ intLog (dec x)+intLog_pow10 :: Positive Integer -> Bool+intLog_pow10 (Positive x) = x == intLog (dec x) -intLog_pow10m1 ∷ NonNegative ℤ → Bool-intLog_pow10m1 (NonNegative x) = x - 1 ≡ intLog (dec x) - 1+intLog_pow10m1 :: NonNegative Integer -> 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)+intLog_mul :: Positive Integer -> Positive Integer -> 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+mkTests :: forall a. (Show a)+        => String+        -> (Inflection -> a -> Maybe Text)+        -> TestData a+        -> Test+mkTests name f = testGroup name . map perInflection   where-    perInflection ∷ (String, GR.Inflection, [(α, Text)]) → Test+    perInflection :: (String, Inflection, [(a, Text)]) -> Test     perInflection (infName, inf, xs) = testGroup infName $ map (perValue inf) xs -    perValue ∷ GR.Inflection → (α, Text) → Test+    perValue :: Inflection -> (a, 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+testUnique :: forall a. (Show a) => String -> TestData a -> Test+testUnique name = testGroup name . map perInflection   where-    perInflection ∷ (String, inf, [(α, Text)]) → Test+    perInflection :: (String, inf, [(a, Text)]) -> Test     perInflection (infName, _, xs) = testCase infName $ unique xs -    unique ∷ [(α, Text)] → Assertion+    unique :: [(a, Text)] -> Assertion     unique xs = when (length ys > 0)                   $ assertFailure                   $ intercalate "\n" $ map msg ys       where-        ys ∷ [[(α, Text)]]-        ys = filter ((1 <) ∘ length)-             $ groupBy ((≡) `on` snd)+        ys :: [[(a, Text)]]+        ys = filter ((1 <) . length)+             $ groupBy ((==) `on` snd)              $ sortBy (compare `on` snd) xs -    msg ∷ [(α, Text)] → String+    msg :: [(a, 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)+                       (intercalate ", " $ map (show . fst) xs) -testConversion ∷ (Show α)-               ⇒ (GR.Inflection → α → Maybe Text)-               → GR.Inflection-               → α-               → Text-               → Assertion+testConversion :: (Show a)+               => (Inflection -> a -> Maybe Text)+               -> Inflection+               -> a+               -> Text+               -> Assertion testConversion f inf n s =   let r = f inf n-  in when (r ≢ Just s)+  in when (r /= Just s)         $ assertFailure         $ printf "Expected %s = \"%s\" but got \"%s\""                  (show n)
+ src/GHC/Integer/Logarithms/Compat.hs view
@@ -0,0 +1,120 @@+{-# LANGUAGE CPP, MagicHash, UnboxedTuples #-}++module GHC.Integer.Logarithms.Compat+    ( integerLog2#+    , wordLog2#+    ) where++#if __GLASGOW_HASKELL__ >= 702+import GHC.Integer.Logarithms (integerLog2#, wordLog2#)+#else+#include "MachDeps.h"++import GHC.Integer.GMP.Internals (Integer(S#, J#))++import GHC.Base ( indexWordArray#, uncheckedIShiftL#, indexInt8Array#+                , word2Int#, ByteArray#, newByteArray#, writeInt8Array#+                , (==#), (<#), (+#), (*#)+                , unsafeFreezeByteArray#, realWorld#+                , neWord#, (-#), uncheckedShiftRL#+                , Int#, Word#, int2Word#+                )++#if (WORD_SIZE_IN_BITS != 32) && (WORD_SIZE_IN_BITS != 64)+#error Only word sizes 32 and 64 are supported.+#endif+++#if WORD_SIZE_IN_BITS == 32++#define WSHIFT 5+#define MMASK 31++#else++#define WSHIFT 6+#define MMASK 63++#endif++-- | Calculate the integer base 2 logarithm of an 'Integer'.+--   The calculation is much more efficient than for the general case.+--+--   The argument must be strictly positive, that condition is /not/ checked.+integerLog2# :: Integer -> Int#+integerLog2# (S# i) = wordLog2# (int2Word# i)+integerLog2# (J# s ba) = check (s -# 1#)+  where+    check i = case indexWordArray# ba i of+                0## -> check (i -# 1#)+                w   -> wordLog2# w +# (uncheckedIShiftL# i WSHIFT#)++-- | This function calculates the integer base 2 logarithm of a 'Word#'.+--   @'wordLog2#' 0## = -1#@.+{-# INLINE wordLog2# #-}+wordLog2# :: Word# -> Int#+wordLog2# w =+  case leadingZeros of+   BA lz ->+    let zeros u = indexInt8Array# lz (word2Int# u) in+#if WORD_SIZE_IN_BITS == 64+    case uncheckedShiftRL# w 56# of+     a ->+      if a `neWord#` 0##+       then 64# -# zeros a+       else+        case uncheckedShiftRL# w 48# of+         b ->+          if b `neWord#` 0##+           then 56# -# zeros b+           else+            case uncheckedShiftRL# w 40# of+             c ->+              if c `neWord#` 0##+               then 48# -# zeros c+               else+                case uncheckedShiftRL# w 32# of+                 d ->+                  if d `neWord#` 0##+                   then 40# -# zeros d+                   else+#endif+                    case uncheckedShiftRL# w 24# of+                     e ->+                      if e `neWord#` 0##+                       then 32# -# zeros e+                       else+                        case uncheckedShiftRL# w 16# of+                         f ->+                          if f `neWord#` 0##+                           then 24# -# zeros f+                           else+                            case uncheckedShiftRL# w 8# of+                             g ->+                              if g `neWord#` 0##+                               then 16# -# zeros g+                               else 8# -# zeros w++-- Lookup table+data BA = BA ByteArray#++leadingZeros :: BA+leadingZeros =+    let mkArr s =+          case newByteArray# 256# s of+            (# s1, mba #) ->+              case writeInt8Array# mba 0# 9# s1 of+                s2 ->+                  let fillA lim val idx st =+                        if idx ==# 256#+                          then st+                          else if idx <# lim+                                then case writeInt8Array# mba idx val st of+                                        nx -> fillA lim val (idx +# 1#) nx+                                else fillA (2# *# lim) (val -# 1#) idx st+                  in case fillA 2# 8# 1# s2 of+                      s3 -> case unsafeFreezeByteArray# mba s3 of+                              (# _, ba #) -> ba+    in case mkArr realWorld# of+        b -> BA b+#endif
+ src/Math/NumberTheory/Logarithms.hs view
@@ -0,0 +1,74 @@+{-# LANGUAGE CPP, MagicHash, UnboxedTuples #-}++-- | Integer logarithm, copied from Daniel Fischer's @arithmoi@+module Math.NumberTheory.Logarithms ( integerLog10' ) where++#if defined(INTEGER_SIMPLE) && __GLASGOW_HASKELL__ < 702+import GHC.Integer.Logarithms (integerLogBase#)+import GHC.Base (Int(I#))++-- | Only defined for positive inputs!+integerLog10' :: Integer -> Int+integerLog10' m = I# (integerLogBase# 10 m)++#else+import GHC.Base ( Int(I#), Word#, Int#+                , int2Word#, eqWord#, neWord#, (-#), and#, uncheckedShiftRL#++#if __GLASGOW_HASKELL__ >= 707+                , isTrue#+#endif+                )++import GHC.Integer.Logarithms.Compat (integerLog2#, wordLog2#)++-- | Only defined for positive inputs!+integerLog10' :: Integer -> Int+integerLog10' n+  | n < 10      = 0+  | n < 100     = 1+  | otherwise   = ex + integerLog10' (n `quot` integerPower 10 ex)+    where+      ln = I# (integerLog2# n)+      -- u/v is a good approximation of log 2/log 10+      u  = 1936274+      v  = 6432163+      -- so ex is a good approximation to integerLogBase 10 n+      ex = fromInteger ((u * fromIntegral ln) `quot` v)++-- | Power of an 'Integer' by the left-to-right repeated squaring algorithm.+--   This needs two multiplications in each step while the right-to-left+--   algorithm needs only one multiplication for 0-bits, but here the+--   two factors always have approximately the same size, which on average+--   gains a bit when the result is large.+--+--   For small results, it is unlikely to be any faster than '(^)', quite+--   possibly slower (though the difference shouldn't be large), and for+--   exponents with few bits set, the same holds. But for exponents with+--   many bits set, the speedup can be significant.+--+--   /Warning:/ No check for the negativity of the exponent is performed,+--   a negative exponent is interpreted as a large positive exponent.+integerPower :: Integer -> Int -> Integer+integerPower b (I# e#) = power b (int2Word# e#)++power :: Integer -> Word# -> Integer+power b w#+  | isTrue# (w# `eqWord#` 0##) = 1+  | isTrue# (w# `eqWord#` 1##) = b+  | otherwise           = go (wordLog2# w# -# 1#) b (b*b)+    where+      go 0# l h = if isTrue# ((w# `and#` 1##) `eqWord#` 0##) then l*l else (l*h)+      go i# l h+        | w# `hasBit#` i#   = go (i# -# 1#) (l*h) (h*h)+        | otherwise         = go (i# -# 1#) (l*l) (l*h)++-- | A raw version of testBit for 'Word#'.+hasBit# :: Word# -> Int# -> Bool+hasBit# w# i# = isTrue# (((w# `uncheckedShiftRL#` i#) `and#` 1##) `neWord#` 0##)++#if __GLASGOW_HASKELL__ < 707+isTrue# :: Bool -> Bool+isTrue# = id+#endif+#endif
src/Text/Numeral.hs view
@@ -13,9 +13,13 @@       -- ** Rendering       -- $render -      module Text.Numeral.Exp.Reified+      -- ** Examples+      -- $examples++      module Text.Numeral.Exp     , module Text.Numeral.Render     , module Text.Numeral.Rules+    , module Text.Numeral.Grammar     )     where @@ -23,50 +27,100 @@ -- Imports ------------------------------------------------------------------------------- -import "this" Text.Numeral.Exp.Reified+import "this" Text.Numeral.Exp import "this" Text.Numeral.Render import "this" Text.Numeral.Rules+import "this" Text.Numeral.Grammar  ------------------------------------------------------------------------------- -- 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.-+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.-+"Text.Numeral.Exp" 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.-+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. -}  {- $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.+-} -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.+{- $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 defaultInflection 123 :: Maybe Text+Just "one hundred and twenty-three"+>>> 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 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 defaultInflection (-3) :: Maybe Text+Nothing++Some languages have multiple scripts and methods for writing number names. Take+Chinese for example, which can be written using Han characters or transcribed to+the Latin script using Pinyin.++Traditional Chinese characters:++>>> import qualified Text.Numeral.Language.ZH as ZH+>>> ZH.trad_cardinal defaultInflection 123456 :: Maybe Text+Just "十二萬三千四百五十六"++Simplified characters for use in financial contexts:++>>> ZH.finance_simpl_cardinal defaultInflection 123456 :: Maybe Text+Just "拾贰万参仟肆伯伍拾陆"++Transcribed using Pinyin:++>>> 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 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 :: Integer+123+>>> import Text.Numeral+>>> NL.struct 123 :: Exp+Add (Lit 100) (Add (Lit 3) (Mul (Lit 2) (Lit 10)))++Compare with:++>>> NL.cardinal defaultInflection 123 :: Maybe Text+Just "honderddrieëntwintig"++100 (honderd) + (3 (drie) + (ën) 2 (twin) * 10 (tig)) -}
src/Text/Numeral/BigNum.hs view
@@ -1,9 +1,3 @@-{-# LANGUAGE NoImplicitPrelude-           , OverloadedStrings-           , PackageImports-           , UnicodeSyntax-  #-}- module Text.Numeral.BigNum   ( cardinal   , rule@@ -24,21 +18,11 @@ -- 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 "base" Data.Function ( fix )+import "base" Data.Monoid ( (<>) )+import qualified "containers" Data.Map as M+import "this" Text.Numeral+import "this" Text.Numeral.Misc ( dec ) import "text" Data.Text ( Text )  @@ -46,10 +30,10 @@ -- Language of Big Numbers -------------------------------------------------------------------------------- -cardinal ∷ (Integral α) ⇒ inf → α → Maybe Text-cardinal inf = render cardinalRepr inf ∘ (pos $ fix rule)+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = render cardinalRepr inf . (pos $ fix rule) -rule ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ Rule α β+rule :: (Integral a) => Rule a rule = findRule (   1, lit         )               [ (  11, add   10 L  )               , (  20, mul   10 L L)@@ -62,14 +46,14 @@               ]                 (dec 4 - 1) -cardinalRepr ∷ Repr inf+cardinalRepr :: Repr cardinalRepr =-    defaultRepr { reprValue = \_ n → M.lookup n symMap-                , reprAdd   = Just $ \_ _ _ → ""-                , reprMul   = Just $ \_ _ _ → ""+    defaultRepr { reprValue = \_ n -> M.lookup n symMap+                , reprAdd   = Just $ \_ _ _ -> ""+                , reprMul   = Just $ \_ _ _ -> ""                 } -symMap ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text)+symMap :: (Integral a) => M.Map a (Ctx Exp -> Text) symMap = M.fromList          [ (1, forms "m"     "un"       "un"       ""        "")          , (2, forms "b"     "duo"      "duo"      "vi"      "du")@@ -80,29 +64,29 @@          , (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"+         , (10, \c -> case c of+                       CtxAdd _ (Lit 100) _              -> "deci"+                       CtxMul _ _ (CtxAdd L (Lit 100) _) -> "ginta"+                       CtxMul {}                         -> "gint"+                       _                                 -> "dec"            )-         , (100, \c → case c of+         , (100, \c -> case c of                         CtxMul _ (Lit n) _-                            | n ∈ [2,3,6] → "cent"-                            | otherwise   → "gent"-                        _                 → "cent"+                            | n `elem` [2,3,6] -> "cent"+                            | otherwise        -> "gent"+                        _                      -> "cent"            )          , (1000, const "millin")          ] -forms ∷ Text → Text → Text → Text → Text → Ctx (Exp i) → Text+forms :: Text -> Text -> Text -> Text -> Text -> Ctx Exp -> Text forms t a1 a2 m1 m2 ctx =     case ctx of-      CtxAdd _ (Lit 10)  _ → a1-      CtxAdd {}            → a2-      CtxMul _ (Lit 10)  _ → m1-      CtxMul {}            → m2-      _                    → t+      CtxAdd _ (Lit 10)  _ -> a1+      CtxAdd {}            -> a2+      CtxMul _ (Lit 10)  _ -> m1+      CtxMul {}            -> m2+      _                    -> t   --------------------------------------------------------------------------------@@ -112,42 +96,42 @@ -- | 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.+type PostfixRepr = Inflection -- ^ Current inflection.+                 -> Ctx Exp   -- ^ 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+scaleRepr :: PostfixRepr+          -> [(Integer, Ctx Exp -> Text)] -- ^ Additional symbol map entries.+          -> ScaleRepr+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+      repr = cardinalRepr { reprValue = \_ n -> M.lookup n syms' }+      syms' = M.fromList syms `M.union` 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 :: PostfixRepr -- ^Postfix for offset 0 names.+              -> PostfixRepr -- ^Postfix for offset 3 names.+              -> [(Integer, Ctx Exp -> Text)] -- ^ Additional symbol map entries.+              -> ScaleRepr 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+              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 :: Text -> Text -> PostfixRepr quantityName s p _ ctx =     case ctx of-      CtxMul _ (Lit 1) _ → s-      CtxMul {}          → p-      _                  → s+      CtxMul _ (Lit 1) _ -> s+      CtxMul {}          -> p+      _                  -> s -ordQuantityName ∷ Text → Text → Text → Text → PostfixRepr i+ordQuantityName :: Text -> Text -> Text -> Text -> PostfixRepr 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+      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
@@ -1,7 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- module Text.Numeral.Entry     ( Conversion(..)     , Entry(..)@@ -12,10 +8,8 @@ -- 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 "this" Text.Numeral.Exp ( Exp )+import "this" Text.Numeral.Grammar ( Inflection ) import "text" Data.Text ( Text )  @@ -23,25 +17,25 @@ -- Language entry -------------------------------------------------------------------------------- -data Conversion α = Conversion-    { toNumeral   ∷ Inflection → α → Maybe Text-    , toStructure ∷ α → Exp Inflection+data Conversion a = Conversion+    { toNumeral   :: Inflection -> a -> Maybe Text+    , toStructure :: a -> Exp     }  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 ℤ)+    { entIso639_1       :: Maybe Text+    , entIso639_2       :: [Text]+    , entIso639_3       :: Maybe Text+    , entNativeNames    :: [Text]+    , entEnglishName    :: Maybe Text+    , entVariant        :: Maybe Text+    , entCardinal       :: Maybe (Conversion Integer)+    , entOrdinal        :: Maybe (Conversion Integer)+    , entPartitive      :: Maybe (Conversion (Integer, Integer))+    , entMultiplicative :: Maybe (Conversion Integer)     } -emptyEntry ∷ Entry+emptyEntry :: Entry emptyEntry = Entry     { entIso639_1       = Nothing     , entIso639_2       = []
src/Text/Numeral/Exp.hs view
@@ -1,144 +1,124 @@-{-# 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(..)+    ( Exp(..)+    , showExp+    -- , eval+    , evalScale+    , Side(L, R)     ) 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 ( ℤ, (⋅) )-+import qualified "this" Text.Numeral.Grammar as G  ---------------------------------------------------------------------------------- Expressions+-- Expression type ------------------------------------------------------------------------------- --- | 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 ∷ α → α+-- | An expression that represents the structure of a numeral.+data Exp+   = Unknown+     -- ^ An unknown value. This is used to signal that a value can+     -- not be represented in the expression language.+   | Lit Integer+     -- ^ A literal value.+     --+     -- Example in English:+     --+     -- > "three" = Lit 3+   | Neg Exp+     -- ^ Negation of an expression.+     --+     -- Example in English:+     --+     -- > "minus two" = Neg (Lit 2)+   | Add Exp Exp+     -- ^ Addition of two expressions.+     --+     -- Example in English:+     --+     -- > "fifteen" = Lit 5 `Add` Lit 10+   | Mul Exp Exp+     -- ^ Multiplication of two expressions.+     --+     -- Example in English:+     --+     -- > "thirty" = Lit 3 `Mul` Lit 10+   | Sub Exp Exp+     -- ^ One expression subtracted from another expression.+     --+     -- Example in Latin:+     --+     -- > "duodēvīgintī" = Lit 2 `Sub` (Lit 2 `Mul` Lit 10)+   | Frac Exp Exp+     -- ^ A fraction.+     --+     -- Example in English:+     --+     -- > "two thirds" = `Frac` (Lit 2) (Lit 3)+   | Scale Integer Integer Exp+     -- ^ A step in a scale of large values.+     --+     -- Should be interpreted as @10 ^ (rank * base + offset)@.+     --+     -- Example in English:+     --+     -- > "quadrillion" = Scale 3 3 4+   | ChangeCase   (Maybe G.Case  ) Exp+   | ChangeGender (Maybe G.Gender) Exp+     -- ^ A change of grammatical gender.+     --+     -- 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)"+     --+     -- Example in Spanish (with the context being Feminine):+     --+     -- > "un millón una" = ChangeGender (Just Masculine) (Lit 1) `Mul` Scale 3 3 1 `Add` Lit 1+   | ChangeNumber (Maybe G.Number) Exp --- | 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 ∷ α → α+infixl 6 `Add`+infixl 6 `Sub`+infixl 7 `Mul` --- | 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 α) → α → α+showExp :: Exp -> 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 (ChangeCase   mbC x) = "Case is " ++ show mbC ++ " in (" ++ showExp x ++ ")"+showExp (ChangeGender mbG x) = "Gender is " ++ show mbG ++ " in (" ++ showExp x ++ ")"+showExp (ChangeNumber mbN x) = "Number is " ++ show mbN ++ " in (" ++ showExp x ++ ")" -infixl 6 `add`-infixl 6 `sub`-infixl 7 `mul`+evalScale :: (Integral a) => a -> a -> a -> a+evalScale b o r = 10 ^ (r*b + o) +-- eval :: (Fractional a) => Exp -> Maybe a+-- eval (Lit x)            = pure 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 <*> eval d+-- eval (Scale b o r)      = evalScale (fromInteger b) (fromInteger o) <$> eval r+-- eval (ChangeCase   _ x) = eval x+-- eval (ChangeGender _ x) = eval x+-- eval (ChangeNumber _ x) = eval x+-- eval Unknown            = Nothing  ---------------------------------------------------------------------------------- Integer instances+-- Side ------------------------------------------------------------------------------- -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 ℚ?+-- | A side or direction, either 'L'eft or 'R'ight.+data Side = L -- ^ Left.+          | R -- ^ Right.+            deriving (Eq, Show)
− src/Text/Numeral/Exp/Reified.hs
@@ -1,111 +0,0 @@-{-# 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
@@ -1,329 +1,471 @@-{-# LANGUAGE NoImplicitPrelude-           , UnicodeSyntax-           , PackageImports-  #-}+{-# LANGUAGE NamedFieldPuns #-}  module Text.Numeral.Grammar     ( -- * Inflection-      Inflection+      Inflection(..)+    , defaultInflection       -- * Grammatical categories+    , Case(..)+    , Gender(..)+    , Number(..)++      -- * 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)+    , noCase,               hasNoCase+    , ablative,             isAblative+    , abessive,             isAbessive+    , accusative,           isAccusative+    , comitative,           isComitative+    , dative,               isDative+    , delative,             isDelative+    , distributive,         isDistributive+    , distributiveTemporal, isDistributiveTemporal+    , essive,               isEssive+    , genitive,             isGenitive+    , instrumental,         isInstrumental+    , instructive,          isInstructive+    , lative,               isLative+    , locative,             isLocative+    , multiplicative,       isMultiplicative+    , nominative,           isNominative+    , partitive,            isPartitive+    , superEssive,          isSuperEssive+    , sublative,            isSublative+    , translative,          isTranslative+    , vocative,             isVocative       -- *** Locative cases-    , LocativeInessive (locativeInessive, isLocativeInessive)-    , LocativeElative  (locativeElative,  isLocativeElative)-    , LocativeIllative (locativeIllative, isLocativeIllative)-    , LocativeAdessive (locativeAdessive, isLocativeAdessive)-    , LocativeAblative (locativeAblative, isLocativeAblative)-    , LocativeAllative (locativeAllative, isLocativeAllative)+    , locativeInessive, isLocativeInessive+    , locativeElative,  isLocativeElative+    , locativeIllative, isLocativeIllative+    , locativeAdessive, isLocativeAdessive+    , locativeAblative, isLocativeAblative+    , locativeAllative, isLocativeAllative       -- ** Gender-    , NoGender  (noGender,  hasNoGender)-    , Neuter    (neuter,    isNeuter)-    , Masculine (masculine, isMasculine)-    , Feminine  (feminine,  isFeminine)-    , Common    (common,    isCommon)+    , noGender,  hasNoGender+    , neuter,    isNeuter+    , masculine, isMasculine+    , feminine,  isFeminine+    , common,    isCommon       -- ** Number-    , NoNumber (noNumber, hasNoNumber)-    , Singular (singular, isSingular)-    , Dual     (dual,     isDual)-    , Trial    (trial,    isTrial)-    , Paucal   (paucal,   isPaucal)-    , Plural   (plural,   isPlural)+    , noNumber, hasNoNumber+    , singular, isSingular+    , dual,     isDual+    , trial,    isTrial+    , paucal,   isPaucal+    , plural,   isPlural     ) where +-------------------------------------------------------------------------------+-- Inflection+------------------------------------------------------------------------------- ------------------------------------------------------------------------------------ Imports---------------------------------------------------------------------------------+data Inflection+   = Inflection+     { iCase   :: Maybe Case+     , iGender :: Maybe Gender+     , iNumber :: Maybe Number+     } deriving (Show, Eq) -import "base" Data.Bool ( Bool )+defaultInflection :: Inflection+defaultInflection = Inflection Nothing Nothing Nothing  ------------------------------------------------------------------------------------ Inflection---------------------------------------------------------------------------------+-------------------------------------------------------------------------------+-- Grammatical categories+------------------------------------------------------------------------------- --- | Base class for various kinds of inflections.-class Inflection α+data Case+   = Abessive+     -- ^ 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.+   | Ablative+     -- ^ The ablative case (abbreviated abl) indicates movement from something,+     -- or cause.+   | Accusative+     -- ^ The accusative case (abbreviated acc) indicates the direct object of a+     -- verb.+   | Comitative+     -- ^ 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).+   | Dative+     -- ^ The dative case (abbreviated dat, or sometimes d when it is a core+     -- argument) indicates the indirect object of a verb.+   | Delative+     -- ^ 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").+   | Distributive+     -- ^ The distributive case (abbreviated distr) is used on nouns for the+     -- meanings of per or each.+   | DistributiveTemporal+     -- ^ The distributive-temporal case specifies when something is done.+   | Essive+     -- ^ 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)".+   | Genitive+     -- ^ 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.+   | Instrumental+     -- ^ The instrumental case (abbreviated ins or instr; also called the+     -- eighth case) indicates an object used in performing an action.+   | Instructive+     -- ^ 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".+   | Lative+     -- ^ 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".+   | Locative (Maybe Locative)+     -- ^ The locative case (abbreviated loc) indicates a location.+   | Multiplicative+     -- ^ The multiplicative case is a grammatical case used for marking a+     -- number of something ("three times").+   | Nominative+     -- ^ The nominative case (abbreviated nom) indicates the subject of a+     -- finite verb.+   | Partitive+     -- ^ 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.+   | Sublative+     -- ^ 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.+   | SuperEssive+     -- ^ 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.+   | Translative+     -- ^ 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".+   | Vocative+     -- ^ The vocative case indicates an addressee.+     deriving (Eq, Show) +data Locative+   = LocativeIllative+     -- ^ 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)".+   | LocativeInessive+     -- ^ 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".+   | LocativeElative+     -- ^ Elative (abbreviated ela; from Latin efferre "to bring or carry out")+     -- is a locative case with the basic meaning "out of".+   | LocativeAllative+     -- ^ 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.+   | LocativeAdessive+     -- ^ 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".+   | LocativeAblative+     -- ^ 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".+   deriving (Eq, Show) ------------------------------------------------------------------------------------ Case---------------------------------------------------------------------------------+data Gender+   = Neuter+   | Masculine+   | Feminine+   | Common+     deriving (Eq, Show) -class Inflection α ⇒ NoCase α where-    noCase ∷ α → α-    hasNoCase ∷ α → Bool+data Number+   = Singular+   | Dual+   | Trial+   | Paucal+   | Plural+     deriving (Eq, Show) --- | The ablative case (abbreviated abl) indicates movement from--- something, or cause.-class Inflection α ⇒ Ablative α where-    ablative ∷ α → α-    isAblative ∷ α → Bool+-------------------------------------------------------------------------------+-- Smart case constructors+------------------------------------------------------------------------------- --- | 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+noCase :: Inflection -> Inflection+noCase inf = inf { iCase = Nothing } --- | The accusative case (abbreviated acc) indicates the direct object--- of a verb.-class Inflection α ⇒ Accusative α where-    accusative ∷ α → α-    isAccusative ∷ α → Bool+hasNoCase :: Inflection -> Bool+hasNoCase (Inflection {iCase}) = iCase == Nothing --- | 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+ablative :: Inflection -> Inflection+ablative inf = inf { iCase = Just Ablative } --- | 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+isAblative :: Inflection -> Bool+isAblative (Inflection {iCase}) = iCase == Just Ablative --- | 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+abessive :: Inflection -> Inflection+abessive inf = inf { iCase = Just Abessive } --- | The distributive case (abbreviated distr) is used on nouns for the meanings--- of per or each.-class Inflection α ⇒ Distributive α where-    distributive ∷ α → α-    isDistributive ∷ α → Bool+isAbessive :: Inflection -> Bool+isAbessive (Inflection {iCase}) = iCase == Just Abessive --- | The distributive-temporal case specifies when something is done.-class Inflection α ⇒ DistributiveTemporal α where-    distributiveTemporal ∷ α → α-    isDistributiveTemporal ∷ α → Bool+accusative :: Inflection -> Inflection+accusative inf = inf { iCase = Just Accusative } --- | 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+isAccusative :: Inflection -> Bool+isAccusative (Inflection {iCase}) = iCase == Just Accusative --- | 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+comitative :: Inflection -> Inflection+comitative inf = inf { iCase = Just Comitative } --- | 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+isComitative :: Inflection -> Bool+isComitative (Inflection {iCase}) = iCase == Just Comitative --- | 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+dative :: Inflection -> Inflection+dative inf = inf { iCase = Just Dative } --- | 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+isDative :: Inflection -> Bool+isDative (Inflection {iCase}) = iCase == Just Dative --- | The locative case (abbreviated loc) indicates a location.-class Inflection α ⇒ Locative α where-    locative ∷ α → α-    isLocative ∷ α → Bool+delative :: Inflection -> Inflection+delative inf = inf { iCase = Just Delative } --- | The multiplicative case is a grammatical case used for marking a number of--- something ("three times").-class Inflection α ⇒ Multiplicative α where-    multiplicative ∷ α → α-    isMultiplicative ∷ α → Bool+isDelative :: Inflection -> Bool+isDelative (Inflection {iCase}) = iCase == Just Delative --- | The nominative case (abbreviated nom) indicates the subject of a--- finite verb.-class Inflection α ⇒ Nominative α where-    nominative ∷ α → α-    isNominative ∷ α → Bool+distributive :: Inflection -> Inflection+distributive inf = inf { iCase = Just Distributive } --- | 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+isDistributive :: Inflection -> Bool+isDistributive (Inflection {iCase}) = iCase == Just Distributive --- | 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+distributiveTemporal :: Inflection -> Inflection+distributiveTemporal inf = inf { iCase = Just DistributiveTemporal } --- | 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+isDistributiveTemporal :: Inflection -> Bool+isDistributiveTemporal (Inflection {iCase}) = iCase == Just DistributiveTemporal --- | 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+essive :: Inflection -> Inflection+essive inf = inf { iCase = Just Essive } --- | The vocative case indicates an addressee.-class Inflection α ⇒ Vocative α where-    vocative ∷ α → α-    isVocative ∷ α → Bool+isEssive :: Inflection -> Bool+isEssive (Inflection {iCase}) = iCase == Just Essive +genitive :: Inflection -> Inflection+genitive inf = inf { iCase = Just Genitive } ------------------------------------------------------------------------------------ Locative cases---------------------------------------------------------------------------------+isGenitive :: Inflection -> Bool+isGenitive (Inflection {iCase}) = iCase == Just Genitive --- | 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+instrumental :: Inflection -> Inflection+instrumental inf = inf { iCase = Just Instrumental } --- | 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+isInstrumental :: Inflection -> Bool+isInstrumental (Inflection {iCase}) = iCase == Just Instrumental --- | 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+instructive :: Inflection -> Inflection+instructive inf = inf { iCase = Just Instructive } --- | 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+isInstructive :: Inflection -> Bool+isInstructive (Inflection {iCase}) = iCase == Just Instructive --- | 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+lative :: Inflection -> Inflection+lative inf = inf { iCase = Just Lative } --- | 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+isLative :: Inflection -> Bool+isLative (Inflection {iCase}) = iCase == Just Lative +locative :: Inflection -> Inflection+locative inf = inf { iCase = Just (Locative Nothing) } ------------------------------------------------------------------------------------ Gender---------------------------------------------------------------------------------+isLocative :: Inflection -> Bool+isLocative (Inflection {iCase}) =+        case iCase of+          Just (Locative _) -> True+          _                 -> False -class Inflection α ⇒ NoGender α where-    noGender ∷ α → α-    hasNoGender ∷ α → Bool+multiplicative :: Inflection -> Inflection+multiplicative inf = inf { iCase = Just Multiplicative } -class Inflection α ⇒ Neuter α where-    neuter ∷ α → α-    isNeuter ∷ α → Bool+isMultiplicative :: Inflection -> Bool+isMultiplicative (Inflection {iCase}) = iCase == Just Multiplicative -class Inflection α ⇒ Masculine α where-    masculine ∷ α → α-    isMasculine ∷ α → Bool+nominative :: Inflection -> Inflection+nominative inf = inf { iCase = Just Nominative } -class Inflection α ⇒ Feminine α where-    feminine ∷ α → α-    isFeminine ∷ α → Bool+isNominative :: Inflection -> Bool+isNominative (Inflection {iCase}) = iCase == Just Nominative -class Inflection α ⇒ Common α where-    common ∷ α → α-    isCommon ∷ α → Bool+partitive :: Inflection -> Inflection+partitive inf = inf { iCase = Just Partitive } +isPartitive :: Inflection -> Bool+isPartitive (Inflection {iCase}) = iCase == Just Partitive ------------------------------------------------------------------------------------ Number---------------------------------------------------------------------------------+superEssive :: Inflection -> Inflection+superEssive inf = inf { iCase = Just SuperEssive } -class Inflection α ⇒ NoNumber α where-    noNumber ∷ α → α-    hasNoNumber ∷ α → Bool+isSuperEssive :: Inflection -> Bool+isSuperEssive (Inflection {iCase}) = iCase == Just SuperEssive -class Inflection α ⇒ Singular α where-    singular ∷ α → α-    isSingular ∷ α → Bool+sublative :: Inflection -> Inflection+sublative inf = inf { iCase = Just Sublative } -class Inflection α ⇒ Dual α where-    dual ∷ α → α-    isDual ∷ α → Bool+isSublative :: Inflection -> Bool+isSublative (Inflection {iCase}) = iCase == Just Sublative -class Inflection α ⇒ Trial α where-    trial ∷ α → α-    isTrial ∷ α → Bool+translative :: Inflection -> Inflection+translative inf = inf { iCase = Just Translative } -class Inflection α ⇒ Paucal α where-    paucal ∷ α → α-    isPaucal ∷ α → Bool+isTranslative :: Inflection -> Bool+isTranslative (Inflection {iCase}) = iCase == Just Translative -class Inflection α ⇒ Plural α where-    plural ∷ α → α-    isPlural ∷ α → Bool+vocative :: Inflection -> Inflection+vocative inf = inf { iCase = Just Vocative } +isVocative :: Inflection -> Bool+isVocative (Inflection {iCase}) = iCase == Just Vocative+++-------------------------------------------------------------------------------+-- Smart locative case constructors+-------------------------------------------------------------------------------++locativeInessive :: Inflection -> Inflection+locativeInessive inf = inf {iCase = Just $ Locative $ Just LocativeInessive}++isLocativeInessive :: Inflection -> Bool+isLocativeInessive (Inflection {iCase}) =+        iCase == (Just $ Locative $ Just LocativeInessive)++locativeElative :: Inflection -> Inflection+locativeElative inf = inf {iCase = Just $ Locative $ Just LocativeElative}++isLocativeElative :: Inflection -> Bool+isLocativeElative (Inflection {iCase}) =+        iCase == (Just $ Locative $ Just LocativeElative)++locativeIllative :: Inflection -> Inflection+locativeIllative inf = inf {iCase = Just $ Locative $ Just LocativeIllative}++isLocativeIllative :: Inflection -> Bool+isLocativeIllative (Inflection {iCase}) =+        iCase == (Just $ Locative $ Just LocativeIllative)++locativeAdessive :: Inflection -> Inflection+locativeAdessive inf = inf {iCase = Just $ Locative $ Just LocativeAdessive}++isLocativeAdessive :: Inflection -> Bool+isLocativeAdessive (Inflection {iCase}) =+        iCase == (Just $ Locative $ Just LocativeAdessive)++locativeAblative :: Inflection -> Inflection+locativeAblative inf = inf {iCase = Just $ Locative $ Just LocativeAblative}++isLocativeAblative :: Inflection -> Bool+isLocativeAblative (Inflection {iCase}) =+        iCase == (Just $ Locative $ Just LocativeAblative)++locativeAllative :: Inflection -> Inflection+locativeAllative inf = inf {iCase = Just $ Locative $ Just LocativeAllative}++isLocativeAllative :: Inflection -> Bool+isLocativeAllative (Inflection {iCase}) =+        iCase == (Just $ Locative $ Just LocativeAllative)+++-------------------------------------------------------------------------------+-- Smart gender constructors+-------------------------------------------------------------------------------++noGender :: Inflection -> Inflection+noGender inf = inf { iGender = Nothing }++hasNoGender :: Inflection -> Bool+hasNoGender (Inflection {iGender}) = iGender == Nothing++neuter :: Inflection -> Inflection+neuter inf = inf { iGender = Just Neuter }++isNeuter :: Inflection -> Bool+isNeuter (Inflection {iGender}) = iGender == Just Neuter++masculine :: Inflection -> Inflection+masculine inf = inf { iGender = Just Masculine }++isMasculine :: Inflection -> Bool+isMasculine (Inflection {iGender}) = iGender == Just Masculine++feminine :: Inflection -> Inflection+feminine inf = inf { iGender = Just Feminine }++isFeminine :: Inflection -> Bool+isFeminine (Inflection {iGender}) = iGender == Just Feminine++common :: Inflection -> Inflection+common inf = inf { iGender = Just Common }++isCommon :: Inflection -> Bool+isCommon (Inflection {iGender}) = iGender == Just Common+++-------------------------------------------------------------------------------+-- Smart number constructors+-------------------------------------------------------------------------------++noNumber :: Inflection -> Inflection+noNumber inf = inf { iNumber = Nothing }++hasNoNumber :: Inflection -> Bool+hasNoNumber (Inflection {iNumber}) = iNumber == Nothing++singular :: Inflection -> Inflection+singular inf = inf { iNumber = Just Singular }++isSingular :: Inflection -> Bool+isSingular (Inflection {iNumber}) = iNumber == Just Singular++dual :: Inflection -> Inflection+dual inf = inf { iNumber = Just Dual }++isDual :: Inflection -> Bool+isDual (Inflection {iNumber}) = iNumber == Just Dual++trial :: Inflection -> Inflection+trial inf = inf { iNumber = Just Trial }++isTrial :: Inflection -> Bool+isTrial (Inflection {iNumber}) = iNumber == Just Trial++paucal :: Inflection -> Inflection+paucal inf = inf { iNumber = Just Paucal }++isPaucal :: Inflection -> Bool+isPaucal (Inflection {iNumber}) = iNumber == Just Paucal++plural :: Inflection -> Inflection+plural inf = inf { iNumber = Just Plural }++isPlural :: Inflection -> Bool+isPlural (Inflection {iNumber}) = iNumber == Just Plural
− src/Text/Numeral/Grammar/Reified.hs
@@ -1,277 +0,0 @@-{-# 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
@@ -1,207 +0,0 @@-{-# 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/AFR.hs view
@@ -0,0 +1,191 @@+{-|+[@ISO639-1@]        af++[@ISO639-2@]        afr++[@ISO639-3@]        afr++[@Native name@]     Afrikaans++[@English name@]    Afrikaans+-}++module Text.Numeral.Language.AFR+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+    , ordinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+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 :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++ordinal :: (Integral a) => Inflection -> a -> Maybe Text+ordinal inf = ordinalRepr inf . struct++struct :: (Integral a) => a -> Exp+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 a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++genericRepr :: Repr+genericRepr = defaultRepr+               { reprAdd   = Just (⊞)+               , reprMul   = Just (⊡)+               , reprNeg   = Just $ \_ _   -> "min "+               }+    where+      (_     ⊞ Lit 10) _         = ""+      (Lit n ⊞ _) _ | n < 10     = "-en-"+                     | otherwise  = ""+      (_     ⊞ _) _              = " "++      (_ ⊡ Lit _) _ = ""+      (_ ⊡ _    ) _ = " "++cardinalRepr :: Inflection -> Exp -> 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 -> s+      forms n t ctx = case ctx of+                        CtxMul _ (Lit 10) _ -> t+                        CtxAdd _ (Lit 10) _ -> t+                        CtxAdd _ (Lit _)  _ -> n+                        _                   -> n++ordinalRepr :: Inflection -> Exp -> 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 -> 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,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,14 +26,10 @@ -- 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 "base" Data.Function ( fix ) 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 ) @@ -47,7 +38,7 @@ -- AMP ------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_3    = Just "amp"     , entEnglishName = Just "Alamblak"@@ -57,10 +48,10 @@                             }     } -cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β+struct :: (Integral a) => a -> E.Exp struct = checkPos        $ fix        $ findRule ( 1, lit       )@@ -74,14 +65,14 @@                 ]                   399 -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = (1, 399) -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms+               { reprValue = \_ n -> M.lookup n syms                , reprAdd   = Just (⊞)-               , reprMul   = Just $ \_ _ _ → " "+               , reprMul   = Just $ \_ _ _ -> " "                }     where       (Lit 2 ⊞ Lit _) _ = "i"@@ -91,12 +82,12 @@           M.fromList           [ (1,  const "rpat")           , (2,  const "hosf")-          , (5,  \c → case c of-                        CtxMul L _ _ → "tir"-                        _            → "tir yohtt"+          , (5,  \c -> case c of+                        CtxMul L _ _ -> "tir"+                        _            -> "tir yohtt"             )-          , (20, \c → case c of-                        CtxMul L _ _ → "yima"-                        _            → "yima yohtt"+          , (20, \c -> case c of+                        CtxMul L _ _ -> "yima"+                        _            -> "yima yohtt"             )           ]
− src/Text/Numeral/Language/BG.hs
@@ -1,185 +0,0 @@-{-# 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/BUL.hs view
@@ -0,0 +1,163 @@+{-|+[@ISO639-1@]        bg++[@ISO639-2@]        bul++[@ISO639-3@]        bul++[@Native name@]     Български език++[@English name@]    Bulgarian+-}++module Text.Numeral.Language.BUL+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M+import "this" Text.Numeral+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import qualified "this" Text.Numeral.BigNum  as BN+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- BUL+--------------------------------------------------------------------------------++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 :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+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 a) => Rule a+shortScale1_bg = mulScale_ bgMul 3 3 R L rule+    where+      bgMul f m scale' _ = masculineMul (f m) scale'+      masculineMul x y = ChangeGender (Just Masculine) $ Mul x y+      rule = findRule (1, lit) [] 14++bounds :: (Integral a) => (a, a)+bounds = let x = dec 48 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> 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 _) _ = " и "+      (ChangeGender _ _  ⊞ Lit _) _ = " и "+      (_                 ⊞ _ )    _ = " "++      (_ ⊡ Lit n) _ | n <= 100 = ""+      (_ ⊡ _    ) _            = " "++      syms inf =+          M.fromList+          [ (0, const "нула")+          , (1, const $ if isFeminine inf+                        then "една"+                        else if isMasculine inf+                             then "един"+                             else "едно"+            )+          , (2, \c -> case c of+                       CtxMul _ (Lit   10) _ -> "два"+                       CtxMul _ (Lit  100) _ -> "две"+                       CtxMul _ (Lit 1000) _ -> "две"+                       _ | 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 :: Inflection -> Integer -> Integer -> Exp -> Ctx Exp -> 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/CES.hs view
@@ -0,0 +1,140 @@+{-|+[@ISO639-1@]        cs++[@ISO639-2B@]       cze++[@ISO639-2T@]       ces++[@ISO639-3@]        ces++[@Native name@]     Čeština++[@English name@]    Czech+-}++module Text.Numeral.Language.CES+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import qualified "containers" Data.Map as M+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "this" Text.Numeral.Language.POL ( struct )+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- CES+-------------------------------------------------------------------------------++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 :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++bounds :: (Integral a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> 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+      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/CHN.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,14 +26,9 @@ -- 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 "base" Data.Function ( fix ) 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 import "this" Text.Numeral.Entry import "text" Data.Text ( Text ) @@ -47,7 +37,7 @@ -- CHN -------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_2    = ["chn"]     , entIso639_3    = Just "chn"@@ -59,10 +49,10 @@                        }     } -cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β+struct :: (Integral a) => a -> Exp struct = checkPos        $ fix        $ findRule (  0, lit           )@@ -71,14 +61,14 @@                 ]                    100 -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = (0, 100) -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms-               , reprAdd   = Just $ \_ _ _ → " pe "-               , reprMul   = Just $ \_ _ _ → " "+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just $ \_ _ _ -> " pe "+               , reprMul   = Just $ \_ _ _ -> " "                }     where       syms =
src/Text/Numeral/Language/CHR.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -33,16 +28,10 @@ -- 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 "base" Data.Function ( fix ) 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+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 )@@ -52,7 +41,7 @@ -- CHR -------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_2    = ["chr"]     , entIso639_3    = Just "chr"@@ -64,10 +53,10 @@                        }     } -cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β+struct :: (Integral a) => a -> Exp struct = checkPos        $ fix        $ findRule (   0, lit                )@@ -78,12 +67,12 @@                 ]                   (dec 6 - 1) -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = (0, dec 6 - 1) -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms+               { reprValue = \_ n -> M.lookup n syms                , reprAdd   = Just (⊞)                , reprMul   = Just (⊡)                }@@ -100,50 +89,50 @@       syms =           M.fromList           [ (0, const "Ꮭ ᎪᏍᏗ")-          , (1, \c → case c of-                       CtxAdd L (Lit 10) _ → "Ꮜ"-                       CtxAdd R _        _ → "ᏌᏬ"-                       _                   → "ᏐᏬ"+          , (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) _ → "ᏦᎢ"-                       _                    → "ᏦᎢ"+          , (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) _ → "ᏂᎦ"-                       _                   → "ᏅᎩ"+          , (4, \c -> case c of+                       CtxAdd L (Lit 10) _ -> "ᏂᎦ"+                       _                   -> "ᏅᎩ"             )-          , (5, \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) _ → "ᏓᎳ"-                       _                   → "ᏑᏓᎵ"+          , (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 _ _         _ → "ᎦᎵᏆ"-                       _                    → "ᎦᎵᏉᎩ"+          , (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 → "ᏧᏁᎵ"-                       _                    → "ᏧᏁᎳ"+          , (8, \c -> case c of+                       CtxAdd L (Lit 10)  _ -> "ᏁᎳ"+                       CtxMul _ (Lit 100) CtxEmpty -> "ᏧᏁᎵ"+                       _                    -> "ᏧᏁᎳ"             )-          , (9, \c → case c of-                       CtxMul _ (Lit 100) _ → "ᏐᏁᎵ"-                       _                    → "ᏐᏁᎳ"+          , (9, \c -> case c of+                       CtxMul _ (Lit 100) _ -> "ᏐᏁᎵ"+                       _                    -> "ᏐᏁᎳ"             )-          , (10, \c → case c of-                        CtxAdd R (Lit _) _           → "Ꮪ"-                        CtxMul R (Lit _) (CtxAdd {}) → "ᏍᎪ"-                        _                            → "ᏍᎪᎯ"+          , (10, \c -> case c of+                        CtxAdd R (Lit _) _           -> "Ꮪ"+                        CtxMul R (Lit _) (CtxAdd {}) -> "ᏍᎪ"+                        _                            -> "ᏍᎪᎯ"             )           , (100, const "ᏍᎪᎯᏥᏆ")           , (1000, const "ᎢᏯᎦᏴᎵ")@@ -151,10 +140,10 @@  -- | Transliterates a string written in the Cherokee syllabary to the -- latin alphabet.-transliterate ∷ Text → Text+transliterate :: Text -> Text transliterate xs = T.concatMap f xs     where-      f ∷ Char → Text+      f :: Char -> Text       f 'Ꭰ' = "a"       f 'Ꭱ' = "e"       f 'Ꭲ' = "i"@@ -241,4 +230,3 @@       f 'Ᏻ' = "yu"       f 'Ᏼ' = "yv"       f c   = T.singleton c-
src/Text/Numeral/Language/CLM.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,14 +26,9 @@ -- 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 "base" Data.Function ( fix ) 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 import "this" Text.Numeral.Entry import "text" Data.Text ( Text ) @@ -47,7 +37,7 @@ -- CLM -------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_3    = Just "clm"     , entNativeNames = ["nəxʷsƛ̕ay̕əmúcən"]@@ -58,10 +48,10 @@                        }     } -cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β+struct :: (Integral a) => a -> Exp struct = fix        $ findRule (   1, lit            )                 [ (  11, add 10 R       )@@ -74,13 +64,13 @@                 ]                   1000 -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = (1, 1000) -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms-               , reprAdd   = Just $ \_ _ _ → " ʔiʔ "+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just $ \_ _ _ -> " ʔiʔ "                , reprMul   = Just (⊡)                }     where@@ -98,18 +88,18 @@           , (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"+          , (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 :: s+            -> s+            -> Ctx Exp+            -> s       forms n t ctx = case ctx of-                        CtxMul _ (Lit 10) _ → t-                        _                   → n+                        CtxMul _ (Lit 10) _ -> t+                        _                   -> n
+ src/Text/Numeral/Language/CRO.hs view
@@ -0,0 +1,144 @@+{-|+[@ISO639-1@]        hr++[@ISO639-2B@]       cro++[@ISO639-3@]        cro++[@Native name@]     Hrvatski++[@English name@]    Croatian+-}++module Text.Numeral.Language.CRO+    ( -- * Language entries+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , shortScaleStruct+    , pelletierScaleStruct+      -- * Bounds+    , bounds+    ) where++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- CRO+--------------------------------------------------------------------------------++entry :: Entry+entry = emptyEntry+    { entIso639_1    = Just "hr"+    , entIso639_2    = ["cro"]+    , entIso639_3    = Just "cro"+    , entNativeNames = ["Hrvatski"]+    , entEnglishName = Just "Croatian"+    , entCardinal    = Just Conversion+                       { toNumeral   = cardinal+                       , toStructure = struct+                       }+    }++struct :: (Integral a) => a -> Exp+struct = pos $ fix $ rule++cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = render (cardinalRepr "minus " hr_add) inf . shortScaleStruct++shortScaleStruct :: (Integral a) => a -> Exp+shortScaleStruct = pos $ fix $ rule `combine` shortScale1 R L BN.rule++pelletierScaleStruct :: (Integral a) => a -> Exp+pelletierScaleStruct = pos $ fix $ rule `combine` pelletierScale1 R L BN.rule++rule :: (Integral a) => Rule a+rule = findRule (   0, lit       )+              [ (  11, add 10 L  )+              , (  20, mul 10 R L)+              , ( 100, step  100   10 R L)+              , (1000, step 1000 1000 R L)+              ] (dec 6 - 1)++bounds :: (Integral a) => (a, a)+bounds = let x = dec 30003 - 1 in (negate x, x)++genericRepr :: (Exp -> Exp -> Ctx Exp -> Text) -- ^ Add representation.+            -> Repr+genericRepr _ =+    defaultRepr+    { reprAdd   = Just (hr_add)+    , reprMul   = Just (⊞)+    }+    where+      (_ ⊞ Lit 10) _  = ""+      (_ ⊞ Lit 100) _ = ""+      (_ ⊞ _     ) _  = " "++hr_add :: Exp -> Exp -> Ctx Exp -> Text+((Lit 100)  `hr_add` _) _       = " "+((Lit 1000)  `hr_add`_) _       = " "+((_ `Mul` _     ) `hr_add` _) _ = " "+(_                `hr_add` _) _ = ""+++cardinalRepr :: Text -- ^ Negative number prefix.+             -> (Exp -> Exp -> Ctx Exp -> Text)+             -> Repr+cardinalRepr neg f =+    (genericRepr f)+    { reprValue = \_ n -> M.lookup n syms+    , reprScale = BN.scaleRepr (\_ _ -> "ljun") []+    , reprNeg   = Just $ \_ _ -> neg+    }+  where+    syms =+        M.fromList+        [ (0, const "nula")+        , (1, ten "jedan" "jeda" "jedan")+        , (2, hun "dva" "dva" "dvje" "dva")+        , (3, const "tri")+        , (4, ten "četiri" "četr" "četr")+        , (5, ten "pet" "pet" "pe")+        , (6, hun "šest" "šes" "še" "šes")+        , (7, const "sedam")+        , (8, const "osam")+        , (9, ten "devet" "devet" "deve")+        , (10, \c -> case c of+                      CtxAdd _ (Lit 100) _ -> "deset"+                      CtxAdd _ (Lit _) _   -> "naest"+                      _                    -> "deset"+          )+        , (60,  const "šedeset")+        , (100, const "sto")+        , (1000, \c -> case c of+                      CtxMul R _ _ -> "tisuća"+                      _            -> "tisuću")+        ]++    ten :: Text -> Text -> Text -> Ctx Exp -> Text+    ten n a m = \c -> case c of+                       CtxAdd _ (Lit 10) _ -> a+                       CtxMul _ (Lit 10) _ -> m+                       _                   -> n++    hun :: Text -> Text -> Text -> Text -> Ctx Exp -> Text+    hun n a h m = \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> a+                       CtxMul _ (Lit 10)  _ -> m+                       CtxMul _ (Lit 100) _ -> h+                       _                    -> n++
− src/Text/Numeral/Language/CS.hs
@@ -1,154 +0,0 @@-{-# 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
@@ -1,241 +0,0 @@-{-# 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-    ( -- * 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" 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           "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----------------------------------------------------------------------------------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 ∷ (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, 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-      (Lit n ⊞ (_ `Mul` Lit 10)) _ | n ≤ 9 = "und"-      (_ ⊞ _ ) _ = ""--      (_ ⊡ 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-      syms =-          M.fromList-          [ (0, const "null")-          , (1, \c → case c of-                       CtxAdd R _ _     → "eins"-                       CtxAdd L _ _     → "ein"-                       CtxMul _ (Lit n) _-                           | n ≥ dec 6  → "eine"-                           | n ≥ 100    → "ein"-                       _                → "eins"-            )-          , (2, \c → case c of-                       CtxMul _ (Lit 10) _ → "zwan"-                       _                   → "zwei"-            )-          , (3, const "drei")-          , (4, const "vier")-          , (5, const "fünf")-          , (6, \c → case c of-                       CtxAdd _ (Lit 10) _ → "sech"-                       CtxMul _ (Lit 10) _ → "sech"-                       _                   → "sechs"-            )-          , (7, \c → case c of-                       CtxAdd _ (Lit 10) _ → "sieb"-                       CtxMul _ (Lit 10) _ → "sieb"-                       _                   → "sieben"-            )-          , (8, const "acht")-          , (9, const "neun")-          , (10, \c → case c of-                        CtxMul _ (Lit 3) _ → "ßig"-                        CtxMul R (Lit _) _ → "zig"-                        _                  → "zehn"-            )-          , (11, const "elf")-          , (12, const "zwölf")-          , (100, const "hundert")-          , (1000, const "tausend")-          ]--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/DEU.hs view
@@ -0,0 +1,223 @@+{-|+[@ISO639-1@]        de++[@ISO639-2B@]       ger++[@ISO639-2T@]       deu++[@ISO639-3@]        deu++[@Native name@]     Deutsch++[@English name@]    German+-}++module Text.Numeral.Language.DEU+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+    , ordinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- DEU+-------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++ordinal :: (Integral a) => Inflection -> a -> Maybe Text+ordinal inf = ordinalRepr inf . struct++struct :: (Integral a) => a -> Exp+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 a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++genericRepr :: Repr+genericRepr = defaultRepr+              { reprAdd   = Just (⊞)+              , reprMul   = Just (⊡)+              , reprNeg   = Just $ \_ _   -> "minus "+              }+    where+      (Lit n ⊞ (_ `Mul` Lit 10)) _ | n <= 9 = "und"+      (_ ⊞ _ ) _ = ""++      (_ ⊡ Scale _ _ _) _ = " "+      (_ ⊡ _)           _ = ""+++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render genericRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprScale = BN.pelletierRepr (BN.quantityName "illion"   "illionen")+                                              (BN.quantityName "illiarde" "illiarden")+                                              bigNumSyms+               }+    where+      syms =+          M.fromList+          [ (0, const "null")+          , (1, \c -> case c of+                       CtxAdd R _ _     -> "eins"+                       CtxAdd L _ _     -> "ein"+                       CtxMul _ (Lit n) _+                           | n >= dec 6 -> "eine"+                           | n >= 100   -> "ein"+                       _                -> "eins"+            )+          , (2, \c -> case c of+                       CtxMul _ (Lit 10) _ -> "zwan"+                       _                   -> "zwei"+            )+          , (3, const "drei")+          , (4, const "vier")+          , (5, const "fünf")+          , (6, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "sech"+                       CtxMul _ (Lit 10) _ -> "sech"+                       _                   -> "sechs"+            )+          , (7, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "sieb"+                       CtxMul _ (Lit 10) _ -> "sieb"+                       _                   -> "sieben"+            )+          , (8, const "acht")+          , (9, const "neun")+          , (10, \c -> case c of+                        CtxMul _ (Lit 3) _ -> "ßig"+                        CtxMul R (Lit _) _ -> "zig"+                        _                  -> "zehn"+            )+          , (11, const "elf")+          , (12, const "zwölf")+          , (100, const "hundert")+          , (1000, const "tausend")+          ]++ordinalRepr :: Inflection -> Exp -> 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 :: [(Integer, Ctx Exp -> 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 `elem` [2,3,6] -> "zent"+                       | otherwise        -> "gent"+                   _                      -> "zent"+      )+    ]
− src/Text/Numeral/Language/EN.hs
@@ -1,266 +0,0 @@-{-# 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-    ( -- * Language entries-      gb_entry-    , us_entry-      -- * Conversions-    , gb_cardinal-    , gb_ordinal-    , gbPelletier_cardinal-    , us_cardinal-    , us_ordinal-      -- * Structure-    , shortScaleStruct-    , pelletierScaleStruct-      -- * 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       ( (+), (-), 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           "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-----------------------------------------------------------------------------------entry ∷ Entry-entry = emptyEntry-    { entIso639_1    = Just "en"-    , entIso639_2    = ["eng"]-    , entIso639_3    = Just "eng"-    , entNativeNames = ["English"]-    , entEnglishName = Just "English"-    }--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")-                                     (\_ _ → "illiard")-                                     []--us_cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text-us_cardinal inf = render (cardinalRepr "negative " us_add) inf ∘ shortScaleStruct--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--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 α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ Rule α β-rule = findRule (   0, lit       )-              [ (  13, add 10 L  )-              , (  20, mul 10 R L)-              , ( 100, step1  100   10 R L)-              , (1000, step1 1000 1000 R L)-              ]-                (dec 6 - 1)--bounds ∷ (Integral α) ⇒ (α, α)-bounds = let x = dec 30003 - 1 in (negate x, x)--genericRepr ∷ (Exp i → Exp i → Ctx (Exp i) → Text) -- ^ Add representation.-            → Repr i-genericRepr f =-    defaultRepr-    { reprAdd   = Just f-    , reprMul   = Just (⊞)-    }-    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 "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 _) _ | isOutside R c → "teenth"-                                           | otherwise     → "teen"-                        CtxMul R _       _ | isOutside R c → "tieth"-                                           | otherwise     → "ty"-                        _                  | isOutside R c → "tenth"-                                           | otherwise     → "ten"-            )-          , (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 -- ^ 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/ENG.hs view
@@ -0,0 +1,232 @@+{-|+[@ISO639-1@]        en++[@ISO639-2B@]       eng++[@ISO639-3@]        eng++[@Native name@]     English++[@English name@]    English+-}++module Text.Numeral.Language.ENG+    ( -- * Language entries+      gb_entry+    , us_entry+      -- * Conversions+    , gb_cardinal+    , gb_ordinal+    , gbPelletier_cardinal+    , us_cardinal+    , us_ordinal+      -- * Structure+    , shortScaleStruct+    , pelletierScaleStruct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- ENG+--------------------------------------------------------------------------------++entry :: Entry+entry = emptyEntry+    { entIso639_1    = Just "en"+    , entIso639_2    = ["eng"]+    , entIso639_3    = Just "eng"+    , entNativeNames = ["English"]+    , entEnglishName = Just "English"+    }++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 :: (Integral a) => Inflection -> a -> Maybe Text+gb_cardinal inf = render (cardinalRepr "minus " gb_add) inf . shortScaleStruct++gb_ordinal :: (Integral a) => Inflection -> a -> Maybe Text+gb_ordinal inf = render (ordinalRepr gb_add) inf . shortScaleStruct++gbPelletier_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+gbPelletier_cardinal inf = render (cardinalRepr "minus " gb_add) { reprScale = pelletierRepr } inf+                         . pelletierScaleStruct+  where+    pelletierRepr = BN.pelletierRepr (\_ _ -> "illion")+                                     (\_ _ -> "illiard")+                                     []++us_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+us_cardinal inf = render (cardinalRepr "negative " us_add) inf . shortScaleStruct++us_ordinal :: (Integral a) => Inflection -> a -> Maybe Text+us_ordinal inf = render (ordinalRepr us_add) inf . shortScaleStruct++shortScaleStruct :: (Integral a) => a -> Exp+shortScaleStruct = pos $ fix $ rule `combine` shortScale1 R L BN.rule++pelletierScaleStruct :: (Integral a) => a -> Exp+pelletierScaleStruct = pos $ fix $ rule `combine` pelletierScale1 R L BN.rule++rule :: (Integral a) => Rule a+rule = findRule (   0, lit       )+              [ (  13, add 10 L  )+              , (  20, mul 10 R L)+              , ( 100, step1  100   10 R L)+              , (1000, step1 1000 1000 R L)+              ]+                (dec 6 - 1)++bounds :: (Integral a) => (a, a)+bounds = let x = dec 30003 - 1 in (negate x, x)++genericRepr :: (Exp -> Exp -> Ctx Exp -> Text) -- ^ Add representation.+            -> Repr+genericRepr f =+    defaultRepr+    { reprAdd   = Just f+    , reprMul   = Just (⊞)+    }+    where+      (_ ⊞ Lit 10) _ = ""+      (_ ⊞ _     ) _ = " "++gb_add :: Exp -> Exp -> Ctx Exp -> Text+((_ `Mul` Lit 10) `gb_add` _) _ = "-"+((_ `Mul` _     ) `gb_add` _x) _+    --  | eval x < (100 :: Integer) = " and "+    | otherwise                 = " "+(_                `gb_add` _) _ = ""++us_add :: Exp -> Exp -> Ctx Exp -> Text+((_ `Mul` Lit 10) `us_add` _) _ = "-"+((_ `Mul` _     ) `us_add` _) _ = " "+(_                `us_add` _) _ = ""++cardinalRepr :: Text -- ^ Negative number prefix.+             -> (Exp -> Exp -> Ctx Exp -> Text)+             -> Repr+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 -> s+    ten n a m = \c -> case c of+                       CtxAdd _ (Lit 10) _ -> a+                       CtxMul _ (Lit 10) _ -> m+                       _                   -> n++ordinalRepr :: (Exp -> Exp -> Ctx Exp -> Text) -> Repr+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 "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 _) _ | isOutside R c -> "teenth"+                                           | otherwise     -> "teen"+                        CtxMul R _       _ | isOutside R c -> "tieth"+                                           | otherwise     -> "ty"+                        _                  | isOutside R c -> "tenth"+                                           | otherwise     -> "ten"+            )+          , (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 -- ^ Ordinal form.+          -> s -- ^ Cardinal form; normal.+          -> s -- ^ Cardinal form; added to ten.+          -> s -- ^ Cardinal form; multiplied with ten.+          -> Ctx Exp+          -> 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
@@ -1,100 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        eo--[@ISO639-2B@]       epo--[@ISO639-3@]        epo--[@Native name@]     Esperanto--[@English name@]    Esperanto--}--module Text.Numeral.Language.EO-    ( -- * 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 )-------------------------------------------------------------------------------------- EO-----------------------------------------------------------------------------------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-                       }-    }--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, step 10  10 R L)-                , (100, step 100 10 R L)-                ]-                  1000--bounds ∷ (Integral α) ⇒ (α, α)-bounds = (0, 1000)--cardinalRepr ∷ i → Exp i → Maybe Text-cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms-               , reprAdd   = Just $ \_ _ _ → " "-               , reprMul   = Just $ \_ _ _ → ""-               }-    where-      syms =-          M.fromList-          [ (0, const "nul")-          , (1, const "unu")-          , (2, const "du")-          , (3, const "tri")-          , (4, const "kvar")-          , (5, const "kvin")-          , (6, const "ses")-          , (7, const "sep")-          , (8, const "ok")-          , (9, const "naŭ")-          , (10, const "dek")-          , (100, const "cent")-          , (1000, const "mil")-          ]
+ src/Text/Numeral/Language/EPO.hs view
@@ -0,0 +1,90 @@+{-|+[@ISO639-1@]        eo++[@ISO639-2B@]       epo++[@ISO639-3@]        epo++[@Native name@]     Esperanto++[@English name@]    Esperanto+-}++module Text.Numeral.Language.EPO+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- EPO+--------------------------------------------------------------------------------++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+                       }+    }++cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = checkPos+       $ fix+       $ findRule (  0, lit            )+                [ ( 11, step 10  10 R L)+                , (100, step 100 10 R L)+                ]+                  1000++bounds :: (Integral a) => (a, a)+bounds = (0, 1000)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just $ \_ _ _ -> " "+               , reprMul   = Just $ \_ _ _ -> ""+               }+    where+      syms =+          M.fromList+          [ (0, const "nul")+          , (1, const "unu")+          , (2, const "du")+          , (3, const "tri")+          , (4, const "kvar")+          , (5, const "kvin")+          , (6, const "ses")+          , (7, const "sep")+          , (8, const "ok")+          , (9, const "naŭ")+          , (10, const "dek")+          , (100, const "cent")+          , (1000, const "mil")+          ]
− src/Text/Numeral/Language/ES.hs
@@ -1,207 +0,0 @@-{-# LANGUAGE FlexibleContexts  #-}-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        es--[@ISO639-2B@]       spa--[@ISO639-3@]        spa--[@Native name@]     Español--[@English name@]    Spanish--}--module Text.Numeral.Language.ES-    ( -- * 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.Ord      ( (<) )-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           "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----------------------------------------------------------------------------------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 ∷ ( 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` longScale1_es-    where-      rule = findRule (   0, lit       )-                    [ (  11, add 10 L  )-                    , (  16, 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)---- | 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 = \inf n → M.lookup n (syms inf)-               , reprScale = longScaleRepr-               , reprAdd   = Just (⊞)-               , reprMul   = Just (⊡)-               , reprNeg   = Just $ \_ _ → "menos "-               }-    where-      (_                    ⊞ Lit 10) _ = ""-      (Lit 10               ⊞ _     ) _ = ""-      (Lit 20               ⊞ _     ) _ = ""-      ((Lit _ `Mul` Lit 10) ⊞ _     ) _ = " y "-      (_                    ⊞ _     ) _ = " "--      (_ ⊡ Lit n) _ | n < 1000 = ""-      (_ ⊡ _    ) _            = " "--      syms inf =-          M.fromList-          [ (0, const "cero")-          , (1, \c → case c of-                       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"-                       CtxAdd _ (Lit 20)  _ → "dós"-                       _                    → "dos"-            )-          , (3, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "tre"-                       CtxAdd _ (Lit 20)  _ → "trés"-                       CtxMul _ (Lit 10)  _ → "trein"-                       _                    → "tres"-            )-          , (4, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "cator"-                       CtxMul _ (Lit 10)  _ → "cuaren"-                       _                    → "cuatro"-            )-          , (5, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "quin"-                       CtxMul _ (Lit 10)  _ → "cincuen"-                       CtxMul _ (Lit 100) _ → "quin"-                       _                    → "cinco"-            )-          , (6, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "séis"-                       CtxAdd _ (Lit 20)  _ → "séis"-                       CtxMul _ (Lit 10)  _ → "sesen"-                       _                    → "seis"-            )-          , (7, \c → case c of-                       CtxMul _ (Lit 10)  _ → "seten"-                       CtxMul _ (Lit 100) _ → "sete"-                       _                    → "siete"-            )-          , (8, \c → case c of-                       CtxMul _ (Lit 10)  _ → "ochen"-                       _                    → "ocho"-            )-          , (9, \c → case c of-                       CtxMul _ (Lit 10)  _ → "noven"-                       CtxMul _ (Lit 100) _ → "nove"-                       _                    → "nueve"-            )-          , (10, \c → case c of-                        CtxAdd R (Lit _)  _ → "ce"-                        CtxAdd L (Lit _)  _ → "dieci"-                        CtxMul R _        _ → "ta"-                        _                   → "diez"-            )-          , (20, \c → case c of-                        CtxAdd _ (Lit _)  _ → "veinti"-                        _                   → "veinte"-            )-          , (100, \c → case c of-                         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 ∷ i → ℤ → ℤ → (Exp i) → Ctx (Exp i) → Maybe Text-longScaleRepr =-    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
@@ -10,108 +10,96 @@ --------------------------------------------------------------------------------  import "this" Text.Numeral.Entry ( Entry(..) )-import qualified "this" Text.Numeral.Language.AF  as AF+import qualified "this" Text.Numeral.Language.AFR as AFR import qualified "this" Text.Numeral.Language.AMP as AMP-import qualified "this" Text.Numeral.Language.BG  as BG+import qualified "this" Text.Numeral.Language.BUL as BUL+import qualified "this" Text.Numeral.Language.CES as CES 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.DEU as DEU+import qualified "this" Text.Numeral.Language.ENG as ENG+import qualified "this" Text.Numeral.Language.EPO as EPO+import qualified "this" Text.Numeral.Language.FIN as FIN+import qualified "this" Text.Numeral.Language.FRA as FRA import qualified "this" Text.Numeral.Language.FUR as FUR+import qualified "this" Text.Numeral.Language.GLV as GLV 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.HEB as HEB 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.ITA as ITA+import qualified "this" Text.Numeral.Language.JPN as JPN+import qualified "this" Text.Numeral.Language.LAT as LAT 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.MLG as MLG+import qualified "this" Text.Numeral.Language.NEN as NEN+import qualified "this" Text.Numeral.Language.NLD as NLD+import qualified "this" Text.Numeral.Language.NOB as NOB 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.OJI as OJI 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.POL as POL+import qualified "this" Text.Numeral.Language.POR as POR+import qualified "this" Text.Numeral.Language.RUS as RUS 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.SPA as SPA+import qualified "this" Text.Numeral.Language.SWE as SWE+import qualified "this" Text.Numeral.Language.TUR as TUR+import qualified "this" Text.Numeral.Language.WOL as WOL import qualified "this" Text.Numeral.Language.YOR as YOR-import qualified "this" Text.Numeral.Language.ZH  as ZH+import qualified "this" Text.Numeral.Language.ZHO as ZHO   -------------------------------------------------------------------------------- -- Language entries -------------------------------------------------------------------------------- -entries ∷ [Entry]+entries :: [Entry] entries =-  [ AF.entry+  [ AFR.entry   , AMP.entry-  , BG.entry+  , BUL.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+  , CES.entry+  , DEU.entry+  , ENG.gb_entry+  , ENG.us_entry+  , EPO.entry+  , SPA.entry+  , FIN.entry+  , FRA.entry   , FUR.entry   , GSW.entry-  , GV.entry-  , HE.entry+  , GLV.entry+  , HEB.entry   , HOP.entry---, HR.entry---, HU.entry-  , IT.entry-  , JA.daiji_entry-  , JA.kanji_entry-  , JA.on'yomi_entry-  , JA.preferred_entry-  , LA.entry+  , ITA.entry+  , JPN.daiji_entry+  , JPN.kanji_entry+  , JPN.on'yomi_entry+  , JPN.preferred_entry+  , LAT.entry   , LLD.entry-  , MG.entry-  , NL.entry-  , NO.entry+  , MLG.entry+  , NEN.entry+  , NLD.entry+  , NOB.entry   , NQM.entry-  , OJ.entry---, PAA.entry+  , OJI.entry   , PDC.entry-  , PL.entry-  , PT.entry---, RO.entry-  , RU.entry+  , POL.entry+  , POR.entry+  , RUS.entry   , SCO.entry-  , SV.entry-  , TR.entry-  , WO.entry+  , SWE.entry+  , TUR.entry+  , WOL.entry   , YOR.entry-  , ZH.finance_simpl_entry-  , ZH.finance_trad_entry-  , ZH.pinyin_entry-  , ZH.simpl_entry-  , ZH.trad_entry+  , ZHO.finance_simpl_entry+  , ZHO.finance_trad_entry+  , ZHO.pinyin_entry+  , ZHO.simpl_entry+  , ZHO.trad_entry   ]
− src/Text/Numeral/Language/FI.hs
@@ -1,960 +0,0 @@-{-# 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/FIN.hs view
@@ -0,0 +1,808 @@+{-|+[@ISO639-1@]        fi++[@ISO639-2B@]       fin++[@ISO639-3@]        fin++[@Native name@]     suomi++[@English name@]    Finnish+-}++module Text.Numeral.Language.FIN+    ( -- * Language entry+      entry+      -- * Inflection+    , Inflection+      -- * Conversions+    , cardinal+    , ordinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum  as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- FIN+-------------------------------------------------------------------------------++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 :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++ordinal :: (Integral a) => Inflection -> a -> Maybe Text+ordinal inf = ordinalRepr inf . struct++struct :: (Integral a) => a -> Exp+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 a) => a -> Rule a+fi_mul val =+    \f n -> let (m, a) = n `divMod` val+                mval = Mul (f m) (ChangeCase (Just Partitive) $ f val)+            in if a == 0+               then mval+               else (flip Add) (f a) mval+  -- where+  --   toPartitive :: Inflection -> Inflection+  --   toPartitive inf | G.isSingular inf && (G.isNominative inf || G.isAccusative inf) = G.partitive inf+  --                   | otherwise = inf++bounds :: (Integral a) => (a, a)+bounds = let x = dec 15 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> 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+                                _ | isSuperEssive    inf -> "yhtäällä"+                                  | isDelative       inf -> "yhtäältä"+                                  | isSublative      inf -> "yhtäälle"+                                  | isLative         inf -> "yhä"+                                  | 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+                                _ | 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+                                 _ | isInstructive    inf -> "kahden"+                                   | isSuperEssive    inf -> "kahtaalla"+                                   | isDelative       inf -> "kahtaalta"+                                   | isSublative      inf -> "kahtaalle"+                                   | isLative         inf -> "kahtia"+                                   | 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+                                 _ | 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+                                 _ | isInstructive    inf -> "kolmen"+                                   | isLative         inf -> "kolmia"+                                   | 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+                                 _ | isDistributive         inf -> "kolmittain"+                                   | 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 :: Inflection -> Exp -> 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+                                 _ | isComitative  inf -> "neljänsine"+                                   | 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 :: Inflection -> Ctx Exp+         -> 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+    | isSingular inf = singularForms+    | isPlural   inf = pluralForms+    | otherwise        = "?"+  where+    singularForms+        | isNominative       inf = s_nom+        | isAccusative       inf = s_acc+        | isGenitive         inf = s_gen+        | isPartitive        inf = s_ptv+        | isEssive           inf = s_ess+        | isTranslative      inf = s_transl+        | isLocativeInessive inf = s_ine+        | isLocativeElative  inf = s_ela+        | isLocativeIllative inf = s_ill+        | isLocativeAdessive inf = s_ade+        | isLocativeAblative inf = s_abl+        | isLocativeAllative inf = s_all+        | isAbessive         inf = s_abe+        | otherwise              = s_other+    pluralForms+        | isNominative       inf = p_nom+        | isAccusative       inf = p_acc+        | isGenitive         inf = p_gen+        | isPartitive        inf = p_ptv+        | isEssive           inf = p_ess+        | isTranslative      inf = p_transl+        | isLocativeInessive inf = p_ine+        | isLocativeElative  inf = p_ela+        | isLocativeIllative inf = p_ill+        | isLocativeAdessive inf = p_ade+        | isLocativeAblative inf = p_abl+        | isLocativeAllative inf = p_all+        | isAbessive         inf = p_abe+        | isComitative       inf = p_com+        | isInstructive      inf = p_instr+        | otherwise              = p_other
− src/Text/Numeral/Language/FR.hs
@@ -1,259 +0,0 @@-{-# 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-    ( -- * Language entry-      entry-      -- * Conversions-    , cardinal-    , ordinal-      -- * Structure-    , cardinalStruct-    , ordinalStruct-      -- * 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 "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 )-------------------------------------------------------------------------------------- FR-----------------------------------------------------------------------------------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 ∷ (G.Feminine i, Integral α, E.Scale α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ cardinalStruct--ordinal ∷ (G.Feminine i, Integral α, E.Scale α) ⇒ i → α → Maybe Text-ordinal inf = ordinalRepr inf ∘ ordinalStruct--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 = "-"-      ((Lit 4 `Mul` Lit 20) ⊞ _     ) _               = "-"-      (_                    ⊞ (Lit 1 `Add` Lit 10)) _ = " et "-      (_                    ⊞ Lit 1               ) _ = " et "-      ((Lit _ `Mul` Lit 10) ⊞ _                   ) _ = "-"-      (Lit 20               ⊞ _                   ) _ = "-"-      (_                    ⊞ _                   ) _ = " "--      (_ ⊡ Lit 10) _ = ""-      (_ ⊡ Lit 20) _ = "-"-      (_ ⊡ _     ) _ = " "--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, \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")-          , (5, ten   "cinq"   "quin"   "cinqu")-          , (6, ten   "six"    "sei"    "soix")-          , (7, const "sept")-          , (8, const "huit")-          , (9, const "neuf")-          , (10, \c → case c of-                        CtxAdd _ (Lit n) _ | n < 7     → "ze"-                                           | otherwise → "dix"-                        CtxMul _ (Lit 3) _             → "te"-                        CtxMul R _       _             → "ante"-                        _                              → "dix"-            )-          , (20, \c → case c of-                        CtxMul _ _ CtxEmpty → "vingts"-                        _                   → "vingt"-            )-          , (100, \c → case c of-                         CtxMul R _ CtxEmpty → "cents"-                         _                   → "cent"-            )-          , (1000, const "mille")-          ]--      ten n a m ctx = case ctx 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 "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/FRA.hs view
@@ -0,0 +1,238 @@+{-|+[@ISO639-1@]        fr++[@ISO639-2B@]       fre++[@ISO639-3@]        fra++[@Native name@]     Français++[@English name@]    French+-}++module Text.Numeral.Language.FRA+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+    , ordinal+      -- * Structure+    , cardinalStruct+    , ordinalStruct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum  as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- FRA+--------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . cardinalStruct++ordinal :: (Integral a) => Inflection -> a -> Maybe Text+ordinal inf = ordinalRepr inf . ordinalStruct++cardinalStruct :: (Integral a) => a -> Exp+cardinalStruct = pos $ fix $ rule `combine` pelletierScale1 R L BN.rule++ordinalStruct :: (Integral a) => a -> Exp+ordinalStruct = pos $ fix $ rule `combine` pelletierScale R L BN.rule++rule :: (Integral a) => Rule a+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 a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++genericRepr :: Repr+genericRepr = defaultRepr+              { reprAdd   = Just (⊞)+              , reprMul   = Just (⊡)+              , reprNeg   = Just $ \_ _ -> "moins "+              }+    where+      (Lit n                ⊞ Lit 10) _       | n <= 6 = ""+      (Lit 10               ⊞ Lit n ) _       | n >= 7 = "-"+      ((Lit 4 `Mul` Lit 20) ⊞ _     ) _                = "-"+      (_                    ⊞ (Lit 1 `Add` Lit 10)) _  = " et "+      (_                    ⊞ Lit 1               ) _  = " et "+      ((Lit _ `Mul` Lit 10) ⊞ _                   ) _  = "-"+      (Lit 20               ⊞ _                   ) _  = "-"+      (_                    ⊞ _                   ) _  = " "++      (_ ⊡ Lit 10) _ = ""+      (_ ⊡ Lit 20) _ = "-"+      (_ ⊡ _     ) _ = " "++cardinalRepr :: Inflection -> Exp -> 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, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "on"+                       _ | isFeminine inf  -> "une"+                         | otherwise       -> "un"+            )+          , (2, ten   "deux"   "dou"    "deux")+          , (3, ten   "trois"  "trei"   "tren")+          , (4, ten   "quatre" "quator" "quar")+          , (5, ten   "cinq"   "quin"   "cinqu")+          , (6, ten   "six"    "sei"    "soix")+          , (7, const "sept")+          , (8, const "huit")+          , (9, const "neuf")+          , (10, \c -> case c of+                        CtxAdd _ (Lit n) _ | n < 7     -> "ze"+                                           | otherwise -> "dix"+                        CtxMul _ (Lit 3) _             -> "te"+                        CtxMul R _       _             -> "ante"+                        _                              -> "dix"+            )+          , (20, \c -> case c of+                        CtxMul _ _ CtxEmpty -> "vingts"+                        _                   -> "vingt"+            )+          , (100, \c -> case c of+                         CtxMul R _ CtxEmpty -> "cents"+                         _                   -> "cent"+            )+          , (1000, const "mille")+          ]++      ten n a m ctx = case ctx of+                        CtxAdd _ (Lit 10) _ -> a+                        CtxMul _ (Lit 10) _ -> m+                        _                   -> n++ordinalRepr :: Inflection -> Exp -> 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+                         | isFeminine inf  -> "première"+                         | otherwise       -> "premier"+                       CtxAdd _ (Lit 10) _ -> "on"+                       _ | isOutside R c   -> if isFeminine inf+                                              then "uneième"+                                              else "unième"+                         | 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 :: [(Integer, Ctx Exp -> 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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,20 +26,13 @@ -- 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 "base" Data.Function ( fix )+import qualified "containers" Data.Map as M 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 qualified "this" Text.Numeral.Language.ITA as ITA ( rule ) import           "this" Text.Numeral.Render.Utils ( addCtx, mulCtx ) import "text" Data.Text ( Text ) @@ -53,7 +41,7 @@ -- FUR -------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_2    = ["fur"]     , entIso639_3    = Just "fur"@@ -65,22 +53,18 @@                        }     } -cardinal ∷ (G.Masculine i, G.Feminine i, Integral α, E.Scale α)-         ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> 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+struct :: (Integral a) => a -> Exp+struct = fix $ ITA.rule `combine` pelletierScale1 R L BN.rule -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = let x = dec 12 - 1 in (negate x, x) -cardinalRepr ∷ (G.Feminine i, G.Masculine i) ⇒ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \inf n → M.lookup n (syms inf)+               { reprValue = \inf n -> M.lookup n (syms inf)                , reprAdd   = Just (⊞)                , reprMul   = Just (⊡)                , reprScale = BN.pelletierRepr@@ -107,14 +91,14 @@       syms inf =           M.fromList           [ (0, const "zero")-          , (1, \c → case c of-                       _ | G.isFeminine  inf → "une"-                         | otherwise         → "un"+          , (1, \c -> case c of+                       _ | isFeminine  inf -> "une"+                         | otherwise       -> "un"             )           , (2, addCtx 10 "do" $ mulCtx 100 "dus"-                $ \c → case c of-                         _ | G.isFeminine inf → "dôs"-                           | otherwise        → "doi"+                $ \c -> case c of+                         _ | isFeminine inf -> "dôs"+                           | otherwise      -> "doi"             )           , (3, addCtx 10  "tre"  $ mulCtx 10 "tr"               $ mulCtx 100 "tres" $ const     "trê"@@ -125,21 +109,21 @@           , (7,                      mulCtx 10 "set"   $ const "siet")           , (8,                      mulCtx 10 "ot"    $ const "vot")           , (9,                      mulCtx 10 "nov"   $ const "nûf")-          , (10, \c → case c of+          , (10, \c -> case c of                         CtxAdd R (Lit n) _-                            | n ≤ 7        → "dis"-                        CtxAdd L _       _ → "dise"-                        CtxMul _ (Lit 3) _ → "ente"+                            | n <= 7       -> "dis"+                        CtxAdd L _       _ -> "dise"+                        CtxMul _ (Lit 3) _ -> "ente"                         CtxMul _ (Lit n) _-                            | n ≤ 9        → "ante"-                        _                  → "dîs"+                            | n <= 9       -> "ante"+                        _                  -> "dîs"             )           , (20, const "vincj")-          , (100, \c → case c of+          , (100, \c -> case c of                          CtxMul _ (Lit n) _-                             | n ≤ 3     → "inte"-                             | otherwise → "cent"-                         _               → "cent"+                             | n <= 3    -> "inte"+                             | otherwise -> "cent"+                         _               -> "cent"             )           , (1000, const "mil")           ]
+ src/Text/Numeral/Language/GLV.hs view
@@ -0,0 +1,113 @@+{-|+[@ISO639-1@]        gv++[@ISO639-2@]        glv++[@ISO639-3@]        glv++[@Native name@]     Gaelg++[@English name@]    Manx+-}++module Text.Numeral.Language.GLV+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- GLV+-------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = checkPos+       $ fix+       $ findRule (   1, lit       )+                [ (  11, add 10 L  )+                , (  20, lit       )+                , (  21, add 20 L  )+                , (  40, lit       )+                , (  41, add 40 L  )+                , (  60, mul 20 R L)+                , ( 100, step 100 10 R L)+                , (1000, lit)+                ]+                   1000++bounds :: (Integral a) => (a, a)+bounds = (1, 1000)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just (⊞)+               , reprMul   = Just $ \_ _ _ -> " "+               }+    where+      ((Lit _ `Mul` Lit 20) ⊞ Lit 10) _ = " as "+      (_                    ⊞ Lit 10) _ = "-"+      (_                    ⊞ _     ) _ = " as "++      syms =+          M.fromList+          [ (1, const "nane")+          , (2, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "daa"+                       CtxMul {}           -> "daa"+                       _                   -> "jees"+            )+          , (3, const "tree")+          , (4, const "kiare")+          , (5, const "queig")+          , (6, const "shey")+          , (7, const "shiaght")+          , (8, const "hoght")+          , (9, const "nuy")+          , (10, \c -> case c of+                        CtxAdd _ (Lit 2)              _ -> "yeig"+                        CtxAdd _ (Lit _ `Mul` Lit 20) _ -> "jeih"+                        CtxAdd R _                    _ -> "jeig"+                        _                               -> "jeih"+            )+          , (20, const "feed")+          , (40, const "daeed")+          , (100, \c -> case c of+                         CtxMul {} -> "cheead"+                         _         -> "keead"+            )+          , (1000, const "thousane")+          ]
src/Text/Numeral/Language/GSW.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,16 +26,10 @@ -- 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+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Language.DEU ( struct ) import "this" Text.Numeral.Entry import "text" Data.Text ( Text ) @@ -49,7 +38,7 @@ -- GSW -------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_2    = ["gse"]     , entIso639_3    = Just "gse"@@ -61,64 +50,64 @@                        }     } -cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = let x = dec 6 - 1 in (negate x, x) -genericRepr ∷ Repr i+genericRepr :: Repr genericRepr = defaultRepr               { reprAdd   = Just (⊞)-              , reprMul   = Just $ \_ _ _ → ""+              , reprMul   = Just $ \_ _ _ -> ""               }     where       (_       ⊞ (_ `Mul` Lit 10)) _ = "e"       (Lit 100 ⊞ Lit 1)            _ = "und"       (_       ⊞ _ )               _ = "" -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render genericRepr-               { reprValue = \_ n → M.lookup n syms }+               { reprValue = \_ n -> M.lookup n syms }     where       syms =           M.fromList-          [ (1, \c → case c of-                       CtxAdd _ (Lit 100) _ → "äis"-                       CtxAdd {}            → "ein"-                       _                    → "eis"+          [ (1, \c -> case c of+                       CtxAdd _ (Lit 100) _ -> "äis"+                       CtxAdd {}            -> "ein"+                       _                    -> "eis"             )-          , (2, \c → case c of-                       CtxMul _ (Lit 10) _ → "zwän"-                       _                   → "zwöi"+          , (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ü"+          , (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"+          , (6, \c -> case c of+                       CtxMul _ (Lit 10) _ -> "sëch"+                       _                   -> "sächs"             )-          , (7, \c → case c of-                       CtxAdd _ (_ `Mul` Lit 10) _ → "siben"-                       _                           → "sibe"+          , (7, \c -> case c of+                       CtxAdd _ (_ `Mul` Lit 10) _ -> "siben"+                       _                           -> "sibe"             )-          , (8, \c → case c of-                       CtxMul _ (Lit 10) _ → "ach"-                       _                   → "acht"+          , (8, \c -> case c of+                       CtxMul _ (Lit 10) _ -> "ach"+                       _                   -> "acht"             )-          , (9, \c → case c of-                       CtxAdd _ (_ `Mul` Lit 10) _ → "nün"-                       _                           → "nüün"+          , (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"+          , (10, \c -> case c of+                        CtxMul _ (Lit 3) _ -> "sg"+                        CtxMul {}          -> "zg"+                        _                  -> "zäh"             )           , (11, const "euf")           , (12, const "zwüof")
− src/Text/Numeral/Language/GV.hs
@@ -1,123 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        gv--[@ISO639-2@]        glv--[@ISO639-3@]        glv--[@Native name@]     Gaelg--[@English name@]    Manx--}--module Text.Numeral.Language.GV-    ( -- * 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 )------------------------------------------------------------------------------------- GV----------------------------------------------------------------------------------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 ∷ (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       )-                [ (  11, add 10 L  )-                , (  20, lit       )-                , (  21, add 20 L  )-                , (  40, lit       )-                , (  41, add 40 L  )-                , (  60, mul 20 R L)-                , ( 100, step 100 10 R L)-                , (1000, lit)-                ]-                   1000--bounds ∷ (Integral α) ⇒ (α, α)-bounds = (1, 1000)--cardinalRepr ∷ i → Exp i → Maybe Text-cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms-               , reprAdd   = Just (⊞)-               , reprMul   = Just $ \_ _ _ → " "-               }-    where-      ((Lit _ `Mul` Lit 20) ⊞ Lit 10) _ = " as "-      (_                    ⊞ Lit 10) _ = "-"-      (_                    ⊞ _     ) _ = " as "--      syms =-          M.fromList-          [ (1, const "nane")-          , (2, \c → case c of-                       CtxAdd _ (Lit 10) _ → "daa"-                       CtxMul {}           → "daa"-                       _                   → "jees"-            )-          , (3, const "tree")-          , (4, const "kiare")-          , (5, const "queig")-          , (6, const "shey")-          , (7, const "shiaght")-          , (8, const "hoght")-          , (9, const "nuy")-          , (10, \c → case c of-                        CtxAdd _ (Lit 2)              _ → "yeig"-                        CtxAdd _ (Lit _ `Mul` Lit 20) _ → "jeih"-                        CtxAdd R _                    _ → "jeig"-                        _                               → "jeih"-            )-          , (20, const "feed")-          , (40, const "daeed")-          , (100, \c → case c of-                         CtxMul {} → "cheead"-                         _         → "keead"-            )-          , (1000, const "thousane")-          ]
− src/Text/Numeral/Language/HE.hs
@@ -1,172 +0,0 @@-{-# 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/HEB.hs view
@@ -0,0 +1,158 @@+{-# LANGUAGE FlexibleContexts  #-}++{-|+[@ISO639-1@]        he++[@ISO639-2@]        heb++[@ISO639-3@]        heb++[@Native name@]     עִבְרִית++[@English name@]    Modern Hebrew+-}++module Text.Numeral.Language.HEB+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Monoid ( (<>) )+import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- HEB+--------------------------------------------------------------------------------++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 :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = pos+       $ fix+       $ findRule (  0, lit)+                  ( [ (11, add 10 L)+                    , (20, changeNumber (Just Dual) . mapRule (`div` 10) lit)+                    , (21, add 20 R)+                    ]+                  <> concat [ [ (n, changeNumber (Just Plural) . mapRule (`div` 10) lit)+                             , (n+1, add n R)+                             ]+                           | n <- [20,30..90]+                           ]+                  <> [ (100, step 100 10 R L)+                    , (200, changeNumber (Just Dual) . mapRule (`div` 2) lit)+                    , (201, add 200 R)+                    , (300, step 100 10 R L)+                    ]+                  )+                  1000++bounds :: (Integral a) => (a, a)+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 :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \i n -> M.lookup n (syms i)+               , reprAdd   = Just (⊞)+               , reprMul   = Just (⊡)+               , reprNeg   = Just $ \_ _ -> "מינוס "+               , reprAddCombine = Just addCombine+               }+    where+      (_ ⊞ Lit 10) _ = "ה"+      (ChangeNumber _ _ ⊞ _) _ = " ו"+      (_ ⊞ _) _ = " "++      (_ ⊡ Lit 10) _ = ""+      (_ ⊡ _     ) _ = " "++      addCombine a x _ y (Lit 10) = x <> " " <> y <> a+      addCombine a x _ y _        = x <> a <> y++      syms inf =+          M.fromList+          [ (0, \c -> case c of+                       _ -> "אפס"+            )+          , (1, \c -> case c of+                       _ -> "אחת"+            )+          , (2, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "שתים"+                       _ | isDual inf    -> "עשרים"+                         | otherwise       -> "שתיים"+            )+          , (3, \c -> case c of+                       _ | isPlural inf  -> "שלושים"+                         | otherwise       -> "שלוש"+            )+          , (4, \c -> case c of+                       _ | isPlural inf -> "ארבעים"+                         | otherwise      -> "ארבע"+            )+          , (5, \c -> case c of+                       _ | isPlural inf -> "חמישים"+                         | otherwise      -> "חמש"+            )+          , (6, \c -> case c of+                       _ | isPlural inf -> "ששים"+                         | otherwise      -> "שש"+            )+          , (7, \c -> case c of+                       _ | isPlural inf -> "שבעים"+                         | otherwise      -> "שבע"+            )+          , (8, \c -> case c of+                       _ | isPlural inf -> "שמונים"+                         | otherwise      -> "שמונה"+            )+          , (9, \c -> case c of+                       _ | isPlural inf -> "תשעים"+                         | otherwise      -> "תשע"+            )+          , (10, \c -> case c of+                        CtxMul _ (Lit n) _ | n <= 9 -> ""+                        _ -> "עשר"+            )+          , (100, \c -> case c of+                         _ | isDual   inf -> "מאתיים"+                           | isPlural inf -> "מאות"+                           | otherwise    -> "מאה"+            )+          , (1000, \c -> case c of+                          _ -> "אלף"+            )+          ]
src/Text/Numeral/Language/HOP.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,15 +26,10 @@ -- 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 "base" Data.Function ( fix )+import "base" Data.Monoid   ( (<>) ) 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 import "this" Text.Numeral.Entry import "this" Text.Numeral.Render.Utils ( mulCtx ) import "text" Data.Text ( Text )@@ -49,7 +39,7 @@ -- HOP -------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_3    = Just "hop"     , entNativeNames = ["Hopilàvayi"]@@ -60,13 +50,10 @@                        }     } -cardinal ∷ (Integral α, E.Scale α)⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -struct ∷ ( Integral α-         , E.Unknown β, E.Lit β, E.Add β, E.Mul β-         )-       ⇒ α → β+struct :: (Integral a) => a -> Exp struct = fix        $ findRule ( 0, lit)                 [ (11, add 10 R)@@ -76,53 +63,53 @@                 ]                   (100) -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = (1, 100) -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \inf n → M.lookup n (syms inf)+               { reprValue = \inf n -> M.lookup n (syms inf)                , reprAdd   = Just (⊞)                , reprAddCombine = Just addCombine-               , reprMul   = Just $ \_ _ _ → " "+               , reprMul   = Just $ \_ _ _ -> " "                }     where-      (Lit n          ⊞ _) _ | n ∈ [10, 20] = " niikyang "-      (Mul _ (Lit 10) ⊞ _) _                = " niikyang "-      (_              ⊞ _) _                = " "+      (Lit n          ⊞ _) _ | n `elem` [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+      addCombine a x (Lit n) y _ | n `elem` [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’"+          [ (1, \c -> case c of+                       CtxAdd {} -> "suk"+                       _         -> "suukya’"             )-          , (2, \c → case c of-                       CtxAdd {} → "löqmuy"-                       _         → "lööyöm"+          , (2, \c -> case c of+                       CtxAdd {} -> "löqmuy"+                       _         -> "lööyöm"             )-          , (3, \c → case c of-                       CtxAdd {} → "paykomuy"-                       CtxMul {} → "payiv"-                       _         → "pàayom"+          , (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"+          , (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"+          , (10, \c -> case c of+                       CtxMul L _ _ -> "palotsikiv"+                       _            -> "pakwt"             )           , (20, const "sunat")           ]
− src/Text/Numeral/Language/IT.hs
@@ -1,272 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        it--[@ISO639-2B@]       ita--[@ISO639-3@]        ita--[@Native name@]     Italiano--[@English name@]    Italian--}--module Text.Numeral.Language.IT-    ( -- * Language entry-      entry-      -- * Conversions-    , cardinal-    , ordinal-      -- * Structure-    , struct-    , rule-      -- * 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      ( 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           "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-----------------------------------------------------------------------------------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 ∷ (G.Masculine i, G.Feminine i, Integral α, E.Scale α)-         ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct--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--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"-      ((_ `Mul` Scale _ _ _) ⊞ _    ) _ = " "-      (_                     ⊞ _    ) _ = ""---      (Lit n ⊡ Lit 10) _ | n ≥ 4 = "an"-      (_     ⊡ Scale _ _ _) _ = " "-      (_     ⊡ _          ) _ = ""--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"-                       _ | 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, 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:-                        CtxMul _ (Lit _) (CtxAdd _ (Lit n) _)-                            | n ∈ [1,8]    → "t"-                        CtxMul R (Lit _) _ → "ta"-                        _                  → "dieci"-            )-          , (20, \c → case c of-                        CtxAdd _ (Lit n) _-                            | n ∈ [1,8]   → "vent"-                        _                 → "venti"-            )-          , ( 100-            , let f c = case c of-                          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-                          CtxMul {} → "mila"-                          _         → "mille"-            )-          ]--      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/ITA.hs view
@@ -0,0 +1,249 @@+{-|+[@ISO639-1@]        it++[@ISO639-2B@]       ita++[@ISO639-3@]        ita++[@Native name@]     Italiano++[@English name@]    Italian+-}++module Text.Numeral.Language.ITA+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+    , ordinal+      -- * Structure+    , struct+    , rule+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum  as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- ITA+--------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++ordinal :: (Integral a) => Inflection -> a -> Maybe Text+ordinal inf = ordinalRepr inf . struct++rule :: (Integral a) => Rule a+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 a) => a -> Exp+struct = pos $ fix $ rule `combine` pelletierScale R L BN.rule++bounds :: (Integral a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++genericRepr :: Repr+genericRepr = defaultRepr+              { reprAdd   = Just (⊞)+              , reprMul   = Just (⊡)+              , reprNeg   = Just $ \_ _ -> "meno "+              }+    where+      (Lit 10                ⊞ Lit 7) _ = "as"+      (Lit 10                ⊞ Lit 9) _ = "an"+      ((_ `Mul` Scale _ _ _) ⊞ _    ) _ = " "+      (_                     ⊞ _    ) _ = ""+++      (Lit n ⊡ Lit 10) _ | n >= 4 = "an"+      (_     ⊡ Scale _ _ _) _     = " "+      (_     ⊡ _          ) _     = ""++cardinalRepr :: Inflection -> Exp -> 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"+                       _ | isFeminine  inf -> "una"+                         | isMasculine inf -> "un"+                         | otherwise       -> "uno"+            )+          , (2, forms "due" "do" "du")+          , (3, \c -> case c of+                       CtxAdd R _        _ -> "tré"+                       CtxMul _ (Lit 10) _ -> "tren"+                       _                   -> "tre"+            )+          , (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:+                        CtxMul _ (Lit _) (CtxAdd _ (Lit n) _)+                            | n `elem` [1,8] -> "t"+                        CtxMul R (Lit _) _   -> "ta"+                        _                    -> "dieci"+            )+          , (20, \c -> case c of+                        CtxAdd _ (Lit n) _+                            | n `elem` [1,8] -> "vent"+                        _                   -> "venti"+            )+          , ( 100+            , let f c = case c of+                          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+                          CtxMul {} -> "mila"+                          _         -> "mille"+            )+          ]++      forms :: s -> s -> s -> Ctx Exp -> s+      forms n a m c = case c of+                        CtxAdd _ (Lit 10) _ -> a+                        CtxMul _ (Lit 10) _ -> m+                        _                   -> n++ordinalRepr :: Inflection -> Exp -> 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+                         | 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 `elem` [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 `elem` [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 -> s+            forms fo1 o1 o2 n a m c =+                case c of+                  CtxEmpty+                    | isFeminine inf  -> fo1+                    | otherwise       -> o1+                  _ | isOutside R c   -> o2+                  CtxAdd _ (Lit 10) _ -> a+                  CtxMul _ (Lit 10) _ -> m+                  _                   -> n++bigNumSyms :: [(Integer, Ctx Exp -> 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
@@ -1,278 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        ja--[@ISO639-2B@]       jpn--[@ISO639-3@]        jpn--[@Native name@]     日本語--[@English name@]    Japanese--}--module Text.Numeral.Language.JA-    ( -- * 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-------------------------------------------------------------------------------------- Imports-----------------------------------------------------------------------------------import "base" Data.Function ( ($), const, fix )-import "base" Data.List     ( map )-import "base" Data.Maybe    ( Maybe(Just) )-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           "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-----------------------------------------------------------------------------------entry ∷ Entry-entry = emptyEntry-    { entIso639_1       = Just "ja"-    , entIso639_2       = ["jpn"]-    , entIso639_3       = Just "jpn"-    , entNativeNames    = ["日本語"]-    , entEnglishName    = Just "Japanese"-    }--struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β) ⇒ α → β-struct = pos-       $ fix-       $ findRule (   0, lit             )-              ( [ (  11, add    10    R  )-                , (  20, mul    10    R L)-                , ( 100, step  100 10 R L)-                , (1000, step 1000 10 R L)-                ]-              ⊕ [ (n, step1 n (dec 4) R L) | n ← map dec [4,8..68] ]-              )-             (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_entry ∷ Entry-kanji_entry = entry-    { entVariant  = Just "kanji"-    , entCardinal = Just Conversion-                    { toNumeral   = kanji_cardinal-                    , toStructure = struct-                    }-    }--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-                      , reprAdd   = Just $ \_ _ _ → ""-                      , reprMul   = Just $ \_ _ _ → ""-                      , reprNeg   = Just $ \_ _   → "マイナス"-                      }-    where-      syms =-          M.fromList-          [ (0, const "零") -- alternatives:"ゼロ" or "マル"-          , (1, const "一")-          , (2, const "二")-          , (3, const "三")-          , (4, const "四")-          , (5, const "五")-          , (6, const "六")-          , (7, const "七")-          , (8, const "八")-          , (9, const "九")-          , (10, const "十")-          , (100, const "百")-          , (dec 3, const "千")-          , (dec 4, const "万")-          , (dec 8, const "億")-          , (dec 12, const "兆")-          , (dec 16, const "京")-          , (dec 20, const "垓")-          , (dec 24, const "𥝱") -- or 秭?-          , (dec 28, const "穣")-          , (dec 32, const "溝")-          , (dec 36, const "澗")-          , (dec 40, const "正")-          , (dec 44, const "載")-          , (dec 48, const "極")-          , (dec 52, const "恒河沙")-          , (dec 56, const "阿僧祇")-          , (dec 60, const "那由他/那由多")-          , (dec 64, const "不可思議")-          , (dec 68, const "無量大数")-          ]-------------------------------------------------------------------------------------- Daiji-----------------------------------------------------------------------------------daiji_entry ∷ Entry-daiji_entry = entry-    { entVariant  = Just "daiji"-    , entCardinal = Just Conversion-                    { toNumeral   = daiji_cardinal-                    , toStructure = struct-                    }-    }--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-                      , reprAdd   = Just $ \_ _ _ → ""-                      , reprMul   = Just $ \_ _ _ → ""-                      , reprNeg   = Just $ \_ _   → "マイナス"-                      }-    where-      syms =-          M.fromList-          [ (0, const "零") -- alternatives:"ゼロ" or "マル"-          , (1, const "壱")-          , (2, const "弐")-          , (3, const "参")-          , (4, const "四")-          , (5, const "五")-          , (6, const "六")-          , (7, const "七")-          , (8, const "八")-          , (9, const "九")-          , (10, const "拾")-          , (100, const "百")-          , (dec 3, const "千")-          , (dec 4, const "万")-          ]-------------------------------------------------------------------------------------- Generic reading-----------------------------------------------------------------------------------generic_repr ∷ Text → Text → Repr i-generic_repr four seven = defaultRepr-                          { reprValue = \_ n → M.lookup n syms-                          , reprAdd   = Just $ \_ _ _ → " "-                          , reprMul   = Just $ \_ _ _ → ""-                          , reprNeg   = Just $ \_ _   → "mainasu "-                          }-    where-      syms =-          M.fromList-          [ (0, const "rei")-          , (1, const "ichi")-          , (2, const "ni")-          , (3, const "san")-          , (4, const four)-          , (5, const "go")-          , (6, const "roku")-          , (7, const seven)-          , (8, const "hachi")-          , (9, const "kyū")-          , (10, const "jū")-          , (100, \c → case c of-                         (CtxMul _ (Lit 3) _) → "byaku" -- rendaku-                         _                    → "hyaku"-            )-          , (dec 3, const "sen")-          , (dec 4, const "man")-          , (dec 8, const "oku")-          , (dec 12, const "chō")-          , (dec 16, const "kei")-          , (dec 20, const "gai")-          , (dec 24, const "jo")-          , (dec 28, const "jō")-          , (dec 32, const "kō")-          , (dec 36, const "kan")-          , (dec 40, const "sei")-          , (dec 44, const "sai")-          , (dec 48, const "goku")-          , (dec 52, const "gōgasha")-          , (dec 56, const "asōgi")-          , (dec 60, const "nayuta")-          , (dec 64, const "fukashigi")-          , (dec 68, const "muryōtaisū")-          ]-------------------------------------------------------------------------------------- On'yomi-----------------------------------------------------------------------------------on'yomi_entry ∷ Entry-on'yomi_entry = entry-    { entVariant  = Just "on'yomi"-    , entCardinal = Just Conversion-                    { toNumeral   = on'yomi_cardinal-                    , toStructure = struct-                    }-    }--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_entry ∷ Entry-preferred_entry = entry-    { entVariant  = Just "preferred"-    , entCardinal = Just Conversion-                    { toNumeral   = preferred_cardinal-                    , toStructure = struct-                    }-    }--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/JPN.hs view
@@ -0,0 +1,267 @@+{-|+[@ISO639-1@]        ja++[@ISO639-2B@]       jpn++[@ISO639-3@]        jpn++[@Native name@]     日本語++[@English name@]    Japanese+-}++module Text.Numeral.Language.JPN+    ( -- * 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+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Monoid ( (<>) )+import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Misc  ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- JPN+--------------------------------------------------------------------------------++entry :: Entry+entry = emptyEntry+    { entIso639_1       = Just "ja"+    , entIso639_2       = ["jpn"]+    , entIso639_3       = Just "jpn"+    , entNativeNames    = ["日本語"]+    , entEnglishName    = Just "Japanese"+    }++struct :: (Integral a) => a -> Exp+struct = pos+       $ fix+       $ findRule (   0, lit             )+              ( [ (  11, add    10    R  )+                , (  20, mul    10    R L)+                , ( 100, step  100 10 R L)+                , (1000, step 1000 10 R L)+                ]+              <> [ (n, step1 n (dec 4) R L) | n <- map dec [4,8..68] ]+              )+             (dec 72 - 1)++bounds :: (Integral a) => (a, a)+bounds = let x = dec 72 - 1 in (negate x, x)++daiji_bounds :: (Integral a) => (a, a)+daiji_bounds = let x = dec 4 - 1 in (negate x, x)+++--------------------------------------------------------------------------------+-- Kanji+--------------------------------------------------------------------------------++kanji_entry :: Entry+kanji_entry = entry+    { entVariant  = Just "kanji"+    , entCardinal = Just Conversion+                    { toNumeral   = kanji_cardinal+                    , toStructure = struct+                    }+    }++kanji_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+kanji_cardinal inf = kanji_cardinal_repr inf . struct++kanji_cardinal_repr :: Inflection -> Exp -> Maybe Text+kanji_cardinal_repr = render defaultRepr+                      { reprValue = \_ n -> M.lookup n syms+                      , reprAdd   = Just $ \_ _ _ -> ""+                      , reprMul   = Just $ \_ _ _ -> ""+                      , reprNeg   = Just $ \_ _   -> "マイナス"+                      }+    where+      syms =+          M.fromList+          [ (0, const "零") -- alternatives:"ゼロ" or "マル"+          , (1, const "一")+          , (2, const "二")+          , (3, const "三")+          , (4, const "四")+          , (5, const "五")+          , (6, const "六")+          , (7, const "七")+          , (8, const "八")+          , (9, const "九")+          , (10, const "十")+          , (100, const "百")+          , (dec 3, const "千")+          , (dec 4, const "万")+          , (dec 8, const "億")+          , (dec 12, const "兆")+          , (dec 16, const "京")+          , (dec 20, const "垓")+          , (dec 24, const "𥝱") -- or 秭?+          , (dec 28, const "穣")+          , (dec 32, const "溝")+          , (dec 36, const "澗")+          , (dec 40, const "正")+          , (dec 44, const "載")+          , (dec 48, const "極")+          , (dec 52, const "恒河沙")+          , (dec 56, const "阿僧祇")+          , (dec 60, const "那由他/那由多")+          , (dec 64, const "不可思議")+          , (dec 68, const "無量大数")+          ]+++--------------------------------------------------------------------------------+-- Daiji+--------------------------------------------------------------------------------++daiji_entry :: Entry+daiji_entry = entry+    { entVariant  = Just "daiji"+    , entCardinal = Just Conversion+                    { toNumeral   = daiji_cardinal+                    , toStructure = struct+                    }+    }++daiji_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+daiji_cardinal inf = daiji_cardinal_repr inf . struct++daiji_cardinal_repr :: Inflection -> Exp -> Maybe Text+daiji_cardinal_repr = render defaultRepr+                      { reprValue = \_ n -> M.lookup n syms+                      , reprAdd   = Just $ \_ _ _ -> ""+                      , reprMul   = Just $ \_ _ _ -> ""+                      , reprNeg   = Just $ \_ _   -> "マイナス"+                      }+    where+      syms =+          M.fromList+          [ (0, const "零") -- alternatives:"ゼロ" or "マル"+          , (1, const "壱")+          , (2, const "弐")+          , (3, const "参")+          , (4, const "四")+          , (5, const "五")+          , (6, const "六")+          , (7, const "七")+          , (8, const "八")+          , (9, const "九")+          , (10, const "拾")+          , (100, const "百")+          , (dec 3, const "千")+          , (dec 4, const "万")+          ]+++--------------------------------------------------------------------------------+-- Generic reading+--------------------------------------------------------------------------------++generic_repr :: Text -> Text -> Repr+generic_repr four seven = defaultRepr+                          { reprValue = \_ n -> M.lookup n syms+                          , reprAdd   = Just $ \_ _ _ -> " "+                          , reprMul   = Just $ \_ _ _ -> ""+                          , reprNeg   = Just $ \_ _   -> "mainasu "+                          }+    where+      syms =+          M.fromList+          [ (0, const "rei")+          , (1, const "ichi")+          , (2, const "ni")+          , (3, const "san")+          , (4, const four)+          , (5, const "go")+          , (6, const "roku")+          , (7, const seven)+          , (8, const "hachi")+          , (9, const "kyū")+          , (10, const "jū")+          , (100, \c -> case c of+                         (CtxMul _ (Lit 3) _) -> "byaku" -- rendaku+                         _                    -> "hyaku"+            )+          , (dec 3, const "sen")+          , (dec 4, const "man")+          , (dec 8, const "oku")+          , (dec 12, const "chō")+          , (dec 16, const "kei")+          , (dec 20, const "gai")+          , (dec 24, const "jo")+          , (dec 28, const "jō")+          , (dec 32, const "kō")+          , (dec 36, const "kan")+          , (dec 40, const "sei")+          , (dec 44, const "sai")+          , (dec 48, const "goku")+          , (dec 52, const "gōgasha")+          , (dec 56, const "asōgi")+          , (dec 60, const "nayuta")+          , (dec 64, const "fukashigi")+          , (dec 68, const "muryōtaisū")+          ]+++--------------------------------------------------------------------------------+-- On'yomi+--------------------------------------------------------------------------------++on'yomi_entry :: Entry+on'yomi_entry = entry+    { entVariant  = Just "on'yomi"+    , entCardinal = Just Conversion+                    { toNumeral   = on'yomi_cardinal+                    , toStructure = struct+                    }+    }++on'yomi_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+on'yomi_cardinal inf = on'yomi_cardinal_repr inf . struct++on'yomi_cardinal_repr :: Inflection -> Exp -> Maybe Text+on'yomi_cardinal_repr = render (generic_repr "shi" "shichi")+++--------------------------------------------------------------------------------+-- Preferred reading+--------------------------------------------------------------------------------++preferred_entry :: Entry+preferred_entry = entry+    { entVariant  = Just "preferred"+    , entCardinal = Just Conversion+                    { toNumeral   = preferred_cardinal+                    , toStructure = struct+                    }+    }++preferred_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+preferred_cardinal inf = preferred_cardinal_repr inf . struct++preferred_cardinal_repr :: Inflection -> Exp -> Maybe Text+preferred_cardinal_repr = render (generic_repr "yon" "nana")
− src/Text/Numeral/Language/LA.hs
@@ -1,174 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        la--[@ISO639-2B@]       lat--[@ISO639-3@]        lat--[@Native name@]     Latine--[@English name@]    Latin--}--module Text.Numeral.Language.LA-    ( -- * 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.List     ( concat )-import "base" Data.Maybe    ( Maybe(Just) )-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           "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-----------------------------------------------------------------------------------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 ∷ (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-       $ findRule ( 0, lit)-                  ( [ (11, add 10 L)-                    , (18, sub 20)-                    ]-                  ⊕ concat [ [ (n,   mul 10 R L)-                             , (n+8, sub $ n+10)-                             ]-                           | n ← [20,30..90]-                           ]-                  ⊕ [ ( 100, step 100 10 R L)-                    , (1000, lit)-                    ]-                  )-                  1000--bounds ∷ (Integral α) ⇒ (α, α)-bounds = (0, 1000)--cardinalRepr ∷ i → Exp i → Maybe Text-cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms-               , reprAdd   = Just (⊞)-               , reprMul   = Just (⊡)-               , reprSub   = Just $ \_ _ _ → "dē"-               , reprNeg   = Just $ \_ _   → "minus "-               }-    where-      ((_ `Mul` Lit _) ⊞ _) _ = " "-      (_               ⊞ _) _ = ""--      (_ ⊡ Lit n) _ | n ≤ 100 = ""-      (_ ⊡ _    ) _           = " "--      syms =-          M.fromList-          [ (0, const "nihil")-          , (1, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "ūn"-                       CtxSub _ _         _ → "ūn"-                       _                    → "ūnus"-            )-          , (2, \c → case c of-                       CtxMul _ (Lit 10)  _ → "vī"-                       CtxMul _ (Lit 100) _ → "du"-                       _                    → "duo"-            )-          , (3, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "trē"-                       CtxMul _ (Lit 10)  _ → "trī"-                       CtxMul _ (Lit 100) _ → "tre"-                       _                    → "trēs"-            )-          , (4, \c → case c of-                       CtxMul _ (Lit 10)  _ → "quadrā"-                       CtxMul _ (Lit 100) _ → "quadrin"-                       _                    → "quattuor"-            )-          , (5, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "quīn"-                       CtxMul _ (Lit 10)  _ → "quīnquā"-                       CtxMul _ (Lit 100) _ → "quīn"-                       _                    → "quīnque"-            )-          , (6, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "sē"-                       CtxMul _ (Lit 10)  _ → "sexā"-                       CtxMul _ (Lit 100) _ → "ses"-                       _                    → "sex"-            )-          , (7, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "septen"-                       CtxMul _ (Lit 10)  _ → "septuā"-                       CtxMul _ (Lit 100) _ → "septin"-                       _                    → "septem"-            )-          , (8, \c → case c of-                       CtxMul _ (Lit 100) _ → "octin"-                       _                    → "octō"-            )-          , (9, \c → case c of-                       CtxMul _ (Lit 10)  _ → "nōnā"-                       CtxMul _ (Lit 100) _ → "nōn"-                       _                    → "novem"-            )-          , (10, \c → case c of-                        CtxAdd {}           → "decim"-                        CtxMul _ (Lit 2)  _ → "gintī"-                        CtxMul {}           → "gintā"-                        _                   → "decem"-            )-          , (100, \c → case c of-                         CtxMul _ (Lit n) _-                             | n ∈ [2,3,6] → "centī"-                             | otherwise   → "gentī"-                         _                 → "centum"-            )-          , (1000, \c → case c of-                          CtxMul {} → "milia"-                          _         → "mīlle"-            )-          ]
+ src/Text/Numeral/Language/LAT.hs view
@@ -0,0 +1,160 @@+{-|+[@ISO639-1@]        la++[@ISO639-2B@]       lat++[@ISO639-3@]        lat++[@Native name@]     Latine++[@English name@]    Latin+-}++module Text.Numeral.Language.LAT+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Monoid ( (<>) )+import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- LA+--------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = checkPos+       $ fix+       $ findRule ( 0, lit)+                  ( [ (11, add 10 L)+                    , (18, sub 20)+                    ]+                  <> concat [ [ (n,   mul 10 R L)+                              , (n+8, sub $ n+10)+                              ]+                            | n <- [20,30..90]+                            ]+                  <> [ ( 100, step 100 10 R L)+                     , (1000, lit)+                     ]+                  )+                  1000++bounds :: (Integral a) => (a, a)+bounds = (0, 1000)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just (⊞)+               , reprMul   = Just (⊡)+               , reprSub   = Just $ \_ _ _ -> "dē"+               , reprNeg   = Just $ \_ _   -> "minus "+               }+    where+      ((_ `Mul` Lit _) ⊞ _) _ = " "+      (_               ⊞ _) _ = ""++      (_ ⊡ Lit n) _ | n <= 100 = ""+      (_ ⊡ _    ) _            = " "++      syms =+          M.fromList+          [ (0, const "nihil")+          , (1, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "ūn"+                       CtxSub _ _         _ -> "ūn"+                       _                    -> "ūnus"+            )+          , (2, \c -> case c of+                       CtxMul _ (Lit 10)  _ -> "vī"+                       CtxMul _ (Lit 100) _ -> "du"+                       _                    -> "duo"+            )+          , (3, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "trē"+                       CtxMul _ (Lit 10)  _ -> "trī"+                       CtxMul _ (Lit 100) _ -> "tre"+                       _                    -> "trēs"+            )+          , (4, \c -> case c of+                       CtxMul _ (Lit 10)  _ -> "quadrā"+                       CtxMul _ (Lit 100) _ -> "quadrin"+                       _                    -> "quattuor"+            )+          , (5, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "quīn"+                       CtxMul _ (Lit 10)  _ -> "quīnquā"+                       CtxMul _ (Lit 100) _ -> "quīn"+                       _                    -> "quīnque"+            )+          , (6, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "sē"+                       CtxMul _ (Lit 10)  _ -> "sexā"+                       CtxMul _ (Lit 100) _ -> "ses"+                       _                    -> "sex"+            )+          , (7, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "septen"+                       CtxMul _ (Lit 10)  _ -> "septuā"+                       CtxMul _ (Lit 100) _ -> "septin"+                       _                    -> "septem"+            )+          , (8, \c -> case c of+                       CtxMul _ (Lit 100) _ -> "octin"+                       _                    -> "octō"+            )+          , (9, \c -> case c of+                       CtxMul _ (Lit 10)  _ -> "nōnā"+                       CtxMul _ (Lit 100) _ -> "nōn"+                       _                    -> "novem"+            )+          , (10, \c -> case c of+                        CtxAdd {}           -> "decim"+                        CtxMul _ (Lit 2)  _ -> "gintī"+                        CtxMul {}           -> "gintā"+                        _                   -> "decem"+            )+          , (100, \c -> case c of+                         CtxMul _ (Lit n) _+                             | n `elem` [2,3,6] -> "centī"+                             | otherwise        -> "gentī"+                         _                      -> "centum"+            )+          , (1000, \c -> case c of+                          CtxMul {} -> "milia"+                          _         -> "mīlle"+            )+          ]
src/Text/Numeral/Language/LLD.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,19 +26,9 @@ -- 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 qualified "containers" Data.Map as M 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 )@@ -55,7 +40,7 @@ -- LLD -------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_3    = Just "lld"     , entNativeNames = ["Ladin"]@@ -66,16 +51,15 @@                        }     } -cardinal ∷ (G.Masculine i, G.Feminine i, Integral α, E.Scale α)-         ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = let x = dec 12 - 1 in (negate x, x) -cardinalRepr ∷ (G.Feminine i, G.Masculine i) ⇒ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \inf n → M.lookup n (syms inf)+               { reprValue = \inf n -> M.lookup n (syms inf)                , reprAdd   = Just (⊞)                , reprMul   = Just (⊡)                , reprScale = BN.pelletierRepr@@ -84,8 +68,8 @@                                []                }     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 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"@@ -98,14 +82,14 @@           M.fromList           [ (0, const "zero")           , (1, addCtx 10 "un"-                $ \c → case c of-                         _ | G.isFeminine inf → "una"-                           | otherwise        → "un"+                $ \c -> case c of+                         _ | isFeminine inf -> "una"+                           | otherwise      -> "un"             )           , (2, addCtx 10 "do"-                $ \c → case c of-                         _ | G.isFeminine inf → "does"-                           | otherwise        → "doi"+                $ \c -> case c of+                         _ | isFeminine inf -> "does"+                           | otherwise      -> "doi"             )           , (3, addCtx 10 "tre"   $ mulCtx 10 "tr"   $ const "trei")           , (4, addCtx 10 "cator" $ mulCtx 10 "car"  $ const "cater")@@ -114,16 +98,16 @@           , (7, const "set")           , (8, addCtx 10 "dot" $ const "ot")           , (9, mulCtx 10 "non" $ const "nuef")-          , (10, \c → case c of+          , (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"+                            | 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")
− src/Text/Numeral/Language/MG.hs
@@ -1,126 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        mg--[@ISO639-2@]        mlg--[@ISO639-3@]        mlg--[@Native name@]     ---[@English name@]    Malagasy--}--module Text.Numeral.Language.MG-    ( -- * Language entry-      entry-      -- * Conversions-    , cardinal-      -- * Structure-    , struct-      -- * Bounds-    , bounds-    ) where------------------------------------------------------------------------------------- Imports----------------------------------------------------------------------------------import "base" Data.Function ( ($), const, fix )-import "base" Data.List     ( map )-import "base" Data.Maybe    ( Maybe(Just) )-import "base" Data.Ord      ( (<) )-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.Misc ( dec )-import "this" Text.Numeral.Entry-import "text" Data.Text ( Text )------------------------------------------------------------------------------------- MG----------------------------------------------------------------------------------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 ∷ (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)-                  [(n, step n 10 L L) | n ← map dec [1..6]]-                  (dec 7 - 1)--bounds ∷ (Integral α) ⇒ (α, α)-bounds = (0, dec 7 - 1)--cardinalRepr ∷ i → Exp i → Maybe Text-cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms-               , reprAdd   = Just (⊞)-               , reprMul   = Just (⊡)-               }-    where-      (_ ⊞              Lit 10 ) _ = " ambin'ny "-      (_ ⊞ (Lit _ `Mul` Lit 10)) _ = " amby "-      (_ ⊞ _                   ) _ = " sy "--      (_ ⊡ Lit 10 ) _ = ""-      (_ ⊡ Lit 100) _ = ""-      (_ ⊡ _      ) _ = " "--      syms =-          M.fromList-          [ (0, const "haotra")-          , (1, \c → case c of-                       CtxAdd {} → "iraika"-                       _         → "iray"-            )-          , (2, mulForms "roa"    "roa"   "roan")-          , (3, mulForms "telo"   "telo"  "telon")-          , (4, mulForms "efatra" "efa"   "efa"  )-          , (5, mulForms "dimy"   "dimam" "diman")-          , (6, mulForms "enina"  "enim"  "enin" )-          , (7, mulForms "fito"   "fito"  "fiton")-          , (8, mulForms "valo"   "valo"  "valon")-          , (9, mulForms "sivy"   "sivi"  "sivin")-          , (10, \c → case c of-                        CtxMul _ (Lit n) _-                            | n < 9 → "polo"-                        _           → "folo"-            )-          , (100, \c → case c of-                         CtxMul {} → "jato"-                         _         → "zato"-            )-          , (1000, const "arivo")-          , (dec 4, const "alina")-          , (dec 5, const "hetsy")-          , (dec 6, const "tapitrisa")-          ]--      mulForms o t h = \c → case c of-                              CtxMul _ (Lit 10)  _ → t-                              CtxMul _ (Lit 100) _ → h-                              _                    → o
+ src/Text/Numeral/Language/MLG.hs view
@@ -0,0 +1,114 @@+{-|+[@ISO639-1@]        mg++[@ISO639-2@]        mlg++[@ISO639-3@]        mlg++[@Native name@]     -++[@English name@]    Malagasy+-}++module Text.Numeral.Language.MLG+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- MLG+-------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = checkPos+       $ fix+       $ findRule (0, lit)+                  [(n, step n 10 L L) | n <- map dec [1..6]]+                  (dec 7 - 1)++bounds :: (Integral a) => (a, a)+bounds = (0, dec 7 - 1)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just (⊞)+               , reprMul   = Just (⊡)+               }+    where+      (_ ⊞              Lit 10 ) _ = " ambin'ny "+      (_ ⊞ (Lit _ `Mul` Lit 10)) _ = " amby "+      (_ ⊞ _                   ) _ = " sy "++      (_ ⊡ Lit 10 ) _ = ""+      (_ ⊡ Lit 100) _ = ""+      (_ ⊡ _      ) _ = " "++      syms =+          M.fromList+          [ (0, const "haotra")+          , (1, \c -> case c of+                       CtxAdd {} -> "iraika"+                       _         -> "iray"+            )+          , (2, mulForms "roa"    "roa"   "roan")+          , (3, mulForms "telo"   "telo"  "telon")+          , (4, mulForms "efatra" "efa"   "efa"  )+          , (5, mulForms "dimy"   "dimam" "diman")+          , (6, mulForms "enina"  "enim"  "enin" )+          , (7, mulForms "fito"   "fito"  "fiton")+          , (8, mulForms "valo"   "valo"  "valon")+          , (9, mulForms "sivy"   "sivi"  "sivin")+          , (10, \c -> case c of+                        CtxMul _ (Lit n) _+                            | n < 9 -> "polo"+                        _           -> "folo"+            )+          , (100, \c -> case c of+                         CtxMul {} -> "jato"+                         _         -> "zato"+            )+          , (1000, const "arivo")+          , (dec 4, const "alina")+          , (dec 5, const "hetsy")+          , (dec 6, const "tapitrisa")+          ]++      mulForms o t h = \c -> case c of+                              CtxMul _ (Lit 10)  _ -> t+                              CtxMul _ (Lit 100) _ -> h+                              _                    -> o
+ src/Text/Numeral/Language/NEN.hs view
@@ -0,0 +1,95 @@+{-|+[@ISO639-1@]        -++[@ISO639-2@]        -++[@ISO639-3@]        nen++[@Native name@]     -++[@English name@]    Nengone+-}+module Text.Numeral.Language.NEN+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- NEN+-------------------------------------------------------------------------------++entry :: Entry+entry = emptyEntry+    { entIso639_3    = Just "nen"+    , entEnglishName = Just "Nengone"+    , entCardinal    = Just Conversion+                       { toNumeral   = cardinal+                       , toStructure = struct+                       }+    }++cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = checkPos+       $ fix+       $ findRule ( 0, lit     )+                [ ( 6, add  5 R)+                , (10, lit     )+                , (11, add 10 R)+                , (15, lit     )+                , (16, add 15 R)+                , (20, lit     )+                , (21, add 20 R)+                ]+                   30++bounds :: (Integral a) => (a, a)+bounds = (0, 30)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just (⊞)+               }+    where+      (Lit 5 ⊞ _) (CtxAdd _ (Lit 20) _) = ""+      (_ ⊞ _) _ = " ne "++      syms =+          M.fromList+          [ (1, const "sa")+          , (2, forms "rewe" "rew")+          , (3, forms "tini" "tin")+          , (4, forms "ece"  "ec")+          , (5, \c -> case c of+                       CtxAdd _ _ (CtxAdd _ (Lit 20) _) -> "sedo"+                       _ -> "sedong"+            )+          , (10, const "ruenin")+          , (15, const "adenin")+          , (20, const "sarengom")+          ]+        where+          forms :: s -> s -> Ctx Exp -> s+          forms _ a (CtxAdd _ _ _) = a+          forms n _ _              = n
− src/Text/Numeral/Language/NL.hs
@@ -1,268 +0,0 @@-{-# 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-    ( -- * Language entry-      entry-      -- * Conversions-    , cardinal-    , ordinal-    , partitive-    , multiplicative-      -- * Structure-    , struct-      -- * Bounds-    , bounds-    ) where-------------------------------------------------------------------------------------- Imports-----------------------------------------------------------------------------------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.Ord      ( (<) )-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           "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-----------------------------------------------------------------------------------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-                          }-    }--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-       $ 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 $ \_ _   → "min "-               }-    where-      (_     ⊞ Lit 10) _         = ""-      (Lit n ⊞ _) _ | n ∈ [2,3]  = "ën"-                    | n < 10     = "en"-                    | otherwise  = ""-      (_     ⊞ _) _              = ""--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, 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, forms "negende" "negen" "negen")-          , (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 "honderdste" else "honderd")-          , (1000, \c → if isOutside R c then "duizendste" else "duizend")-          ]--      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/NLD.hs view
@@ -0,0 +1,240 @@+{-|+[@ISO639-1@]        nl++[@ISO639-2B@]       dut++[@ISO639-3@]        nld++[@Native name@]     Nederlands++[@English name@]    Dutch+-}++module Text.Numeral.Language.NLD+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+    , ordinal+    , partitive+    , multiplicative+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import "base" Data.Monoid ( (<>) )+import qualified "containers" Data.Map as M+import           "this" Text.Numeral hiding ( partitive, multiplicative )+import qualified "this" Text.Numeral.BigNum  as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- NLD+--------------------------------------------------------------------------------++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) -> Frac (struct n) (struct d)+                          }+    , entMultiplicative = Just Conversion+                          { toNumeral   = multiplicative+                          , toStructure = struct+                          }+    }++cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++ordinal :: (Integral a) => Inflection -> a -> Maybe Text+ordinal inf = ordinalRepr "eerste" inf . struct++partitive :: (Integral a) => Inflection -> (a, a) -> Maybe Text+partitive inf (n, d) = do+  n' <- cardinal inf {iCase = Nothing, iNumber = Just Singular} n+  d' <- ordinalRepr "éénde" inf $ struct d+  pure $ n' <> " " <> d'++multiplicative :: (Integral a) => Inflection -> a -> Maybe Text+multiplicative inf = fmap (<> "maal") . cardinal (noCase $ singular inf)++struct :: (Integral a) => a -> Exp+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 a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++genericRepr :: Repr+genericRepr = defaultRepr+               { reprAdd   = Just (⊞)+               , reprMul   = Just $ \_ _ _ -> ""+               , reprNeg   = Just $ \_ _   -> "min "+               }+    where+      (_     ⊞ Lit 10) _ = ""+      (Lit n ⊞ _) _ | n `elem` [2,3]  = "ën"+                    | n < 10     = "en"+                    | otherwise  = ""+      (_     ⊞ _) _             = ""++cardinalRepr :: Inflection -> Exp -> 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 :: Inflection -> Ctx Exp -> Bool+      doPlural inf ctx = (isPlural inf || isDative inf) && isOutside R ctx++      syms inf =+          M.fromList+          [ (0, const "nul")+          , (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 -> s+            pluralDative  o p d ctx+                | pluralForm ctx = p+                | dativeForm ctx = d+                | otherwise      = o++            dativeForm :: Ctx Exp -> Bool+            dativeForm ctx = isDative inf && isOutside R ctx++            pluralForm :: Ctx Exp -> Bool+            pluralForm ctx = isPlural inf && isOutside R ctx++            forms :: s -- ^ Normal form.+                  -> s -- ^ Added to, or multiplied with ten.+                  -> s -- ^ Plural form.+                  -> s -- ^ Dative form.+                  -> Ctx Exp+                  -> 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 -> Inflection -> Exp -> 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, forms "negende" "negen" "negen")+          , (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 "honderdste" else "honderd")+          , (1000, \c -> if isOutside R c then "duizendste" else "duizend")+          ]++      forms :: s -- ^ Ordinal form.+            -> s -- ^ Cardinal form.+            -> s -- ^ Added to, or multiplied with, ten.+            -> Ctx Exp+            -> 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
@@ -1,136 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# 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-    ( -- * 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 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 )------------------------------------------------------------------------------------- NO----------------------------------------------------------------------------------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 ∷ (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, 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)-         `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.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,  \c → case c of-                        CtxEmpty → "én"-                        _        → "en"-            )-          , (2,  const "to")-          , (3,  tenForms   "tre"  "tret" "tret")-          , (4,  tenForms   "fire" "fjor" "før")-          , (5,  const "fem")-          , (6,  const "seks")-          , (7,  tenForms   "sju"  "syt"  "syt")-          , (8,  tenForms   "åtte" "at"   "åt")-          , (9,  tenForms   "ni"   "nit"  "nit")-          , (10, \c → case c of-                        CtxAdd {} → "ten"-                        _         → "ti"-            )-          , (11, const "elleve")-          , (12, const "tolv")-          , (20, const "tjue")-          , (100, const "hundre")-          , (1000, const "tusen")-          ]--      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/NOB.hs view
@@ -0,0 +1,123 @@+{-|+[@ISO639-1@]        nb++[@ISO639-2B@]       nob++[@ISO639-3@]        nob++[@Native name@]     Bokmål++[@English name@]    Norwegian Bokmål+-}++module Text.Numeral.Language.NOB+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- NOB+-------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+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)+                , (1000, step 1000 1000 R L)+                ]+                  (dec 6 - 1)+         `combine` pelletierScale R L BN.rule++bounds :: (Integral a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { 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,  \c -> case c of+                        CtxEmpty -> "én"+                        _        -> "en"+            )+          , (2,  const "to")+          , (3,  tenForms   "tre"  "tret" "tret")+          , (4,  tenForms   "fire" "fjor" "før")+          , (5,  const "fem")+          , (6,  const "seks")+          , (7,  tenForms   "sju"  "syt"  "syt")+          , (8,  tenForms   "åtte" "at"   "åt")+          , (9,  tenForms   "ni"   "nit"  "nit")+          , (10, \c -> case c of+                        CtxAdd {} -> "ten"+                        _         -> "ti"+            )+          , (11, const "elleve")+          , (12, const "tolv")+          , (20, const "tjue")+          , (100, const "hundre")+          , (1000, const "tusen")+          ]++      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,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,14 +26,9 @@ -- 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 "base" Data.Function ( fix ) 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 import "this" Text.Numeral.Entry import "text" Data.Text ( Text ) @@ -47,7 +37,7 @@ -- NQM -------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_3    = Just "nqm"     , entEnglishName = Just "Ndom"@@ -57,10 +47,10 @@                        }     } -cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β+struct :: (Integral a) => a -> Exp struct = checkPos        $ fix        $ findRule (  1, lit       )@@ -74,13 +64,13 @@                 ]                    107 -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = (1, 107) -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms-               , reprAdd   = Just $ \_ _ _ → " abo "+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just $ \_ _ _ -> " abo "                , reprMul   = Just (⊡)                }     where
− src/Text/Numeral/Language/OJ.hs
@@ -1,114 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        oj--[@ISO639-2@]        oji--[@ISO639-3@]        oji--[@Native name@]     ᐊᓂᔑᓈᐯᒧᐎᓐ (Anishinaabemowin)--[@English name@]    Ojibwe--}--module Text.Numeral.Language.OJ-    ( -- * 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 )-------------------------------------------------------------------------------------- OJ-----------------------------------------------------------------------------------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 ∷ (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             )-                [ (  11, step   10 10 R L)-                , ( 100, step  100 10 R L)-                , (1000, step 1000  2 R L)-                ]-                   1999--bounds ∷ (Integral α) ⇒ (α, α)-bounds = (1, 1999)--cardinalRepr ∷ i → Exp i → Maybe Text-cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms-               , reprAdd   = Just $ \_ _ _ → " shaa "-               , reprMul   = Just $ \_ _ _ → ""-               }-    where-      syms =-          M.fromList-          [ (0, const "kaagego"                              )-          , (1, const "bezhik"                               )-          , (2, const "niizh"                                )-          , (3, forms "nswi"        "nsim"        "ns"       )-          , (4, forms "niiwin"      "niim"        "nii"      )-          , (5, forms "naanan"      "naanmi"      "naan"     )-          , (6, forms "ngodwaaswi"  "ngodwaasmi"  "ngodwaas" )-          , (7, forms "niizhwaaswi" "niizhwaasmi" "niizhwaas")-          , (8, forms "nshwaaswi"   "nshwaasmi"   "nshwaas"  )-          , (9, forms "zhaangswi"   "zhaangsmi"   "zhaangs"  )-          , (10, \c → case c of-                        CtxMul {} → "taana"-                        _         → "mdaaswi"-            )-          , (100, \c → case c of-                         CtxMul {} → "waak"-                         _         → "ngodwaak"-            )-          , (1000, const "mdaaswaak")-          ]--      forms ∷ s → s → s → Ctx (Exp i) → s-      forms o t h = \c → case c of-                           CtxMul _ (Lit 10)  _ → t-                           CtxMul _ (Lit 100) _ → h-                           _                    → o
+ src/Text/Numeral/Language/OJI.hs view
@@ -0,0 +1,103 @@+{-|+[@ISO639-1@]        oj++[@ISO639-2@]        oji++[@ISO639-3@]        oji++[@Native name@]     ᐊᓂᔑᓈᐯᒧᐎᓐ (Anishinaabemowin)++[@English name@]    Ojibwe+-}++module Text.Numeral.Language.OJI+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- OJ+--------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = checkPos+       $ fix+       $ findRule (   1, lit             )+                [ (  11, step   10 10 R L)+                , ( 100, step  100 10 R L)+                , (1000, step 1000  2 R L)+                ]+                   1999++bounds :: (Integral a) => (a, a)+bounds = (1, 1999)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just $ \_ _ _ -> " shaa "+               , reprMul   = Just $ \_ _ _ -> ""+               }+    where+      syms =+          M.fromList+          [ (0, const "kaagego"                              )+          , (1, const "bezhik"                               )+          , (2, const "niizh"                                )+          , (3, forms "nswi"        "nsim"        "ns"       )+          , (4, forms "niiwin"      "niim"        "nii"      )+          , (5, forms "naanan"      "naanmi"      "naan"     )+          , (6, forms "ngodwaaswi"  "ngodwaasmi"  "ngodwaas" )+          , (7, forms "niizhwaaswi" "niizhwaasmi" "niizhwaas")+          , (8, forms "nshwaaswi"   "nshwaasmi"   "nshwaas"  )+          , (9, forms "zhaangswi"   "zhaangsmi"   "zhaangs"  )+          , (10, \c -> case c of+                        CtxMul {} -> "taana"+                        _         -> "mdaaswi"+            )+          , (100, \c -> case c of+                         CtxMul {} -> "waak"+                         _         -> "ngodwaak"+            )+          , (1000, const "mdaaswaak")+          ]++      forms :: s -> s -> s -> Ctx Exp -> s+      forms o t h = \c -> case c of+                           CtxMul _ (Lit 10)  _ -> t+                           CtxMul _ (Lit 100) _ -> h+                           _                    -> o
src/Text/Numeral/Language/PDC.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,17 +26,10 @@ -- 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 "base" Data.Function ( fix )+import qualified "containers" Data.Map as M 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 )@@ -51,7 +39,7 @@ -- PDC ------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_1    = Nothing     , entIso639_2    = []@@ -65,13 +53,10 @@     , entOrdinal     = Nothing     } -cardinal ∷ (Inflection i, Integral α, E.Scale α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -struct ∷ ( Integral α, E.Scale α-         , E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β, E.Scale β-         )-       ⇒ α → β+struct :: (Integral a) => a -> Exp struct = pos        $ fix        $ findRule (   0, lit       )@@ -83,18 +68,18 @@                   (dec 6 - 1)          `combine` pelletierScale1 R L BN.rule -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = (0, dec 9 - 1) -genericRepr ∷ Repr i+genericRepr :: Repr genericRepr = defaultRepr               { reprAdd   = Just (⊞)               , reprMul   = Just (⊡)-              , reprNeg   = Just $ \_ _ → "minus "+              , reprNeg   = Just $ \_ _ -> "minus "               }     where-      (Lit n ⊞ (_ `Mul` Lit 10)) _ | n ≤ 9 = "un"-      ((Lit _ `Mul` Lit 100) ⊞ Lit _ ) _ = " un "+      (Lit n ⊞ (_ `Mul` Lit 10)) _ | n <= 9 = "un"+      ((Lit _ `Mul` Lit 100) ⊞ Lit _ ) _    = " un "       (_ ⊞ Lit 10) _ = ""       (_ ⊞ _     ) _ = " " @@ -102,9 +87,9 @@       (_ ⊡ _)      _ = " "  -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render genericRepr-               { reprValue = \_ n → M.lookup n syms+               { reprValue = \_ n -> M.lookup n syms                , reprScale = BN.pelletierRepr (BN.quantityName "illyon"  "illyon")                                               (BN.quantityName "illyard" "illyard")                                               []@@ -113,44 +98,43 @@       syms =           M.fromList           [ (0, const "null")-          , (1, \c → case c of-                       CtxAdd L _ _  → "een"-                       CtxMul _ _ _  → "en"-                       _             → "eens"+          , (1, \c -> case c of+                       CtxAdd L _ _  -> "een"+                       CtxMul _ _ _  -> "en"+                       _             -> "eens"             )-          , (2, \c → case c of-                       CtxMul _ (Lit 10) _ → "zwan"-                       _                   → "zwee"+          , (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"+          , (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"+          , (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"+          , (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"+          , (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
@@ -1,165 +0,0 @@-{-# 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/POL.hs view
@@ -0,0 +1,151 @@+{-|+[@ISO639-1@]        pl++[@ISO639-2@]        pol++[@ISO639-3@]        pol++[@Native name@]     język polski++[@English name@]    Polish+-}++module Text.Numeral.Language.POL+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )++-------------------------------------------------------------------------------+-- POL+-------------------------------------------------------------------------------++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 :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+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 a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> 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+      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/POR.hs view
@@ -0,0 +1,278 @@+{-|+[@ISO639-1@]        pt++[@ISO639-2@]        por++[@ISO639-3@]        por++[@Native name@]     Português++[@English name@]    Portuguese+-}++module Text.Numeral.Language.POR+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+    , ordinal+      -- * Structure+    , cardinal_struct+    , ordinal_struct+      -- * Bounds+    , bounds+    ) where++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import "base" Data.Monoid ( (<>) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum  as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- POR+-------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . cardinal_struct++ordinal :: (Integral a) => Inflection -> a -> Maybe Text+ordinal inf = ordinalRepr inf . ordinal_struct++cardinal_struct :: (Integral a) => a -> Exp+cardinal_struct = pos $ fix $ rule `combine` shortScale1_pt+    where+      rule = findRule (   0, lit       )+                    [ (  11, add 10 L  )+                    , (  16, add 10 R  )+                    , (  20, mul 10 R L)+                    , ( 100, step  100   10 R L)+                    , (1000, step 1000 1000 R L)+                    ]+                      (dec 6 - 1)++ordinal_struct :: (Integral a) => a -> Exp+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 a) => Rule a+shortScale1_pt = mulScale1_es 3 3 R L BN.rule+    where+      mulScale1_es = mulScale_ $ \f m s _ -> masculineMul (f m) s+      masculineMul x y = ChangeGender (Just Masculine) $ Mul x y++bounds :: (Integral a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \inf n -> M.lookup n (syms inf)+               , reprScale = shortScaleRepr+               , reprAdd   = Just (⊞)+               , reprMul   = Just (⊡)+               , reprNeg   = Just $ \_ _ -> "menos "+               }+    where+      (Lit 10 ⊞ Lit n ) _+          | n < 8          = "as"+          | n == 8         = ""+          | otherwise      = "a"+      (Lit _  ⊞ Lit 10) _ = ""+      (_      ⊞ _     ) _ = " e "+++      (_ ⊡ Lit 10 ) _ = ""+      (_ ⊡ Lit 100) _ = ""+      (_ ⊡ _      ) _ = " "++      syms inf =+          M.fromList+          [ (0, const "zero")+          , (1, \c -> case c of+                       CtxAdd _ (Lit 10) _  -> "on"+                       _ | isFeminine inf   -> "uma"+                         | otherwise        -> "um"+            )+          , (2, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "do"+                       CtxMul _ (Lit 10)  _ -> "vin"+                       CtxMul _ (Lit 100) _ -> "duz"+                       _ | isFeminine inf   -> "duas"+                         | otherwise        -> "dois"+            )+          , (3, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "tre"+                       CtxMul _ (Lit 10)  _ -> "trin"+                       CtxMul _ (Lit 100) _ -> "trez"+                       _                    -> "três"+            )+          , (4, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "cator"+                       CtxMul _ (Lit 10)  _ -> "quaren"+                       _                    -> "quatro"+            )+          , (5, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "quin"+                       CtxMul _ (Lit 10)  _ -> "cinquen"+                       CtxMul _ (Lit 100) _ -> "quin"+                       _                    -> "cinco"+            )+          , (6, \c -> case c of+                       CtxMul _ (Lit 10) _ -> "sessen"+                       _                   -> "seis"+            )+          , (7, \c -> case c of+                       CtxMul _ (Lit 10) _ -> "seten"+                       _                   -> "sete"+            )+          , (8, \c -> case c of+                       CtxMul _ (Lit 10) _ -> "oiten"+                       _                   -> "oito"+            )+          , (9, \c -> case c of+                       CtxMul _ (Lit 10) _ -> "noven"+                       _                   -> "nove"+            )+          , (10, \c -> case c of+                        CtxAdd R (Lit _) _ -> "ze"+                        CtxMul R (Lit 2) _ -> "te"+                        CtxMul R (Lit _) _ -> "ta"+                        _                  -> "dez"+            )+          , (100, \c -> case c of+                         CtxAdd {} -> "cento"+                         CtxMul _ (Lit n) _+                             | n <= 3 -> if isFeminine inf then "entas"  else "entos"+                             | n == 5 -> if isFeminine inf then "hentas" else "hentos"+                             | n <= 9 -> if isFeminine inf then "centas" else "centos"+                             | otherwise -> "cem"+                         _ -> "cem"+            )+          , (1000, const "mil")+          ]++ordinalRepr :: Inflection -> Exp -> 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) _+                             | not (n `elem` [2,3,6]) -> "gentésim" <> postFix+                         _                            -> "centésim" <> postFix+            )+          , (1000, const $ "milésim" <> postFix)+          ]+          where+            postFix = if isFeminine inf+                      then if isSingular inf+                           then "a"+                           else "as"+                      else if isSingular inf+                           then "o"+                           else "os"++shortScaleRepr :: Inflection -> Integer -> Integer -> Exp -> Ctx Exp -> Maybe Text+shortScaleRepr =+    BN.scaleRepr (BN.quantityName "ilhão" "ilhões")+                 [(4, BN.forms "quatr" "quator" "quator" "quatra" "quatri")]
− src/Text/Numeral/Language/PT.hs
@@ -1,308 +0,0 @@-{-# LANGUAGE FlexibleContexts  #-}-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        pt--[@ISO639-2@]        por--[@ISO639-3@]        por--[@Native name@]     Português--[@English name@]    Portuguese--}--module Text.Numeral.Language.PT-    ( -- * Language entry-      entry-      -- * Conversions-    , cardinal-    , ordinal-      -- * Structure-    , cardinal_struct-    , ordinal_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.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           "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----------------------------------------------------------------------------------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 ∷ (G.Feminine i, G.Masculine i, Integral α, E.Scale α)-         ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ cardinal_struct--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 β)-         )-       ⇒ α → β-cardinal_struct = pos $ fix $ rule `combine` shortScale1_pt-    where-      rule = findRule (   0, lit       )-                    [ (  11, add 10 L  )-                    , (  16, add 10 R  )-                    , (  20, mul 10 R L)-                    , ( 100, step  100   10 R L)-                    , (1000, step 1000 1000 R L)-                    ]-                      (dec 6 - 1)--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 = \inf n → M.lookup n (syms inf)-               , reprScale = shortScaleRepr-               , reprAdd   = Just (⊞)-               , reprMul   = Just (⊡)-               , reprNeg   = Just $ \_ _ → "menos "-               }-    where-      (Lit 10 ⊞ Lit n ) _ | n < 8     = "as"-                          | n ≡ 8     = ""-                          | otherwise = "a"-      (Lit _  ⊞ Lit 10) _             = ""-      (_      ⊞ _     ) _             = " e "---      (_ ⊡ Lit 10 ) _ = ""-      (_ ⊡ Lit 100) _ = ""-      (_ ⊡ _      ) _ = " "--      syms inf =-          M.fromList-          [ (0, const "zero")-          , (1, \c → case c of-                       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"-                       _ | G.isFeminine inf → "duas"-                         | otherwise        → "dois"-            )-          , (3, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "tre"-                       CtxMul _ (Lit 10)  _ → "trin"-                       CtxMul _ (Lit 100) _ → "trez"-                       _                    → "três"-            )-          , (4, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "cator"-                       CtxMul _ (Lit 10)  _ → "quaren"-                       _                    → "quatro"-            )-          , (5, \c → case c of-                       CtxAdd _ (Lit 10)  _ → "quin"-                       CtxMul _ (Lit 10)  _ → "cinquen"-                       CtxMul _ (Lit 100) _ → "quin"-                       _                    → "cinco"-            )-          , (6, \c → case c of-                       CtxMul _ (Lit 10) _ → "sessen"-                       _                   → "seis"-            )-          , (7, \c → case c of-                       CtxMul _ (Lit 10) _ → "seten"-                       _                   → "sete"-            )-          , (8, \c → case c of-                       CtxMul _ (Lit 10) _ → "oiten"-                       _                   → "oito"-            )-          , (9, \c → case c of-                       CtxMul _ (Lit 10) _ → "noven"-                       _                   → "nove"-            )-          , (10, \c → case c of-                        CtxAdd R (Lit _) _ → "ze"-                        CtxMul R (Lit 2) _ → "te"-                        CtxMul R (Lit _) _ → "ta"-                        _                  → "dez"-            )-          , (100, \c → case c of-                         CtxAdd {} → "cento"-                         CtxMul _ (Lit n) _-                             | 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")-          ]--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 (BN.quantityName "ilhão" "ilhões")-                 [(4, BN.forms "quatr" "quator" "quator" "quatra" "quatri")]
− src/Text/Numeral/Language/RU.hs
@@ -1,169 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        ru--[@ISO639-2@]        rus--[@ISO639-3@]        rus--[@Native name@]     Русский язык--[@English name@]    Russian--}--module Text.Numeral.Language.RU-    ( -- * 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.Ord      ( (<), (>) )-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.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-----------------------------------------------------------------------------------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 ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct--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        )-                , (  40, lit               )-                , (  41, add 40 R          )-                , (  50, mul 10 R L        )-                , ( 100, step  100   10 R L)-                , (1000, step 1000 1000 R L)-                ]-                  (dec 6 - 1)--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-               , reprAdd   = Just (⊞)-               , reprMul   = Just (⊡)-               , reprNeg   = Just $ \_ _ → "минус "-               }-    where-      (Lit n ⊞ Lit 10) _ | n < 10 = "на"-      (_     ⊞ _     ) _          = " "--      (_ ⊡ Lit n) _ | n ≤ 100 = ""-      (_ ⊡ _    ) _           = " "--      syms =-          M.fromList-          [ (0, const "ноль")-          , (1, \c → case c of-                       CtxAdd _ (Lit 40)    (CtxMul {}) → "одна"-                       CtxAdd _ (_ `Mul` _) (CtxMul {}) → "одна"-                       _                                → "один"-            )-          , (2, \c → case c of-                       CtxAdd _ (Lit 10)    _           → "две"-                       CtxAdd _ (Lit 40)    (CtxMul {}) → "две"-                       CtxAdd _ (_ `Mul` _) (CtxMul {}) → "две"-                       CtxMul _ (Lit n)     _ | n > 10  → "две"-                       _                                → "два"-            )-          , (3, const "три")-          , (4, \c → case c of-                       CtxAdd _ (Lit 10) _ → "четыр"-                       _                   → "четыре"-            )-          , (5, \c → case c of-                       CtxAdd _ (Lit 10) _ → "пят"-                       _                   → "пять"-            )-          , (6, \c → case c of-                       CtxAdd _ (Lit 10) _ → "шест"-                       _                   → "шесть"-            )-          , (7, \c → case c of-                       CtxAdd _ (Lit 10) _ → "сем"-                       _                   → "семь"-            )-          , (8, \c → case c of-                       CtxAdd _ (Lit 10) _ → "восем"-                       _                   → "восемь"-            )-          , (9, \c → case c of-                       CtxAdd _ (Lit 10) _ → "девят"-                       CtxMul _ (Lit 10) _ → "девя"-                       _                   → "девять"-            )-          , (10, \c → case c of-                        CtxAdd _ (Lit n) _ | n ≤ 9 → "дцать"-                        CtxMul _ (Lit n) _ | n < 4 → "дцать"-                                           | n < 9 → "десят"-                                           | n ≡ 9 → "носто"-                        _                          → "десять"-            )-          , (40, const "сорок")-          , (100, \c → case c of-                         CtxMul _ (Lit n) _ | n ≡ 2 → "сти"-                                            | n ≤ 4 → "ста"-                                            | n ≤ 9 → "сот"-                         _                          → "сто"-            )-          , (1000, \c → case c of-                          CtxMul _ (Lit 40    `Add` Lit n) _ | n ≡ 1 → "тысяча"-                                                             | n ≤ 4 → "тысячи"-                                                             | n ≥ 5 → "тысяч"-                          CtxMul _ (_ `Mul` _ `Add` Lit n) _ | n ≡ 1 → "тысяча"-                                                             | n ≤ 4 → "тысячи"-                                                             | n ≥ 5 → "тысяч"-                          CtxMul _ (Lit n) _ | n ≤ 4 → "тысячи"-                          CtxMul {}                  → "тысяч"-                          _                          → "тысяча"-            )-          , (dec 6, const "миллион")-          , (dec 9, const "миллиард")-          ]
+ src/Text/Numeral/Language/RUS.hs view
@@ -0,0 +1,156 @@+{-|+[@ISO639-1@]        ru++[@ISO639-2@]        rus++[@ISO639-3@]        rus++[@Native name@]     Русский язык++[@English name@]    Russian+-}++module Text.Numeral.Language.RUS+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- RUS+--------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = pos+       $ fix+       $ findRule (   0, lit               )+                [ (  11, add 10 L          )+                , (  20, mul 10 R L        )+                , (  40, lit               )+                , (  41, add 40 R          )+                , (  50, mul 10 R L        )+                , ( 100, step  100   10 R L)+                , (1000, step 1000 1000 R L)+                ]+                  (dec 6 - 1)++bounds :: (Integral a) => (a, a)+bounds = let x = dec 6 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just (⊞)+               , reprMul   = Just (⊡)+               , reprNeg   = Just $ \_ _ -> "минус "+               }+    where+      (Lit n ⊞ Lit 10) _ | n < 10 = "на"+      (_     ⊞ _     ) _          = " "++      (_ ⊡ Lit n) _ | n <= 100 = ""+      (_ ⊡ _    ) _            = " "++      syms =+          M.fromList+          [ (0, const "ноль")+          , (1, \c -> case c of+                       CtxAdd _ (Lit 40)    (CtxMul {}) -> "одна"+                       CtxAdd _ (_ `Mul` _) (CtxMul {}) -> "одна"+                       _                                -> "один"+            )+          , (2, \c -> case c of+                       CtxAdd _ (Lit 10)    _           -> "две"+                       CtxAdd _ (Lit 40)    (CtxMul {}) -> "две"+                       CtxAdd _ (_ `Mul` _) (CtxMul {}) -> "две"+                       CtxMul _ (Lit n)     _ | n > 10  -> "две"+                       _                                -> "два"+            )+          , (3, const "три")+          , (4, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "четыр"+                       _                   -> "четыре"+            )+          , (5, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "пят"+                       _                   -> "пять"+            )+          , (6, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "шест"+                       _                   -> "шесть"+            )+          , (7, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "сем"+                       _                   -> "семь"+            )+          , (8, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "восем"+                       _                   -> "восемь"+            )+          , (9, \c -> case c of+                       CtxAdd _ (Lit 10) _ -> "девят"+                       CtxMul _ (Lit 10) _ -> "девя"+                       _                   -> "девять"+            )+          , (10, \c -> case c of+                        CtxAdd _ (Lit n) _ | n <= 9 -> "дцать"+                        CtxMul _ (Lit n) _ | n <  4 -> "дцать"+                                           | n <  9 -> "десят"+                                           | n == 9 -> "носто"+                        _                           -> "десять"+            )+          , (40, const "сорок")+          , (100, \c -> case c of+                         CtxMul _ (Lit n) _ | n == 2 -> "сти"+                                            | n <= 4 -> "ста"+                                            | n <= 9 -> "сот"+                         _                           -> "сто"+            )+          , (1000, \c -> case c of+                          CtxMul _ (Lit 40    `Add` Lit n) _ | n == 1 -> "тысяча"+                                                             | n <= 4 -> "тысячи"+                                                             | n >= 5 -> "тысяч"+                          CtxMul _ (_ `Mul` _ `Add` Lit n) _ | n == 1 -> "тысяча"+                                                             | n <= 4 -> "тысячи"+                                                             | n >= 5 -> "тысяч"+                          CtxMul _ (Lit n) _ | n <= 4 -> "тысячи"+                          CtxMul {}                   -> "тысяч"+                          _                           -> "тысяча"+            )+          , (dec 6, const "миллион")+          , (dec 9, const "миллиард")+          ]
src/Text/Numeral/Language/SCO.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        - @@ -31,14 +26,9 @@ -- 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 "base" Data.Function ( fix ) 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 import "this" Text.Numeral.Entry import "text" Data.Text ( Text ) @@ -47,7 +37,7 @@ -- SCO ------------------------------------------------------------------------------- -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_2    = ["sco"]     , entIso639_3    = Just "sco"@@ -59,10 +49,10 @@                        }     } -cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ α → β+struct :: (Integral a) => a -> Exp struct = checkPos        $ fix        $ findRule (  1, lit       )@@ -72,14 +62,14 @@                 ]                    100 -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = (1, 100) -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms+               { reprValue = \_ n -> M.lookup n syms                , reprAdd   = Just (⊞)-               , reprMul   = Just $ \_ _ _ → ""+               , reprMul   = Just $ \_ _ _ -> ""                }     where       ((_ `Mul` _) ⊞ _) _ = " "@@ -96,10 +86,10 @@           , (7, tenForms "seeven" "seiven" "seeven")           , (8, tenForms "echt"   "ech"    "ech"   )           , (9, tenForms "nine"   "nin"    "nin"   )-          , (10, \c → case c of-                        CtxAdd {} → "teen"-                        CtxMul {} → "tie"-                        _         → "ten"+          , (10, \c -> case c of+                        CtxAdd {} -> "teen"+                        CtxMul {} -> "tie"+                        _         -> "ten"             )           , (11, const "aleeven")           , (12, const "twal")@@ -107,7 +97,7 @@           , (1000, const "thousant")           ] -      tenForms o a m = \c → case c of-                              CtxAdd L _ _ → a-                              CtxMul {}    → m-                              _            → o+      tenForms o a m = \c -> case c of+                              CtxAdd L _ _ -> a+                              CtxMul {}    -> m+                              _            -> o
+ src/Text/Numeral/Language/SPA.hs view
@@ -0,0 +1,181 @@+{-|+[@ISO639-1@]        es++[@ISO639-2B@]       spa++[@ISO639-3@]        spa++[@Native name@]     Español++[@English name@]    Spanish+-}++module Text.Numeral.Language.SPA+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum  as BN+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++-------------------------------------------------------------------------------+-- SPA+-------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = pos $ fix $ rule `combine` longScale1_es+    where+      rule = findRule (   0, lit       )+                    [ (  11, add 10 L  )+                    , (  16, 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)++-- | Like 'longScale1' with the difference that all scale elements are+-- masculine.+longScale1_es :: (Integral a) => Rule a+longScale1_es = mulScale1_es 6 0 R L BN.rule+    where+      mulScale1_es = mulScale_ $ \f m s _ -> masculineMul (f m) s+      masculineMul x y = ChangeGender (Just Masculine) $ Mul x y++bounds :: (Integral a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \inf n -> M.lookup n (syms inf)+               , reprScale = longScaleRepr+               , reprAdd   = Just (⊞)+               , reprMul   = Just (⊡)+               , reprNeg   = Just $ \_ _ -> "menos "+               }+    where+      (_                    ⊞ Lit 10) _ = ""+      (Lit 10               ⊞ _     ) _ = ""+      (Lit 20               ⊞ _     ) _ = ""+      ((Lit _ `Mul` Lit 10) ⊞ _     ) _ = " y "+      (_                    ⊞ _     ) _ = " "++      (_ ⊡ Lit n) _ | n < 1000 = ""+      (_ ⊡ _    ) _            = " "++      syms inf =+          M.fromList+          [ (0, const "cero")+          , (1, \c -> case c of+                       CtxAdd _ (Lit 10)  _  -> "on"+                       CtxAdd _ (Lit 20)  _+                           | isMasculine inf -> "ún"+                       _   | isFeminine  inf -> "una"+                           | isMasculine inf -> "un"+                           | otherwise       -> "uno"+            )+          , (2, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "do"+                       CtxAdd _ (Lit 20)  _ -> "dós"+                       _                    -> "dos"+            )+          , (3, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "tre"+                       CtxAdd _ (Lit 20)  _ -> "trés"+                       CtxMul _ (Lit 10)  _ -> "trein"+                       _                    -> "tres"+            )+          , (4, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "cator"+                       CtxMul _ (Lit 10)  _ -> "cuaren"+                       _                    -> "cuatro"+            )+          , (5, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "quin"+                       CtxMul _ (Lit 10)  _ -> "cincuen"+                       CtxMul _ (Lit 100) _ -> "quin"+                       _                    -> "cinco"+            )+          , (6, \c -> case c of+                       CtxAdd _ (Lit 10)  _ -> "séis"+                       CtxAdd _ (Lit 20)  _ -> "séis"+                       CtxMul _ (Lit 10)  _ -> "sesen"+                       _                    -> "seis"+            )+          , (7, \c -> case c of+                       CtxMul _ (Lit 10)  _ -> "seten"+                       CtxMul _ (Lit 100) _ -> "sete"+                       _                    -> "siete"+            )+          , (8, \c -> case c of+                       CtxMul _ (Lit 10)  _ -> "ochen"+                       _                    -> "ocho"+            )+          , (9, \c -> case c of+                       CtxMul _ (Lit 10)  _ -> "noven"+                       CtxMul _ (Lit 100) _ -> "nove"+                       _                    -> "nueve"+            )+          , (10, \c -> case c of+                        CtxAdd R (Lit _)  _ -> "ce"+                        CtxAdd L (Lit _)  _ -> "dieci"+                        CtxMul R _        _ -> "ta"+                        _                   -> "diez"+            )+          , (20, \c -> case c of+                        CtxAdd _ (Lit _)  _ -> "veinti"+                        _                   -> "veinte"+            )+          , (100, \c -> case c of+                         CtxEmpty           -> "cien"+                         CtxAdd {}          -> "ciento"+                         CtxMul _ (Lit 5) _+                           | isFeminine inf -> "ientas"+                           | otherwise      -> "ientos"+                         CtxMul L _       _ -> "cien"+                         _ | isFeminine inf -> "cientas"+                           | otherwise      -> "cientos"+            )+          , (1000, const "mil")+          ]++longScaleRepr :: Inflection -> Integer -> Integer -> Exp -> Ctx Exp -> Maybe Text+longScaleRepr =+    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/SV.hs
@@ -1,223 +0,0 @@-{-# LANGUAGE FlexibleContexts  #-}-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        sv--[@ISO639-2B@]       swe--[@ISO639-3@]        swe--[@Native name@]     svenska--[@English name@]    Swedish--}--module Text.Numeral.Language.SV-    ( -- * 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" Prelude       ( Num, Integral, (-), div, negate, even )-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 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----------------------------------------------------------------------------------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-                       }-    }--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` pelletierScale1_sv-    where-      rule = findRule (   0, lit       )-                    [ (  13, add 10 L  )-                    , (  20, lit       )-                    , (  21, add 20 R  )-                    , (  30, mul 10 R L)-                    , ( 100, step1 100   10 R L)-                    , (1000, step1 1000 1000 R L)-                    ]-                      (dec 6 - 1)---- | 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 = \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-      (Inflection _ _ ⊞ _) _ = " "-      (_ ⊞ _) _ = ""--      (_ ⊡ Lit  100) CtxEmpty = " "-      (_ ⊡ Lit 1000) CtxEmpty = " "-      (_ ⊡ Scale{})  _ = " "-      (_ ⊡ _) _ = ""--      syms ctx =-          M.fromList-          [ (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"-            )-          , (11, const "elva")-          , (12, const "tolv")-          , (20, const "tjugo")-          , (100, const "hundra")-          , (1000, const "tusen")-          ]--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 _ _ ⊞ _) _ = " "-      (_ ⊞ _) _ = ""--      (_ ⊡ 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/SWE.hs view
@@ -0,0 +1,201 @@+{-|+[@ISO639-1@]        sv++[@ISO639-2B@]       swe++[@ISO639-3@]        swe++[@Native name@]     svenska++[@English name@]    Swedish+-}++module Text.Numeral.Language.SWE+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+    , ordinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++-------------------------------------------------------------------------------+-- Imports+-------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN+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 )+++-------------------------------------------------------------------------------+-- SWE+-------------------------------------------------------------------------------++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+                       }+    }++cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++ordinal :: (Integral a) => Inflection -> a -> Maybe Text+ordinal inf = ordinalRepr inf . struct++struct :: (Integral a) => a -> Exp+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, step1 100   10 R L)+                    , (1000, step1 1000 1000 R L)+                    ]+                      (dec 6 - 1)++-- | Like 'pelletierScale1' with the difference that all scale+-- elements are of the common gender.+pelletierScale1_sv :: (Integral a) => Rule a+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 = ChangeGender (Just Common) $ Mul m s++bounds :: (Integral a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { 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+      (ChangeGender _ _ ⊞ _) _ = " "+      (_ ⊞ _) _ = ""++      (_ ⊡ Lit  100) CtxEmpty = " "+      (_ ⊡ Lit 1000) CtxEmpty = " "+      (_ ⊡ Scale{})  _ = " "+      (_ ⊡ _) _ = ""++      syms ctx =+          M.fromList+          [ (0, const "noll")+          , (1, \c -> case c of+                       CtxMul _ (Lit 1000) CtxEmpty -> "ett"+                       CtxMul _ (Lit 1000) _ -> "et"+                       _ | isCommon ctx -> "en"+                         | 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"+            )+          , (11, const "elva")+          , (12, const "tolv")+          , (20, const "tjugo")+          , (100, const "hundra")+          , (1000, const "tusen")+          ]++ordinalRepr :: Inflection -> Exp -> Maybe Text+ordinalRepr = render defaultRepr+              { reprValue = \ctx n -> M.lookup n (syms ctx)+              , reprScale = BN.pelletierRepr+                               (BN.ordQuantityName "iljon" "iljonte" "iljoner" "iljonte")+                               (BN.quantityName "iljard" "iljarder")+                               bigNumSyms+              , reprAdd   = Just (⊞)+              , reprMul   = Just (⊡)+              , reprNeg   = Just $ \_ _   -> "minus "+              }+    where+      (ChangeGender _ _ ⊞ _) _ = " "+      (_ ⊞ _) _ = ""++      (_ ⊡ 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"+                         _ | isCommon ctx -> "en"+                           | 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 a) => [(a, Ctx Exp -> 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
@@ -1,163 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        tr--[@ISO639-2@]        tur--[@ISO639-3@]        tur--[@Native name@]     Türkçe--[@English name@]    Turkish--}--module Text.Numeral.Language.TR-    ( -- * 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, (-), 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 qualified "containers" Data.Map as M ( fromList, lookup )-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-----------------------------------------------------------------------------------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 ∷ (Inflection 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 = checkPos $ fix $ rule `combine` shortScale1 R L BN.rule--rule ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β) ⇒ Rule α β-rule = findRule (   0, lit               )-              [ (  11, addToTens         )-              , ( 100, step  100   10 R L)-              , (1000, step 1000 1000 R L)-              ]-                (dec 6 - 1)--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 `E.add` f r--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 = scaleRepr-               , reprAdd   = Just (⊞)-               , reprMul   = Just $ \_ _ _ → " "-               }-    where-      (Lit 10 ⊞ _) (CtxMul {}) = ""-      (_      ⊞ _) _           = " "--      syms =-          M.fromList-          [ (0, const "sıfır")-          , (1, const "bir")-          , (2, const "iki")-          , (3, const "üç")-          , (4, const "dört")-          , (5, const "beş")-          , (6, const "altı")-          , (7, const "yedi")-          , (8, const "sekiz")-          , (9, const "dokuz")-          , (10, const "on")-          , (20, const "yirmi")-          , (30, const "otuz")-          , (40, const "kırk")-          , (50, const "elli")-          , (60, const "altmış")-          , (70, const "yetmiş")-          , (80, const "seksen")-          , (90, const "doksan")-          , (100, const "yüz")-          , (1000, const "bin")-          ]--scaleRepr ∷ i → ℤ → ℤ → Exp i → Ctx (Exp i) → Maybe Text-scaleRepr = BN.scaleRepr-              (\_ _ → "ilyon")-              [ (1, BN.forms "m"     "an"     "an"     ""       "")-              , (2, BN.forms "b"     "do"     "do"     "vi"     "du")-              , (3, \c → case c of-                           CtxAdd _ (Lit 10)  _ → "tre"-                           CtxAdd _ (Lit 100) _ → "tre"-                           CtxAdd {}            → "tres"-                           CtxMul _ (Lit 100) _ → "tre"-                           CtxMul {}            → "tri"-                           _                    → "tr"-                )-              , (4, BN.forms "katr"  "kator"  "kator"  "katra"  "katrin")-              , (5, BN.forms "kent"  "ken"    "kenka"  "kenka"  "ken")-              , (6, BN.forms "sekst" "seks"   "ses"    "seksa"  "se")-              , (7, BN.forms "sept"  "septen" "septem" "septe"  "septin")-              , (8, BN.forms "okt"   "okto"   "okto"   "okto"   "oktin")-              , (10, \c → case c of-                            CtxAdd _ (Lit 100) _              → "desi"-                            CtxAdd _ (Lit 1) (CtxAdd {})      → "desi"-                            CtxMul _ (Lit n) (CtxAdd L (Lit 100) _)-                                       | n ≡ 2     → "ginti"-                                       | otherwise → "ginta"-                            CtxMul _ (Lit _) (CtxAdd _ _ CtxEmpty) → "gint"-                            CtxMul _ (Lit _) CtxEmpty         → "gint"-                            CtxMul {}                         → "ginti"-                            _                                 → "des"-                )-              , (100, \c → case c of-                             CtxMul _ (Lit n) _ | n ∉ [2,3,6] → "gent"-                             _                                → "sent"-                )-              ]
+ src/Text/Numeral/Language/TUR.hs view
@@ -0,0 +1,149 @@+{-|+[@ISO639-1@]        tr++[@ISO639-2@]        tur++[@ISO639-3@]        tur++[@Native name@]     Türkçe++[@English name@]    Turkish+-}++module Text.Numeral.Language.TUR+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import qualified "containers" Data.Map as M ( fromList, lookup )+import           "this" Text.Numeral+import qualified "this" Text.Numeral.BigNum as BN ( rule, scaleRepr, forms )+import           "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- TUR+--------------------------------------------------------------------------------++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 a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = checkPos $ fix $ rule `combine` shortScale1 R L BN.rule++rule :: (Integral a) => Rule a+rule = findRule (   0, lit               )+              [ (  11, addToTens         )+              , ( 100, step  100   10 R L)+              , (1000, step 1000 1000 R L)+              ]+                (dec 6 - 1)++addToTens :: (Integral a) => Rule a+addToTens f n = let (m, r) = n `divMod` 10+                    tens   = m * 10+                in if r == 0+                   then lit f tens+                   else f tens `Add` f r++bounds :: (Integral a) => (a, a)+bounds = let x = dec 60000 - 1 in (negate x, x)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprScale = scaleRepr+               , reprAdd   = Just (⊞)+               , reprMul   = Just $ \_ _ _ -> " "+               }+    where+      (Lit 10 ⊞ _) (CtxMul {}) = ""+      (_      ⊞ _) _           = " "++      syms =+          M.fromList+          [ (0, const "sıfır")+          , (1, const "bir")+          , (2, const "iki")+          , (3, const "üç")+          , (4, const "dört")+          , (5, const "beş")+          , (6, const "altı")+          , (7, const "yedi")+          , (8, const "sekiz")+          , (9, const "dokuz")+          , (10, const "on")+          , (20, const "yirmi")+          , (30, const "otuz")+          , (40, const "kırk")+          , (50, const "elli")+          , (60, const "altmış")+          , (70, const "yetmiş")+          , (80, const "seksen")+          , (90, const "doksan")+          , (100, const "yüz")+          , (1000, const "bin")+          ]++scaleRepr :: Inflection -> Integer -> Integer -> Exp -> Ctx Exp -> Maybe Text+scaleRepr = BN.scaleRepr+              (\_ _ -> "ilyon")+              [ (1, BN.forms "m"     "an"     "an"     ""       "")+              , (2, BN.forms "b"     "do"     "do"     "vi"     "du")+              , (3, \c -> case c of+                           CtxAdd _ (Lit 10)  _ -> "tre"+                           CtxAdd _ (Lit 100) _ -> "tre"+                           CtxAdd {}            -> "tres"+                           CtxMul _ (Lit 100) _ -> "tre"+                           CtxMul {}            -> "tri"+                           _                    -> "tr"+                )+              , (4, BN.forms "katr"  "kator"  "kator"  "katra"  "katrin")+              , (5, BN.forms "kent"  "ken"    "kenka"  "kenka"  "ken")+              , (6, BN.forms "sekst" "seks"   "ses"    "seksa"  "se")+              , (7, BN.forms "sept"  "septen" "septem" "septe"  "septin")+              , (8, BN.forms "okt"   "okto"   "okto"   "okto"   "oktin")+              , (10, \c -> case c of+                            CtxAdd _ (Lit 100) _              -> "desi"+                            CtxAdd _ (Lit 1) (CtxAdd {})      -> "desi"+                            CtxMul _ (Lit n) (CtxAdd L (Lit 100) _)+                                       | n == 2    -> "ginti"+                                       | otherwise -> "ginta"+                            CtxMul _ (Lit _) (CtxAdd _ _ CtxEmpty) -> "gint"+                            CtxMul _ (Lit _) CtxEmpty         -> "gint"+                            CtxMul {}                         -> "ginti"+                            _                                 -> "des"+                )+              , (100, \c -> case c of+                             CtxMul _ (Lit n) _+                               | not $ n `elem` [2,3,6] -> "gent"+                             _                          -> "sent"+                )+              ]
− src/Text/Numeral/Language/WO.hs
@@ -1,116 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        wo--[@ISO639-2@]        wo1--[@ISO639-3@]        wo1--[@Native name@]     Wolof--[@English name@]    Wolof--}--module Text.Numeral.Language.WO-    ( -- * 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 "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.Misc ( dec )-import "this" Text.Numeral.Entry-import "text" Data.Text ( Text )-------------------------------------------------------------------------------------- WO-----------------------------------------------------------------------------------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-                       }-    }--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        )-                [ (  6, add 5 R    )-                , ( 10, lit        )-                , ( 11, add 10 R   )-                , ( 20, mul 10 R L )-                , (100,  step 100 10 R L)-                , (1000, step 1000 1000 R L)-                , (dec 6, lit)-                ]-                  (dec 6)--bounds ∷ (Integral α) ⇒ (α, α)-bounds = (0, dec 6)--cardinalRepr ∷ i → Exp i → Maybe Text-cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms-               , reprAdd   = Just (⊞)-               , reprMul   = Just (⊡)-               }-    where-      (Lit 5 ⊞ _) _ = "-"-      (_     ⊞ _) _ = " ak "--      (_ ⊡ Lit 10) _ = "-"-      (_ ⊡ _     ) _ = " "--      syms =-          M.fromList-          [ (0, const "tus")-          , (1, i "benn")-          , (2, i "ñaar")-          , (3, i "ñett")-          , (4, i "ñeent")-          , (5, i "juróom")-          , (10, i "fukk")-          , (100, i "téeméer")-          , (1000, const "junni")-          , (dec 6, const "tamndareet")-          ]--      i s = \c → s ⊕ case c of-                       CtxMul _ (Lit n) _ | n ≥ 100 → "i"-                       CtxAdd R _ (CtxMul _ (Lit n) _) | n ≥ 100 → "i"-                       _ → ""
+ src/Text/Numeral/Language/WOL.hs view
@@ -0,0 +1,105 @@+{-|+[@ISO639-1@]        wo++[@ISO639-2@]        wo1++[@ISO639-3@]        wo1++[@Native name@]     Wolof++[@English name@]    Wolof+-}++module Text.Numeral.Language.WOL+    ( -- * Language entry+      entry+      -- * Conversions+    , cardinal+      -- * Structure+    , struct+      -- * Bounds+    , bounds+    ) where+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import "base" Data.Monoid ( (<>) )+import qualified "containers" Data.Map as M ( fromList, lookup )+import "this" Text.Numeral+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- WOL+--------------------------------------------------------------------------------++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+                       }+    }++cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct++struct :: (Integral a) => a -> Exp+struct = checkPos+       $ fix+       $ findRule (  0, lit        )+                [ (  6, add 5 R    )+                , ( 10, lit        )+                , ( 11, add 10 R   )+                , ( 20, mul 10 R L )+                , (100,  step 100 10 R L)+                , (1000, step 1000 1000 R L)+                , (dec 6, lit)+                ]+                  (dec 6)++bounds :: (Integral a) => (a, a)+bounds = (0, dec 6)++cardinalRepr :: Inflection -> Exp -> Maybe Text+cardinalRepr = render defaultRepr+               { reprValue = \_ n -> M.lookup n syms+               , reprAdd   = Just (⊞)+               , reprMul   = Just (⊡)+               }+    where+      (Lit 5 ⊞ _) _ = "-"+      (_     ⊞ _) _ = " ak "++      (_ ⊡ Lit 10) _ = "-"+      (_ ⊡ _     ) _ = " "++      syms =+          M.fromList+          [ (0, const "tus")+          , (1, i "benn")+          , (2, i "ñaar")+          , (3, i "ñett")+          , (4, i "ñeent")+          , (5, i "juróom")+          , (10, i "fukk")+          , (100, i "téeméer")+          , (1000, const "junni")+          , (dec 6, const "tamndareet")+          ]++      i s = \c -> s <> case c of+                         CtxMul _ (Lit n) _ | n >= 100 -> "i"+                         CtxAdd R _ (CtxMul _ (Lit n) _) | n >= 100 -> "i"+                         _ -> ""
src/Text/Numeral/Language/YOR.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}- {-| [@ISO639-1@]        yo @@ -31,17 +26,10 @@ -- Imports -------------------------------------------------------------------------------- -import "base" Data.Bool     ( otherwise )-import "base" Data.Function ( ($), const, fix )-import "base" Data.Maybe    ( Maybe(Just) )-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 "base" Data.Function ( fix )+import "base" Data.Monoid ( (<>) ) 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 import "this" Text.Numeral.Entry import "text" Data.Text ( Text ) @@ -63,7 +51,7 @@ 525 = (200*3) - (20*4) + 5 -} -entry ∷ Entry+entry :: Entry entry = emptyEntry     { entIso639_1    = Just "yo"     , entIso639_2    = ["yor"]@@ -76,13 +64,13 @@                        }     } -cardinal ∷ (Inflection i, Integral α) ⇒ i → α → Maybe Text-cardinal inf = cardinalRepr inf ∘ struct+cardinal :: (Integral a) => Inflection -> a -> Maybe Text+cardinal inf = cardinalRepr inf . struct -struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Sub β, E.Mul β) ⇒ α → β+struct :: (Integral a) => a -> Exp struct = checkPos        $ fix-       $ conditional (≡ -5) lit+       $ conditional (== -5) lit        $ findRule (   1, lit        )                 [ (  11, add 10  L  )                 , (  15, add 20  L  )@@ -115,19 +103,19 @@                 ]                    1000 -bounds ∷ (Integral α) ⇒ (α, α)+bounds :: (Integral a) => (a, a) bounds = (1, 1000) -cardinalRepr ∷ i → Exp i → Maybe Text+cardinalRepr :: Inflection -> Exp -> Maybe Text cardinalRepr = render defaultRepr-               { reprValue = \_ n → M.lookup n syms+               { reprValue = \_ n -> M.lookup n syms                , reprAdd   = Just (⊞)                , reprMul   = Just (⊡)-               , reprSub   = Just $ \_ _ _ → "dil"+               , reprSub   = Just $ \_ _ _ -> "dil"                }     where       (_     ⊞ Lit 10) _         = ""-      (Lit n ⊞ _) _  | n ≡ -5    = ""+      (Lit n ⊞ _) _  | n == -5   = ""                      | otherwise = "lel"       (_     ⊞ _) _              = "" @@ -137,26 +125,26 @@       syms =           M.fromList           [ (-5, const "med")-          , ( 1, \c → case c of-                        CtxAdd {} → "mokan"-                        CtxSub {} → "mokan"-                        _         → "ikan"+          , ( 1, \c -> case c of+                        CtxAdd {} -> "mokan"+                        CtxSub {} -> "mokan"+                        _         -> "ikan"             )           , ( 2, twentyForm "me" "go" "ji")           , ( 3, twentyForm "me" "go" "ta")           , ( 4, twentyForm "me" "go" "rin")           , ( 5, twentyForm "ma" "go" "run")-          , ( 6, const    $ "me"  ⊕   "fa")-          , ( 7, const    $ "me"  ⊕   "je")-          , ( 8, const    $ "me"  ⊕   "jo")-          , ( 9, const    $ "me"  ⊕   "san")-          , (10, \c → case c of-                        CtxAdd {} → "la"-                        _         → "mewa"+          , ( 6, const    $ "me"  <>  "fa")+          , ( 7, const    $ "me"  <>  "je")+          , ( 8, const    $ "me"  <>  "jo")+          , ( 9, const    $ "me"  <>  "san")+          , (10, \c -> case c of+                        CtxAdd {} -> "la"+                        _         -> "mewa"             )-          , (20, \c → case c of-                        CtxMul {} → "o"-                        _         → "ogun"+          , (20, \c -> case c of+                        CtxMul {} -> "o"+                        _         -> "ogun"             )           , (30, const "ogbon")           , (50, const "adota")@@ -165,7 +153,7 @@           , (1000, const "egberun")           ] -      twentyForm c m s = \ctx → case ctx of-                                  CtxMul _ (Lit 20) _ → m-                                  _                   → c-                                ⊕ s+      twentyForm c m s = \ctx -> case ctx of+                                   CtxMul _ (Lit 20) _ -> m+                                   _                   -> c+                                 <> s
− src/Text/Numeral/Language/ZH.hs
@@ -1,352 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PackageImports    #-}-{-# LANGUAGE UnicodeSyntax     #-}--{-|-[@ISO639-1@]        zh--[@ISO639-2B@]       chi--[@ISO639-2T@]       zho--[@ISO639-3@]        cmn--[@Native name@]     官話--[@English name@]    Chinese--}--module Text.Numeral.Language.ZH-    ( -- * 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-------------------------------------------------------------------------------------- Imports-----------------------------------------------------------------------------------import "base" Data.Bool     ( otherwise )-import "base" Data.Function ( id, const, fix, flip, ($) )-import "base" Data.Maybe    ( Maybe(Just) )-import "base" Data.Ord      ( (<) )-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           "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-----------------------------------------------------------------------------------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 α, 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 α, 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 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) (add0 val f a) mval-  where-     (⊡) = flipIfR mSide E.mul--struct ∷ (Integral α, E.Unknown β, E.Lit β, E.Neg β, E.Add β, E.Mul β) ⇒ α → β-struct = pos-       $ fix-       $ findRule (0, lit)-                  ( [(dec 1, step  (dec 1) (dec 1) R L)]-                  ⊕ [(dec n, stepX (dec n) (dec 1) R L) | n ← [2,3]]-                  ⊕ [(dec n, stepX (dec n) (dec 4) R L) | n ← [4,8..44]]-                  )-                  (dec 48 - 1)-    where-      stepX = mkStep lit1 addX mulX--      addX val _ = \f n → E.add (f val) (add0 val f $ n - val)--bounds ∷ (Integral α) ⇒ (α, α)-bounds = let x = dec 48 - 1 in (negate x, x)--cardinalRepr ∷ Repr i-cardinalRepr = defaultRepr-               { reprAdd = Just $ \_ _ _ → ""-               , reprMul = Just $ \_ _ _ → ""-               }-------------------------------------------------------------------------------------- Traditional Characters-----------------------------------------------------------------------------------trad_entry ∷ Entry-trad_entry = entry-    { entVariant  = Just "traditional"-    , entCardinal = Just Conversion-                    { toNumeral   = trad_cardinal-                    , toStructure = struct-                    }-    }--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 $ \_ _ → "負"-           }--trad_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text)-trad_syms =-    M.fromList-    [ (0, \c → case c of-                 CtxEmpty → "零"-                 _        → "〇"-      )-    , (1, const "一")-    , (2, \c → case c of-                 CtxMul _ (Lit n) _ | n ≥ 1000 → "兩"-                 _ → "二"-      )-    , (3, const "三")-    , (4, const "四")-    , (5, const "五")-    , (6, const "六")-    , (7, const "七")-    , (8, const "八")-    , (9, const "九")-    , (10, const "十")-    , (100, const "百")-    , (1000, const "千")-    , (dec 4, const "萬")-    , (dec 8, const "億")-    , (dec 12, const "兆")-    , (dec 16, const "京")-    , (dec 20, const "垓")-    , (dec 24, const "秭")-    , (dec 28, const "穰")-    , (dec 32, const "溝")-    , (dec 36, const "澗")-    , (dec 40, const "正")-    , (dec 44, const "載")-    ]-------------------------------------------------------------------------------------- Simplified Characters-----------------------------------------------------------------------------------simpl_entry ∷ Entry-simpl_entry = entry-    { entVariant  = Just "simplified"-    , entCardinal = Just Conversion-                    { toNumeral   = simpl_cardinal-                    , toStructure = struct-                    }-    }--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 $ \_ _ → "负"-           }--simpl_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text)-simpl_syms =-    M.fromList-    [ (2, \c → case c of-                 CtxMul _ (Lit n) _ | n ≥ 1000 → "两"-                 _ → "二"-      )-    , (dec 4, const "万")-    , (dec 8, const "亿")-    ]-------------------------------------------------------------------------------------- Financial Characters (Traditional)-----------------------------------------------------------------------------------finance_trad_entry ∷ Entry-finance_trad_entry = entry-    { entVariant  = Just "finance traditional"-    , entCardinal = Just Conversion-                    { toNumeral   = finance_trad_cardinal-                    , toStructure = struct-                    }-    }--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 $ \_ _ → "負"-           }--finance_trad_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text)-finance_trad_syms =-    M.fromList-    [ (0, const "零")-    , (1, const "壹")-    , (2, const "貳")-    , (3, const "参")-    , (4, const "肆")-    , (5, const "伍")-    , (6, const "陸")-    , (7, const "柒")-    , (8, const "捌")-    , (9, const "玖")-    , (10, const "拾")-    , (100, const "伯")-    , (1000, const "仟")-    , (dec 4, const "萬")-    , (dec 8, const "億")-    ]-------------------------------------------------------------------------------------- Financial Characters (Simplified)-----------------------------------------------------------------------------------finance_simpl_entry ∷ Entry-finance_simpl_entry = entry-    { entVariant  = Just "finance simplified"-    , entCardinal = Just Conversion-                    { toNumeral   = finance_simpl_cardinal-                    , toStructure = struct-                    }-    }--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 $ \_ _ → "负"-           }-  where-    finance_simpl_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text)-    finance_simpl_syms =-        M.fromList-        [ (2, const "贰")-        , (6, const "陆")-        , (dec 4, const "万")-        , (dec 8, const "亿")-        ]-------------------------------------------------------------------------------------- Pinyin-----------------------------------------------------------------------------------pinyin_entry ∷ Entry-pinyin_entry = entry-    { entVariant  = Just "pinyin"-    , entCardinal = Just Conversion-                    { toNumeral   = pinyin_cardinal-                    , toStructure = struct-                    }-    }--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 (⊞)-           }-  where-    (Lit 10 ⊞ _) _ = ""-    (_      ⊞ _) _ = " "--    pinyin_syms ∷ (Integral α) ⇒ M.Map α (Ctx (Exp i) → Text)-    pinyin_syms =-        M.fromList-        [ (0, const "líng")-        , (1, const "yī")-        , (2, \c → case c of-                     CtxMul _ (Lit n) _ | n ≥ 1000 → "liǎng"-                     _ → "èr"-          )-        , (3, const "sān")-        , (4, const "sì")-        , (5, const "wǔ")-        , (6, const "liù")-        , (7, const "qī")-        , (8, const "bā")-        , (9, const "jiǔ")-        , (10, const "shí")-        , (100, const "bǎi")-        , (1000, const "qiān")-        , (dec 4, const "wàn")-        , (dec 8, const "yì")-        , (dec 12, const "zhào")-        , (dec 16, const "jīng")-        , (dec 20, const "gāi")-        , (dec 24, const "zǐ")-        , (dec 28, const "ráng")-        , (dec 32, const "gōu")-        , (dec 36, const "jiàn")-        , (dec 40, const "zhēng")-        , (dec 44, const "zài")-        ]
+ src/Text/Numeral/Language/ZHO.hs view
@@ -0,0 +1,336 @@+{-|+[@ISO639-1@]        zh++[@ISO639-2B@]       chi++[@ISO639-2T@]       zho++[@ISO639-3@]        cmn++[@Native name@]     官話++[@English name@]    Chinese+-}++module Text.Numeral.Language.ZHO+    ( -- * 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+++--------------------------------------------------------------------------------+-- Imports+--------------------------------------------------------------------------------++import "base" Data.Function ( fix )+import "base" Data.Monoid ( (<>) )+import qualified "containers" Data.Map as M+import "this" Text.Numeral+import "this" Text.Numeral.Misc ( dec )+import "this" Text.Numeral.Entry+import "text" Data.Text ( Text )+++--------------------------------------------------------------------------------+-- ZHO+--------------------------------------------------------------------------------++entry :: Entry+entry = emptyEntry+    { entIso639_1    = Just "zh"+    , entIso639_2    = ["chi", "zho"]+    , entIso639_3    = Just "cmn"+    , entNativeNames = ["官話"]+    , entEnglishName = Just "Chinese"+    }++flipIfR :: Side -> (a -> a -> a) -> (a -> a -> a)+flipIfR L = id+flipIfR R = flip++add0 :: (Integral a) => a -> Rule a+add0 val f n | n < val `div` 10 = Lit 0 `Add` f n+             | otherwise        = f n++mulX :: (Integral a) => a -> Side -> Side -> Rule a+mulX val aSide mSide =+    \f n -> let (m, a) = n `divMod` val+                mval = if m == 1+                       then Lit 1 ⊡ Lit (fromIntegral val)+                       else f m ⊡ Lit (fromIntegral val)+           in if a == 0+              then mval+              else (flipIfR aSide Add) (add0 val f a) mval+  where+     (⊡) = flipIfR mSide Mul++struct :: (Integral a) => a -> Exp+struct = pos+       $ fix+       $ findRule (0, lit)+                  (  [(dec 1, step  (dec 1) (dec 1) R L)]+                  <> [(dec n, stepX (dec n) (dec 1) R L) | n <- [2,3]]+                  <> [(dec n, stepX (dec n) (dec 4) R L) | n <- [4,8..44]]+                  )+                  (dec 48 - 1)+    where+      stepX = mkStep lit1 addX mulX++      addX val _ = \f n -> Add (f val) (add0 val f $ n - val)++bounds :: (Integral a) => (a, a)+bounds = let x = dec 48 - 1 in (negate x, x)++cardinalRepr :: Repr+cardinalRepr = defaultRepr+               { reprAdd = Just $ \_ _ _ -> ""+               , reprMul = Just $ \_ _ _ -> ""+               }+++--------------------------------------------------------------------------------+-- Traditional Characters+--------------------------------------------------------------------------------++trad_entry :: Entry+trad_entry = entry+    { entVariant  = Just "traditional"+    , entCardinal = Just Conversion+                    { toNumeral   = trad_cardinal+                    , toStructure = struct+                    }+    }++trad_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+trad_cardinal inf = trad_cardinalRepr inf . struct++trad_cardinalRepr :: Inflection -> Exp -> Maybe Text+trad_cardinalRepr =+    render cardinalRepr+           { reprValue = \_ n -> M.lookup n trad_syms+           , reprNeg = Just $ \_ _ -> "負"+           }++trad_syms :: (Integral a) => M.Map a (Ctx Exp -> Text)+trad_syms =+    M.fromList+    [ (0, \c -> case c of+                 CtxEmpty -> "零"+                 _        -> "〇"+      )+    , (1, const "一")+    , (2, \c -> case c of+                 CtxMul _ (Lit n) _ | n >= 1000 -> "兩"+                 _ -> "二"+      )+    , (3, const "三")+    , (4, const "四")+    , (5, const "五")+    , (6, const "六")+    , (7, const "七")+    , (8, const "八")+    , (9, const "九")+    , (10, const "十")+    , (100, const "百")+    , (1000, const "千")+    , (dec 4, const "萬")+    , (dec 8, const "億")+    , (dec 12, const "兆")+    , (dec 16, const "京")+    , (dec 20, const "垓")+    , (dec 24, const "秭")+    , (dec 28, const "穰")+    , (dec 32, const "溝")+    , (dec 36, const "澗")+    , (dec 40, const "正")+    , (dec 44, const "載")+    ]+++--------------------------------------------------------------------------------+-- Simplified Characters+--------------------------------------------------------------------------------++simpl_entry :: Entry+simpl_entry = entry+    { entVariant  = Just "simplified"+    , entCardinal = Just Conversion+                    { toNumeral   = simpl_cardinal+                    , toStructure = struct+                    }+    }++simpl_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+simpl_cardinal inf = simpl_cardinalRepr inf . struct++simpl_cardinalRepr :: Inflection -> Exp -> Maybe Text+simpl_cardinalRepr =+    render cardinalRepr+           { reprValue = \_ n -> M.lookup n (simpl_syms `M.union` trad_syms)+           , reprNeg = Just $ \_ _ -> "负"+           }++simpl_syms :: (Integral a) => M.Map a (Ctx Exp -> Text)+simpl_syms =+    M.fromList+    [ (2, \c -> case c of+                 CtxMul _ (Lit n) _ | n >= 1000 -> "两"+                 _ -> "二"+      )+    , (dec 4, const "万")+    , (dec 8, const "亿")+    ]+++--------------------------------------------------------------------------------+-- Financial Characters (Traditional)+--------------------------------------------------------------------------------++finance_trad_entry :: Entry+finance_trad_entry = entry+    { entVariant  = Just "finance traditional"+    , entCardinal = Just Conversion+                    { toNumeral   = finance_trad_cardinal+                    , toStructure = struct+                    }+    }++finance_trad_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+finance_trad_cardinal inf = finance_trad_cardinalRepr inf . struct++finance_trad_cardinalRepr :: Inflection -> Exp -> Maybe Text+finance_trad_cardinalRepr =+    render cardinalRepr+           { reprValue = \_ n -> M.lookup n (finance_trad_syms `M.union` trad_syms)+           , reprNeg = Just $ \_ _ -> "負"+           }++finance_trad_syms :: (Integral a) => M.Map a (Ctx Exp -> Text)+finance_trad_syms =+    M.fromList+    [ (0, const "零")+    , (1, const "壹")+    , (2, const "貳")+    , (3, const "参")+    , (4, const "肆")+    , (5, const "伍")+    , (6, const "陸")+    , (7, const "柒")+    , (8, const "捌")+    , (9, const "玖")+    , (10, const "拾")+    , (100, const "伯")+    , (1000, const "仟")+    , (dec 4, const "萬")+    , (dec 8, const "億")+    ]+++--------------------------------------------------------------------------------+-- Financial Characters (Simplified)+--------------------------------------------------------------------------------++finance_simpl_entry :: Entry+finance_simpl_entry = entry+    { entVariant  = Just "finance simplified"+    , entCardinal = Just Conversion+                    { toNumeral   = finance_simpl_cardinal+                    , toStructure = struct+                    }+    }++finance_simpl_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+finance_simpl_cardinal inf = finance_simpl_cardinalRepr inf . struct++finance_simpl_cardinalRepr :: Inflection -> Exp -> Maybe Text+finance_simpl_cardinalRepr =+    render cardinalRepr+           { reprValue = \_ n -> M.lookup n ( finance_simpl_syms+                                            `M.union` finance_trad_syms+                                            `M.union` trad_syms+                                            )+           , reprNeg = Just $ \_ _ -> "负"+           }+  where+    finance_simpl_syms :: (Integral a) => M.Map a (Ctx Exp -> Text)+    finance_simpl_syms =+        M.fromList+        [ (2, const "贰")+        , (6, const "陆")+        , (dec 4, const "万")+        , (dec 8, const "亿")+        ]+++--------------------------------------------------------------------------------+-- Pinyin+--------------------------------------------------------------------------------++pinyin_entry :: Entry+pinyin_entry = entry+    { entVariant  = Just "pinyin"+    , entCardinal = Just Conversion+                    { toNumeral   = pinyin_cardinal+                    , toStructure = struct+                    }+    }++pinyin_cardinal :: (Integral a) => Inflection -> a -> Maybe Text+pinyin_cardinal inf = pinyin_cardinalRepr inf . struct++pinyin_cardinalRepr :: Inflection -> Exp -> Maybe Text+pinyin_cardinalRepr =+    render cardinalRepr+           { reprValue = \_ n -> M.lookup n pinyin_syms+           , reprNeg = Just $ \_ _ -> "fù"+           , reprAdd = Just (⊞)+           }+  where+    (Lit 10 ⊞ _) _ = ""+    (_      ⊞ _) _ = " "++    pinyin_syms :: (Integral a) => M.Map a (Ctx Exp -> Text)+    pinyin_syms =+        M.fromList+        [ (0, const "líng")+        , (1, const "yī")+        , (2, \c -> case c of+                     CtxMul _ (Lit n) _ | n >= 1000 -> "liǎng"+                     _ -> "èr"+          )+        , (3, const "sān")+        , (4, const "sì")+        , (5, const "wǔ")+        , (6, const "liù")+        , (7, const "qī")+        , (8, const "bā")+        , (9, const "jiǔ")+        , (10, const "shí")+        , (100, const "bǎi")+        , (1000, const "qiān")+        , (dec 4, const "wàn")+        , (dec 8, const "yì")+        , (dec 12, const "zhào")+        , (dec 16, const "jīng")+        , (dec 20, const "gāi")+        , (dec 24, const "zǐ")+        , (dec 28, const "ráng")+        , (dec 32, const "gōu")+        , (dec 36, const "jiàn")+        , (dec 40, const "zhēng")+        , (dec 44, const "zài")+        ]
src/Text/Numeral/Misc.hs view
@@ -1,49 +1,21 @@-{-# 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+import "this" Math.NumberTheory.Logarithms ( integerLog10' )  -------------------------------------------------------------------------------- -- Misc --------------------------------------------------------------------------------  -- ^ Raise 10 to some power.-dec ∷ (Integral α) ⇒ α → α+dec :: (Integral a) => a -> a 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+-- maximum input value is 10 ^ (maxBound :: Int).+intLog :: (Integral a) => a -> a+intLog = fromIntegral . integerLog10' . toInteger
src/Text/Numeral/Render.hs view
@@ -1,8 +1,4 @@-{-# LANGUAGE NoImplicitPrelude-           , UnicodeSyntax-           , PackageImports-           , RecordWildCards-  #-}+{-# LANGUAGE RecordWildCards #-}  module Text.Numeral.Render     ( -- * Rendering numerals@@ -15,27 +11,17 @@     , Ctx(..)     , posIndex     , isOutside-    )-    where+    ) 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) )-+import "base" Data.Monoid ( (<>) )+import "text" Data.Text ( Text )+import "this" Text.Numeral.Exp ( Exp(..), Side(L, R) )+import "this" Text.Numeral.Grammar ( Inflection(..) )  ------------------------------------------------------------------------------- -- Rendering numerals@@ -43,42 +29,42 @@  -- | 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 -- ^ Representation.+       -> Inflection -- ^ Initial inflection.+       -> Exp -- ^ 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+      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+      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+      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+      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+      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+      go ctx inf (ChangeCase   mbCase   x) = go ctx (inf {iCase   = mbCase  }) x+      go ctx inf (ChangeGender mbGender x) = go ctx (inf {iGender = mbGender}) x+      go ctx inf (ChangeNumber mbNumber x) = go ctx (inf {iNumber = mbNumber}) x   --------------------------------------------------------------------------------@@ -89,75 +75,75 @@ -- -- A 'Repr' contains all the information on how to render an -- 'Exp'ression to a 'Text' value.-data Repr i =+data Repr =     Repr     { -- | Representation for unknown values.-      reprUnknown ∷ Maybe Text+      reprUnknown :: Maybe Text       -- | Renders a literal value. Not necessarily defined for every       -- value.-    , reprValue ∷ i → ℤ → Maybe (Ctx (Exp i) → Text)+    , reprValue :: Inflection -> Integer -> Maybe (Ctx Exp -> Text)       -- | Renders a negation. This concerns the negation itself, not       -- the thing being negated.-    , reprNeg ∷ Maybe (Exp i → Ctx (Exp i) → Text)+    , reprNeg :: Maybe (Exp -> Ctx Exp -> 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)+    , reprAdd :: Maybe (Exp -> Exp -> Ctx Exp -> Text)       -- | Renders a multiplication. This concerns the multiplication       -- itself, not the things being multiplied.-    , reprMul ∷ Maybe (Exp i → Exp i → Ctx (Exp i) → Text)+    , reprMul :: Maybe (Exp -> Exp -> Ctx Exp -> Text)       -- | Renders a subtraction. This concerns the subtraction       -- itself, not the things being subtracted.-    , reprSub ∷ Maybe (Exp i → Exp i → Ctx (Exp i) → Text)+    , reprSub :: Maybe (Exp -> Exp -> Ctx Exp -> 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)+    , reprFrac :: Maybe (Exp -> Exp -> Ctx Exp -> Text)       -- | Renders a step in a scale of large values.-    , reprScale ∷ ScaleRepr i+    , reprScale :: ScaleRepr       -- | 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)+    , reprNegCombine :: Maybe (Text -> Text -> Exp -> Text)       -- | Combines an addition and the things being added.-    , reprAddCombine ∷ Maybe (Text → Text → Exp i → Text → Exp i → Text)+    , reprAddCombine :: Maybe (Text -> Text -> Exp -> Text -> Exp -> Text)       -- | Combines a multiplication and the things being multiplied.-    , reprMulCombine ∷ Maybe (Text → Text → Exp i → Text → Exp i → Text)+    , reprMulCombine :: Maybe (Text -> Text -> Exp -> Text -> Exp -> Text)       -- | Combines a subtraction and the things being subtracted.-    , reprSubCombine ∷ Maybe (Text → Text → Exp i → Text → Exp i → Text)+    , reprSubCombine :: Maybe (Text -> Text -> Exp -> Text -> Exp -> Text)       -- | Combines a fraction and the numerator and denominator.-    , reprFracCombine ∷ Maybe (Text → Text → Exp i → Text → Exp i → Text)+    , reprFracCombine :: Maybe (Text -> Text -> Exp -> Text -> Exp -> 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+type ScaleRepr = Inflection+               -> Integer -- ^ Base.+               -> Integer -- ^ Offset.+               -> Exp -- ^ Rank.+               -> Ctx Exp -- ^ 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 defaultRepr =     Repr { reprUnknown = Nothing-         , reprValue   = \_ _ → 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+         , 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          }  @@ -166,40 +152,34 @@ --------------------------------------------------------------------------------  -- | 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)-+data Ctx a+     -- | The empty context. Used for top level expressions.+   = CtxEmpty+     -- | Negation context.+   | CtxNeg (Ctx a)+     -- | Addition context.+   | CtxAdd Side a (Ctx a)+     -- | Multiplication context.+   | CtxMul Side a (Ctx a)+     -- | Subtraction context.+   | CtxSub Side a (Ctx a)+     -- | Fraction context.+   | CtxFrac Side a (Ctx a)+     -- | Scale context.+   | CtxScale (Ctx a)+     deriving (Eq, Show) -posIndex ∷ Ctx α → ℤ+posIndex :: Ctx a -> Integer posIndex c = go 0 c     where-      go ∷ ℤ → Ctx α → ℤ+      go :: Integer -> Ctx a -> Integer       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 (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.@@ -211,20 +191,18 @@ -- @ -- -- On the left we have @'Lit' 1000@ and on the right @'Lit' 10@.-isOutside ∷ Side → Ctx α → Bool+isOutside :: Side -> Ctx a -> Bool isOutside s c = go c     where-      go ∷ Ctx α → Bool+      go :: Ctx a -> Bool       go CtxEmpty = True       go (CtxNeg nc) = go nc-      go (CtxAdd  as _ ac) | as ≡ s    = go ac+      go (CtxAdd  as _ ac) | as == s   = go ac                            | otherwise = False-      go (CtxMul  ms _ mc) | ms ≡ s    = go mc+      go (CtxMul  ms _ mc) | ms == s   = go mc                            | otherwise = False-      go (CtxSub  ss _ sc) | ss ≡ s    = go sc+      go (CtxSub  ss _ sc) | ss == s   = go sc                            | otherwise = False-      go (CtxFrac fs _ fc) | fs ≡ s    = go fc+      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
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude-           , PackageImports-           , UnicodeSyntax-  #-}- module Text.Numeral.Render.Utils     ( addCtx     , mulCtx@@ -13,8 +8,6 @@ -- Imports -------------------------------------------------------------------------------- -import "base-unicode-symbols" Data.Eq.Unicode ( (≡) )-import "base-unicode-symbols" Prelude.Unicode ( ℤ ) import "this" Text.Numeral  @@ -22,19 +15,19 @@ -- Utility functions for rendering numerals -------------------------------------------------------------------------------- -addCtx ∷ ℤ → s → (Ctx (Exp i) → s) → Ctx (Exp i) → s+addCtx :: Integer -> s -> (Ctx Exp -> s) -> Ctx Exp -> s addCtx val match other ctx =     case ctx of-      CtxAdd _ (Lit n) _ | val ≡ n → match-      _ → other ctx+      CtxAdd _ (Lit n) _ | val == n -> match+      _ -> other ctx -mulCtx ∷ ℤ → s → (Ctx (Exp i) → s) → Ctx (Exp i) → s+mulCtx :: Integer -> s -> (Ctx Exp -> s) -> Ctx Exp -> s mulCtx val match other ctx =     case ctx of-      CtxMul _ (Lit n) _ | val ≡ n → match-      _ → other ctx+      CtxMul _ (Lit n) _ | val == n -> match+      _ -> other ctx -outsideCtx ∷ Side → s → (Ctx (Exp i) → s) → Ctx (Exp i) → s+outsideCtx :: Side -> s -> (Ctx Exp -> s) -> Ctx Exp -> s outsideCtx side match other ctx =     if isOutside side ctx     then match
src/Text/Numeral/Rules.hs view
@@ -1,8 +1,3 @@-{-# LANGUAGE NoImplicitPrelude-           , PackageImports-           , UnicodeSyntax-  #-}- {-|  Rules to convert numbers to an expression language.@@ -24,8 +19,6 @@   , lit, lit1    , pos, checkPos-  , dual, plural-  , inflection    , add   , mul, mul1@@ -36,6 +29,11 @@   , shortScale1, longScale1, pelletierScale1    , mkStep, step, step1++    -- ** Grammar Rules+  , changeCase+  , changeGender+  , changeNumber   ) where  @@ -43,19 +41,11 @@ -- 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 "base" Data.Function ( fix )+import           "this" Text.Numeral.Exp ( Side(L, R) )+import qualified "this" Text.Numeral.Exp as E+import qualified "this" Text.Numeral.Grammar as G+import           "this" Text.Numeral.Misc ( intLog ) import qualified "fingertree" Data.IntervalMap.FingerTree as FT     ( Interval(Interval)     , IntervalMap, empty, insert@@ -68,9 +58,9 @@ --------------------------------------------------------------------------------  -- | A rule on how to convert a number into an expression--- language. Notice how this type is equal to the type of the '$'+-- language. Notice how this type is similar to the type of the '$' -- operator.-type Rule α β = (α → β) → (α → β)+type Rule a = (a -> E.Exp) -> (a -> E.Exp)   --------------------------------------------------------------------------------@@ -81,38 +71,37 @@ -- | 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+conditional :: (a -> Bool) -- ^ Predicate on input value (\"if\").+            -> Rule a -- ^ Rule to apply when predicate holds (\"then\").+            -> Rule a -- ^ Rule to apply when predicate does not hold (\"else\").+            -> Rule a+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'+-- | 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+combine :: Rule a+        -> Rule a+        -> Rule a+combine r1 r2 = \f n -> case r1 f n of+                          E.Unknown -> r2 f n+                          x         -> x  -- | Transform a value before it is given to a rule.-mapRule ∷ (α → α) → Rule α β → Rule α β-mapRule g r = \f n → r f (g n)+mapRule :: (a -> a) -> Rule a -> Rule a+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+findRule :: (Ord a, Num a)+         => (a, Rule a)   -- ^ First interval rule.+         -> [(a, Rule a)] -- ^ Interval rule list.+         -> a             -- ^ Upper bound of the last interval.+         -> Rule a+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 @@ -126,8 +115,8 @@ -- -- >>> (fix unknown) (3 :: Integer) :: Exp -- Unknown-unknown ∷ (E.Unknown β) ⇒ Rule α β-unknown _ _ = E.unknown+unknown :: Rule a+unknown _ = const E.Unknown  -- | The literal rule. Converts its argument into a 'E.lit'eral -- expression.@@ -143,8 +132,8 @@ -- Lit 3 -- >>> (fix lit) (3 :: Integer) :: Exp -- Lit 3-lit ∷ (Integral α, E.Lit β) ⇒ Rule α β-lit = const $ E.lit ∘ fromIntegral+lit :: (Integral a) => Rule a+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@@ -152,8 +141,8 @@ -- -- >>> 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)+lit1 :: (Integral a) => Rule a+lit1 = const $ \n -> E.Lit 1 `E.Mul` E.Lit (fromIntegral n)  -- | --@@ -161,10 +150,10 @@ -- 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)+pos :: (Ord a, Num a) => Rule a+pos f n | n < 0     = E.Neg $ f (abs n)         | n > 0     = f n-        | otherwise = E.lit 0+        | otherwise = E.Lit 0  -- | --@@ -172,202 +161,208 @@ -- 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+checkPos :: (Ord a, Num a) => Rule a+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+             | otherwise = E.Lit 0 --- | Changes the inflection of a subexpression.-inflection ∷ (E.Inflection β) ⇒ (E.Inf β → E.Inf β) → Rule α β-inflection changeInf = \f n → E.inflection changeInf $ f n+-- -- | Changes the inflection of a subexpression.+-- inflection :: (E.Inflection b) => (Inflection -> Inflection) -> Rule a+-- 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)+add :: (Num a) => a -> Side -> Rule a+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 :: (Integral a) => a -> Side -> Side -> Rule a 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+    \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 :: (Integral a) => a -> Side -> Side -> Rule a 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+    \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+     (⊡) = 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)+sub :: (Integral a) => a -> Rule a+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 :: (Integral a)+       => Rule a                        -- ^ lit rule+       -> (a -> Side -> Rule a)         -- ^ add rule+       -> (a -> Side -> Side -> Rule a) -- ^ mul rule+       -> a -> a -> Side -> Side -> Rule a 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+       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 :: (Integral a) => a -> a -> Side -> Side -> Rule a step = mkStep lit add mul -step1 ∷ (Integral α, E.Unknown β, E.Lit β, E.Add β, E.Mul β)-      ⇒ α → α → Side → Side → Rule α β+step1 :: (Integral a) => a -> a -> Side -> Side -> Rule a 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_ :: forall a. (Integral a)+          => ( (a -> E.Exp) -- Parent rule.+             -> a       -- First multiplication value (not converted).+             -> E.Exp   -- Second multiplication value (scale step,+                        -- already converted).+             -> Side    -- Multiplication side.+             -> E.Exp+             )      -- ^ Performs the multiplication.+          -> a      -- ^ Base.+          -> a      -- ^ Offset.+          -> Side   -- ^ Add side.+          -> Side   -- ^ Mul side.+          -> Rule a -- ^ Big num rule.+          -> Rule a 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+    \f n -> let rank = (intLog n - offset) `div` base -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 →+                base' :: Integer+                base' = fromIntegral base++                offset' :: Integer+                offset' = fromIntegral offset++                rankExp :: E.Exp+                rankExp = (fix bigNumRule) rank++                m, a :: a+                (m, a) = n `divMod` E.evalScale base offset rank++                scale' :: E.Exp+                scale' = E.Scale base' offset' rankExp++                mval = doMul f m scale' mSide++            in case rankExp of+                 E.Unknown -> E.Unknown+                 _ -> if a == 0+                      then mval+                      else (flipIfR aSide E.Add) (f a) mval++mulScale :: (Integral a)+         => a      -- ^ Base.+         -> a      -- ^ Offset.+         -> Side   -- ^ Add side.+         -> Side   -- ^ Mul side.+         -> Rule a -- ^ Big num rule.+         -> Rule a+mulScale = mulScale_ $ \f m scale' mSide ->                          case m of-                           1 → scale'-                           _ → (flipIfR mSide E.mul) (f m) scale'+                           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'+mulScale1 :: (Integral a)+          => a      -- ^ Base.+          -> a      -- ^ Offset.+          -> Side   -- ^ Add side.+          -> Side   -- ^ Mul side.+          -> Rule a -- ^ Big num rule.+          -> Rule a+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 :: (Integral a)+           => Side   -- ^ Add side.+           -> Side   -- ^ Mul side.+           -> Rule a -- ^ Big num rule.+           -> Rule a 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 :: (Integral a)+            => Side   -- ^ Add side.+            -> Side   -- ^ Mul side.+            -> Rule a -- ^ Big num rule.+            -> Rule a 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 :: (Integral a)+          => Side   -- ^ Add side.+          -> Side   -- ^ Mul side.+          -> Rule a -- ^ Big num rule.+          -> Rule a 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 :: (Integral a)+           => Side   -- ^ Add side.+           -> Side   -- ^ Mul side.+           -> Rule a -- ^ Big num rule.+           -> Rule a 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 :: (Integral a)+               => Side   -- ^ Add side.+               -> Side   -- ^ Mul side.+               -> Rule a -- ^ Big num rule.+               -> Rule a pelletierScale aSide mSide bigNumRule =-    conditional (\n → even $ intLog n `div` 3)+    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 :: (Integral a)+                => Side   -- ^ Add side.+                -> Side   -- ^ Mul side.+                -> Rule a -- ^ Big num rule.+                -> Rule a pelletierScale1 aSide mSide bigNumRule =-    conditional (\n → even $ intLog n `div` 3)+    conditional (\n -> even $ intLog n `div` 3)                 (mulScale1 6 0 aSide mSide bigNumRule)                 (mulScale1 6 3 aSide mSide bigNumRule)   --------------------------------------------------------------------------------+-- Grammar Rules+--------------------------------------------------------------------------------++changeCase :: Maybe G.Case -> Rule a+changeCase mbCase = \f n -> E.ChangeCase mbCase $ f n++changeGender :: Maybe G.Gender -> Rule a+changeGender mbGender = \f n -> E.ChangeGender mbGender $ f n++changeNumber :: Maybe G.Number -> Rule a+changeNumber mbNumber = \f n -> E.ChangeNumber mbNumber $ f n++-------------------------------------------------------------------------------- -- Miscellaneous -------------------------------------------------------------------------------- -flipIfR ∷ Side → (α → α → α) → (α → α → α)+flipIfR :: Side -> (a -> a -> a) -> (a -> a -> a) flipIfR L = id flipIfR R = flip -mkIntervalList ∷ (Num a) ⇒ (a, b) → [(a, b)] → a → [((a, a), b)]+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 :: (Ord v) => [((v, v), a)] -> FT.IntervalMap v a mkIntervalMap = foldr ins FT.empty   where ins ((lo, hi), n) = FT.insert (FT.Interval lo hi) n-