module Text.Numeral.Language.HOP
(
entry
, cardinal
, struct
, bounds
) where
import "base" Data.Function ( ($), const, fix )
import "base" Data.Maybe ( Maybe(Just) )
import "base" Prelude ( Integral, (), negate )
import "base-unicode-symbols" Data.Function.Unicode ( (∘) )
import "base-unicode-symbols" Data.List.Unicode ( (∈) )
import "base-unicode-symbols" Data.Monoid.Unicode ( (⊕) )
import qualified "containers" Data.Map as M ( fromList, lookup )
import "this" Text.Numeral
import qualified "this" Text.Numeral.Exp as E
import "this" Text.Numeral.Entry
import "this" Text.Numeral.Render.Utils ( mulCtx )
import "text" Data.Text ( Text )
entry ∷ Entry
entry = emptyEntry
{ entIso639_3 = Just "hop"
, entNativeNames = ["Hopilàvayi"]
, entEnglishName = Just "Hopi"
, entCardinal = Just Conversion
{ toNumeral = cardinal
, toStructure = struct
}
}
cardinal ∷ (Integral α, E.Scale α)⇒ i → α → Maybe Text
cardinal inf = cardinalRepr inf ∘ struct
struct ∷ ( Integral α
, E.Unknown β, E.Lit β, E.Add β, E.Mul β
)
⇒ α → β
struct = fix
$ findRule ( 0, lit)
[ (11, add 10 R)
, (20, lit)
, (21, add 20 R)
, (30, mul 10 R L)
]
(100)
bounds ∷ (Integral α) ⇒ (α, α)
bounds = (1, 100)
cardinalRepr ∷ i → Exp i → Maybe Text
cardinalRepr = render defaultRepr
{ reprValue = \inf n → M.lookup n (syms inf)
, reprAdd = Just (⊞)
, reprAddCombine = Just addCombine
, reprMul = Just $ \_ _ _ → " "
}
where
(Lit n ⊞ _) _ | n ∈ [10, 20] = " niikyang "
(Mul _ (Lit 10) ⊞ _) _ = " niikyang "
(_ ⊞ _) _ = " "
addCombine a x (Lit n) y _ | n ∈ [10, 20] = x ⊕ a ⊕ y ⊕ " siikya’ta"
addCombine a x (Mul _ (Lit 10)) y _ = x ⊕ a ⊕ y ⊕ " siikya’ta"
addCombine a x _ y _ = x ⊕ a ⊕ y
syms _ =
M.fromList
[ (1, \c → case c of
CtxAdd {} → "suk"
_ → "suukya’"
)
, (2, \c → case c of
CtxAdd {} → "löqmuy"
_ → "lööyöm"
)
, (3, \c → case c of
CtxAdd {} → "paykomuy"
CtxMul {} → "payiv"
_ → "pàayom"
)
, (4, \c → case c of
CtxAdd {} → "naalöqmuy"
CtxMul {} → "naalöv"
_ → "naalöyöm"
)
, (5, mulCtx 10 "tsivotsikiv" $ const "tsivot")
, (6, mulCtx 10 "navaysikiv" $ const "navay")
, (7, mulCtx 10 "tsange’sikiv" $ const "tsange’")
, (8, mulCtx 10 "nanalsikiv" $ const "nanalt")
, (9, mulCtx 10 "peve’sikiv" $ const "pevt")
, (10, \c → case c of
CtxMul L _ _ → "palotsikiv"
_ → "pakwt"
)
, (20, const "sunat")
]