module Text.Numeral.Language.FI
(
entry
, cardinal
, ordinal
, struct
, bounds
) where
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 )
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)
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
"nolla" "nolla"
"nollan" "nollaa"
"nollana" "nollaksi"
"nollassa" "nollasta"
"nollaan" "nollalla"
"nollalta" "nollalle"
"nollatta"
"?"
"nollat" "nollat"
"nollien" "nollia"
"nollina" "nolliksi"
"nollissa" "nollista"
"nolliin" "nollilla"
"nollilta" "nollille"
"nollitta" "nolline"
"nollin"
"?"
)
, (1, \c → infForms inf c
"yksi" "yksi"
"yhden" "yhtä"
"yhtenä" "yhdeksi"
"yhdessä" "yhdestä"
"yhteen" "yhdellä"
"yhdeltä" "yhdelle"
"yhdettä"
(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 → "?"
)
"yhdet" "yhdet"
"yksien" "yksiä"
"yksinä" "yksiksi"
"yksissä" "yksistä"
"yksiin" "yksillä"
"yksiltä" "yksille"
"yksittä" "yksine"
"yksin"
(case inf of
_ | G.isDistributive inf → "yksittäin"
| otherwise → "?"
)
)
, (2, \c → infForms inf c
"kaksi" "kaksi"
"kahden" "kahta"
"kahtena" "kahdeksi"
"kahdessa" "kahdesta"
"kahteen" "kahdella"
"kahdelta" "kahdelle"
"kahdetta"
(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 → "?"
)
"kahdet" "kahdet"
"kaksien" "kaksia"
"kaksina" "kaksiksi"
"kaksissa" "kaksista"
"kaksiin" "kaksilla"
"kaksilta" "kaksille"
"kaksitta" "kaksine"
"kaksin"
(case inf of
_ | G.isDistributive inf → "kaksittain"
| otherwise → "?"
)
)
, (3, \c → infForms inf c
"kolme" "kolme"
"kolmen" "kolmea"
"kolmena" "kolmeksi"
"kolmessa" "kolmesta"
"kolmeen" "kolmella"
"kolmelta" "kolmelle"
"kolmetta"
(case inf of
_ | G.isInstructive inf → "kolmen"
| G.isLative inf → "kolmia"
| G.isMultiplicative inf → "kolmesti"
| otherwise → "?"
)
"kolmet" "kolmet"
"kolmien" "kolmia"
"kolmina" "kolmiksi"
"kolmissa" "kolmista"
"kolmiin" "kolmilla"
"kolmilta" "kolmille"
"kolmitta" "kolmine"
"kolmin"
(case inf of
_ | G.isDistributive inf → "kolmittain"
| G.isDistributiveTemporal inf → "kolmisin"
| otherwise → "?"
)
)
, (4, \c → infForms inf c
"neljä" "neljä"
"neljän" "neljää"
"neljänä" "neljäksi"
"neljässä" "neljästä"
"neljään" "neljällä"
"neljältä" "neljälle"
"neljättä"
"?"
"neljät" "neljät"
"neljien" "neljiä"
"neljinä" "neljiksi"
"neljissä" "neljistä"
"neljiin" "neljillä"
"neljiltä" "neljille"
"neljittä" "neljine"
"neljin"
"?"
)
, (5, \c → infForms inf c
"viisi" "viisi"
"viiden" "viittä"
"viitenä" "viideksi"
"viidessä" "viidestä"
"viiteen" "viidellä"
"viideltä" "viidelle"
"viidettä"
"?"
"viidet" "viidet"
"viisien" "viisiä"
"viisinä" "viisiksi"
"viisissä" "viisistä"
"viisiin" "viisillä"
"viisiltä" "viisille"
"viisittä" "viisine"
"viisin"
"?"
)
, (6, \c → infForms inf c
"kuusi" "kuusi"
"kuuden" "kuutta"
"kuutena" "kuudeksi"
"kuudessa" "kuudesta"
"kuuteen" "kuudella"
"kuudelta" "kuudelle"
"kuudetta"
"?"
"kuudet" "kuudet"
"kuusien" "kuusia"
"kuusina" "kuusiksi"
"kuusissa" "kuusista"
"kuusiin" "kuusilla"
"kuusilta" "kuusille"
"kuusitta" "kuusine"
"kuusin"
"?"
)
, (7, \c → infForms inf c
"seitsemän" "seitsemän"
"seitsemän" "seitsemää"
"seitsemänä" "seitsemäksi"
"seitsemässä" "seitsemästä"
"seitsemään" "seitsemällä"
"seitsemältä" "seitsemälle"
"seitsemättä"
"?"
"seitsemät" "seitsemät"
"seitsemien" "seitsemiä"
"seitseminä" "seitsemiksi"
"seitsemissä" "seitsemistä"
"seitsemiin" "seitsemillä"
"seitsemiltä" "seitsemille"
"seitsemittä" "seitsemine"
"seitsemin"
"?"
)
, (8, \c → infForms inf c
"kahdeksan" "kahdeksan"
"kahdeksan" "kahdeksaa"
"kahdeksana" "kahdeksaksi"
"kahdeksassa" "kahdeksasta"
"kahdeksaan" "kahdeksalla"
"kahdeksalta" "kahdeksalle"
"kahdeksatta"
"?"
"kahdeksat" "kahdeksat"
"kahdeksien" "kahdeksia"
"kahdeksina" "kahdeksiksi"
"kahdeksissa" "kahdeksista"
"kahdeksiin" "kahdeksilla"
"kahdeksilta" "kahdeksille"
"kahdeksitta" "kahdeksine"
"kahdeksin"
"?"
)
, (9, \c → infForms inf c
"yhdeksän" "yhdeksän"
"yhdeksän" "yhdeksää"
"yhdeksänä" "yhdeksäksi"
"yhdeksässä" "yhdeksästä"
"yhdeksään" "yhdeksällä"
"yhdeksältä" "yhdeksälle"
"yhdeksättä"
"?"
"yhdeksät" "yhdeksät"
"yhdeksien" "yhdeksiä"
"yhdeksinä" "yhdeksiksi"
"yhdeksissä" "yhdeksistä"
"yhdeksiin" "yhdeksillä"
"yhdeksiltä" "yhdeksille"
"yhdeksittä" "yhdeksine"
"yhdeksin"
"?"
)
, (10, \c → case c of
CtxAdd _ (Lit _) _ → "toista"
_ → infForms inf c
"kymmenen" "kymmenen"
"kymmenen" "kymmentä"
"kymmenenä" "kymmeneksi"
"kymmenessä" "kymmenestä"
"kymmeneen" "kymmenellä"
"kymmeneltä" "kymmenelle"
"kymmenettä"
"?"
"kymmenet" "kymmenet"
"kymmenien" "kymmeniä"
"kymmeninä" "kymmeniksi"
"kymmenissä" "kymmenistä"
"kymmeniin" "kymmenillä"
"kymmeniltä" "kymmenille"
"kymmenittä" "kymmenine"
"kymmenin"
"?"
)
, (100, \c → case c of
CtxMul _ (Lit n) _
| n ≤ 9 → "sataa"
_ → infForms inf c
"sata" "sata"
"sadan" "sataa"
"satana" "sadaksi"
"sadassa" "sadasta"
"sataan" "sadalla"
"sadalta" "sadalle"
"sadatta"
"?"
"sadat" "sadat"
"satojen" "satoja"
"satoina" "sadoiksi"
"sadoissa" "sadoista"
"satoihin" "sadoilla"
"sadoilta" "sadoille"
"sadoitta" "satoine"
"sadoin"
"?"
)
, (1000, \c → case c of
CtxMul {} → "tuhatta"
_ → infForms inf c
"tuhat" "tuhat"
"tuhannen" "tuhatta"
"tuhantena" "tuhanneksi"
"tuhannessa" "tuhannesta"
"tuhanteen" "tuhannella"
"tuhannelta" "tuhannelle"
"tuhannetta"
"?"
"tuhannet" "tuhannet"
"tuhansien" "tuhansia"
"tuhansina" "tuhansiksi"
"tuhansissa" "tuhansista"
"tuhansiin" "tuhansilla"
"tuhansilta" "tuhansille"
"tuhansitta" "tuhansine"
"tuhansin"
"?"
)
]
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
"nollas" "nollas"
"nollannen" "nollatta"
"nollantena" "nollanneksi"
"nollannessa" "nollannesta"
"nollanteen" "nollannella"
"nollannelta" "nollannelle"
"nollannetta"
"?"
"nollannet" "nollannet"
"nollansien" "nollansia"
"nollansina" "nollansiksi"
"nollansissa" "nollansista"
"nollansiin" "nollansilla"
"nollansilta" "nollansille"
"nollansitta" "nollansine"
"nollansin"
"?"
)
, (1, \c → case c of
CtxAdd _ (Lit 10) _ →
infForms inf c
"yhdes" "yhdes"
"yhdennen" "yhdettä"
"yhdennessä" "yhdenneksi"
"yhdennessä" "yhdennestä"
"yhdenteen" "yhdennellä"
"yhdenneltä" "yhdennelle"
"yhdennettä"
"?"
"yhdennet" "yhdennet"
"yhdensien" "yhdensiä"
"yhdensinä" "yhdensiksi"
"yhdensissä" "yhdensistä"
"yhdensiin" "yhdensillä"
"yhdensitlä" "yhdensiin"
"yhdensittä" "yhdensine"
"yhdensin"
"?"
_ → infForms inf c
"ensimmäinen" "ensimmäinen"
"ensimmäisen" "ensimmäistä"
"ensimmmäisenä" "ensimmäiseksi"
"ensimmäisessä" "ensimmäisestä"
"ensimmäiseen" "ensimmäisellä"
"ensimmäiseltä" "ensimmäiselle"
"ensimmäisettä"
"?"
"ensimmäiset" "ensimmäiset"
"ensimmäisten" "ensimmäisiä"
"ensimmäisinä" "ensimmäisiksi"
"ensimmäisissä" "ensimmäisistä"
"ensimmäisiin" "ensimmäisillä"
"ensimmäisiltä" "ensimmäisille"
"ensimmäisittä" "ensimmäisine"
"ensimmäisin"
"?"
)
, (2, \c → case c of
CtxAdd _ (Lit 10) _ →
infForms inf c
"kahdes" "kahdes"
"kahdennen" "kahdetta"
"kahdentena" "kahdenneksi"
"kahdennessa" "kahdennesta"
"kahdenteen" "kahdennella"
"kahdennelta" "kahdennelle"
"kahdennetta"
"?"
"kahdennet" "kahdennet"
"kahdensien" "kahdensia"
"kahdensina" "kahdensiksi"
"kahdensissa" "kahdensista"
"kahdensiin" "kahdensilla"
"kahdensilta" "kahdensille"
"kahdensitta" "kahdensine"
"kahdensin"
"?"
_ → infForms inf c
"toinen" "toinen"
"toisen" "toista"
"toisena" "toiseksi"
"toisessa" "toisesta"
"toiseen" "toisella"
"toiselta" "toiselle"
"toisetta"
"?"
"toiset" "toiset"
"toisten" "toisia"
"toisina" "toisiksi"
"toisissa" "toisista"
"toisiin" "toisilla"
"toisilta" "toisille"
"toisitta" "toisine"
"toisin"
"?"
)
, (3, \c → infForms inf c
"kolmas" "kolmas"
"kolmannen" "kolmatta"
"kolmantena" "kolmanneksi"
"kolmannessa" "kolmannesta"
"kolmanteen" "kolmannella"
"kolmannelta" "kolmannelle"
"kolmannetta"
"?"
"kolmannet" "kolmannet"
"kolmansien" "kolmansia"
"kolmansina" "kolmansiksi"
"kolmansissa" "kolmansista"
"kolmansiin" "kolmansilla"
"kolmansilta" "kolmansille"
"kolmansitta" "kolmansine"
"kolmansin"
"?"
)
, (4, \c → infForms inf c
"neljäs" "neljäs"
"neljännen" "neljättä"
"neljäntenä" "neljänneksi"
"neljännessä" "neljännestä"
"neljänteen" "neljännellä"
"neljänneltä" "neljännelle"
"neljännettä"
(case inf of
_ | G.isComitative inf → "neljänsine"
| G.isInstructive inf → "neljänsin"
| otherwise → "?"
)
"neljännet" "neljännet"
"neljänsien" "neljänsiä"
"neljänsinä" "neljänsiksi"
"neljänsissä" "neljänsistä"
"neljänsiin" "neljänsillä"
"neljänsiltä" "neljänsille"
"neljänsittä" "neljänsine"
"neljänsin"
"?"
)
, (5, \c → infForms inf c
"viides" "viides"
"viidennen" "viidettä"
"viidentenä" "viidenneksi"
"viidennessä" "viidennestä"
"viidenteen" "viidennellä"
"viidenneltä" "viidennelle"
"viidennettä"
"?"
"viidennet" "viidennet"
"viidensien" "viidensiä"
"viidensinä" "viidensiksi"
"viidensissä" "viidensistä"
"viidensiin" "viidensillä"
"viidensiltä" "viidensille"
"viidensittä" "viidensine"
"viidensin"
"?"
)
, (6, \c → infForms inf c
"kuudes" "kuudes"
"kuudennen" "kuudetta"
"kuudentena" "kuudenneksi"
"kuudennessa" "kuudennesta"
"kuudenteen" "kuudennella"
"kuudennelta" "kuudennelle"
"kuudennetta"
"?"
"kuudennet" "kuudennet"
"kuudensien" "kuudensia"
"kuudensina" "kuudensiksi"
"kuudensissa" "kuudensista"
"kuudensiin" "kuudensilla"
"kuudensilta" "kuudensille"
"kuudensitta" "kuudensine"
"kuudensin"
"?"
)
, (7, \c → infForms inf c
"seitsemäs" "seitsemäs"
"seitsemännen" "seitsemättä"
"seitsemäntenä" "seitsemänneksi"
"seitsemännessä" "seitsemännestä"
"seitsemänteen" "seitsemännellä"
"seitsemänneltä" "seitsemännelle"
"seitsemännettä"
"?"
"seitsemännet" "seitsemännet"
"seitsemänsien" "seitsemänsiä"
"seitsemänsinä" "seitsemänsiksi"
"seitsemänsissä" "seitsemänsistä"
"seitsemänsiin" "seitsemänsillä"
"seitsemänsiltä" "seitsemänsille"
"seitsemänsittä" "seitsemänsine"
"seitsemänsin"
"?"
)
, (8, \c → infForms inf c
"kahdeksas" "kahdeksas"
"kahdeksannen" "kahdeksatta"
"kahdeksantena" "kahdeksanneksi"
"kahdeksannessa" "kahdeksannesta"
"kahdeksanteen" "kahdeksannella"
"kahdeksannelta" "kahdeksannelle"
"kahdeksannetta"
"?"
"kahdeksannet" "kahdeksannet"
"kahdeksansien" "kahdeksansia"
"kahdeksansina" "kahdeksansiksi"
"kahdeksansissa" "kahdeksansista"
"kahdeksansiin" "kahdeksansilla"
"kahdeksansilta" "kahdeksansille"
"kahdeksansitta" "kahdeksansine"
"kahdeksansin"
"?"
)
, (9, \c → infForms inf c
"yhdeksäs" "yhdeksäs"
"yhdeksännen" "yhdeksättä"
"yhdeksäntenä" "yhdeksänneksi"
"yhdeksännessä" "yhdeksännestä"
"yhdeksänteen" "yhdeksännellä"
"yhdeksänneltä" "yhdeksännelle"
"yhdeksännettä"
"?"
"yhdeksännet" "yhdeksännet"
"yhdeksänsien" "yhdeksänsiä"
"yhdeksänsinä" "yhdeksänsiksi"
"yhdeksänsissä" "yhdeksänsistä"
"yhdeksänsiin" "yhdeksänsillä"
"yhdeksänsiltä" "yhdeksänsille"
"yhdeksänsittä" "yhdeksänsine"
"yhdeksänsin"
"?"
)
, (10, \c → case c of
CtxAdd _ (Lit _) _ → "toista"
_ → infForms inf c
"kymmenes" "kymmenes"
"kymmenennen" "kymmenettä"
"kymmenentenä" "kymmenenneksi"
"kymmenennessä" "kymmenennestä"
"kymmenenteen" "kymmenennellä"
"kymmenenneltä" "kymmenennelle"
"kymmenennettä"
"?"
"kymmenennet" "kymmenennet"
"kymmenensien" "kymmenensiä"
"kymmenensinä" "kymmenensiksi"
"kymmenensissä" "kymmenensistä"
"kymmenensiin" "kymmenensillä"
"kymmenensiltä" "kymmenensille"
"kymmenensittä" "kymmenensine"
"kymmenensin"
"?"
)
, (100, \c → case c of
_ → infForms inf c
"sadas" "sadas"
"sadannen" "sadatta"
"sadantena" "sadanneksi"
"sadannessa" "sadannesta"
"sadanteen" "sadannella"
"sadannelta" "sadannelle"
"sadannetta"
"?"
"sadannet" "sadannet"
"sadansien" "sadansia"
"sadansina" "sadansiksi"
"sadansissa" "sadansista"
"sadansiin" "sadansilla"
"sadansilta" "sadansille"
"sadansitta" "sadansine"
"sadansin"
"?"
)
, (1000, \c → case c of
_ → infForms inf c
"tuhannes" "tuhannes"
"tuhannennen" "tuhannetta"
"tuhannentena" "tuhannenneksi"
"tuhannennessa" "tuhannennesta"
"tuhannenteen" "tuhannennella"
"tuhannennelta" "tuhannennelle"
"tuhannennetta"
"?"
"tuhannennet" "tuhannennet"
"tuhannensien" "tuhannensia"
"tuhannensina" "tuhannensiksi"
"tuhannensissa" "tuhannensista"
"tuhannensiin" "tuhannensilla"
"tuhannensilta" "tuhannensille"
"tuhannensitta" "tuhannensine"
"tuhannensin"
"?"
)
]
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