a\R      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRaise 10 to some power. .The (base 10) logarithm of an integral value. #A step in a scale of large values. Should be interpreted as 10 ^ (rank * base + offset). Example in English:  "quadrillion" = scale 3 3 4 Base. Offset. Rank. )One value subtracted from another value. Example in Latin: 3 "duodvgint" = lit 2 `sub` (lit 2 `mul` lit 10) Multiplication of two values. Example in English:  "thirty" = lit 3 `mul` lit 10 Addition of two values. Example in English:  "fifteen" = lit 5 `add` lit 10 Negation of a value. Example in English:  "minus two" = neg (lit 2) A literal value. Example in English:  "three" = lit 3 AAn unknown value. This is used to signal that a value can not be ) represented in the expression language. Law: isUnknown unknown == True       A side or direction, either eft or ight. Right. Left. :An expression that represents the structure of a numeral. #A step in a scale of large values. 3One expression subtracted from another expression. #Multiplication of two expressions. Addition of two expressions. Negation of an expression. A literal value. An unknown value. $Evaluates an expression to a value. Law:  e == eval e RPrecisely the  constructor. SPrecisely the  constructor. TPrecisely the  constructor. UPrecisely the  constructor. VPrecisely the  constructor. WPrecisely the  constructor. XPrecisely the  constructor.   A context in which an ression appears. Scale context. Subtraction context. Multiplication context. !Addition context. "Negation context. #3The empty context. Used for top level expressions. $A representation for numerals. A %$2 contains all the information on how to render an   ression to a string-like value. %&#Representation for unknown values. ';Renders a literal value. Not necessarily defined for every  value. (9Renders a step in a scale of large values. The arguments 9 are in order: base, offset and rank of the step and the > context of the rank. The value represented by the step is 10  ^ (rank * base + offset). );Renders a negation. This concerns the negation itself, not  the thing being negated. *<Renders an addition. This concerns the addition itself, not ) the things being added. For example: In "one hundred and  eighty"6 this function would be responsible for rendering the  "and". +;Renders a multiplication. This concerns the multiplication * itself, not the things being multiplied. ,5Renders a subtraction. This concerns the subtraction * itself, not the things being subtracted. -5Combines a negation and the thing being negated. For  example: this would combine "minus" and "three" into  " minus three". .1Combines an addition and the things being added. /;Combines a multiplication and the things being multiplied. 08Combines a subtraction and the things being subtracted. 1<Renders an expression to a string-like value according to a  certain representation. 2The default representation. >Only the combining functions are defined. The rest are either  Y or always produce Y.  !"#$%&'()*+,-./0121$%&'()*+,-./02#"! #"!  !"#$ %&'()*+,-./0%&'()*+,-./01235A rule on how to convert a number into an expression < language. Notice how this type is equal to the type of the Z  operator. 4The ' if-then-else'. concept for rules. Applies the first rule if ? the predicate holds on the input value, otherwise applies the  second rule. Predicate on input value ("if"). $Rule to apply when predicate holds ("then"). ,Rule to apply when predicate does not hold ("else"). 53Tries to apply the first rule, if that produces an  # value it applies the second rule. 6BChooses which rule to apply to an input value based on a interval  list of rules. First interval rule. Interval rule list. "Upper bound of the last interval. 7;A rule that always fails to convert a value. It constantly  produces the  value. #(fix unknown) (3 :: Integer) :: ExpUnknown8/(pos $ lit $ fix unknown) (3 :: Integer) :: ExpLit 30(pos $ lit $ fix unknown) (-3 :: Integer) :: Exp Neg (Lit 3)94(checkPos $ lit $ fix unknown) (3 :: Integer) :: ExpLit 35(checkPos $ lit $ fix unknown) (-3 :: Integer) :: ExpUnknown:/The literal rule. Converts its argument into a  eral  expression. 'lit (fix unknown) (3 :: Integer) :: ExpLit 34In this example lit is applied to the nonsense rule "[  7"9. Lit ignores that function, which is why we can pass it % anything we want, including itself. )lit (fix undefined) (3 :: Integer) :: ExpLit 3(fix lit) (3 :: Integer) :: ExpLit 3;A variant on the :+ rule which always multiplies its argument > with 1. Useful for languages which have numerals of the form "one  hundred and three" as opposed to "hundred and three". (lit1 (fix unknown) (3 :: Integer) :: ExpMul (Lit 1) (Lit 3)<5(add 10 L $ lit $ fix unknown) (13 :: Integer) :: ExpAdd (Lit 3) (Lit 10)=7(mul 10 R L $ lit $ fix unknown) (42 :: Integer) :: Exp"Add (Mul (Lit 4) (Lit 10)) (Lit 2)>?3(sub 20 $ lit $ fix unknown) (18 :: Integer) :: ExpSub (Lit 2) (Lit 20)@ lit rule  add rule  mul rule ABCDEFGHIJ\]^3456789:;<=>?@ABCDEFGHIJ3456789:;<=>?CDEGIFHJ@AB3456789:;<=>?@ABCDEFGHIJ: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPPostfix for singular names. Postfix for plural names. Q%Postfix for singular offset 0 names. %Postfix for singular offset 0 names. #Postfix for plural offset 3 names. #Postfix for plural offset 3 names. KLMNOPQKLMNOPQKLMNOPQ_        !"#$%%&'()*+,-./0123456789: ;<=>?@ABCDEFGHIJKLMNOPQRSTUVTWXTYZ[\]^numerals-base-0.3Text.Numeral.MiscText.Numeral.Exp.ClassesText.Numeral.ExpText.Numeral.RenderText.Numeral.RulesText.Numeral.BigNum Text.NumeraldecintLogScalescaleSubsubMulmulAddaddNegnegLitlitUnknownunknown isUnknownSideRLExpevalCtxCtxScaleCtxSubCtxMulCtxAddCtxNegCtxEmptyRepr reprUnknown reprValue reprScalereprNegreprAddreprMulreprSubreprNegCombinereprAddCombinereprMulCombinereprSubCombinerender defaultReprRule conditionalcombinefindRuleposcheckPoslit1mul1mkStepstepstep1mulScale mulScale1 shortScale shortScale1 longScale longScale1pelletierScalepelletierScale1cardinalrule cardinalReprsymMapforms scaleRepr pelletierRepr $fScaleExp$fSubExp$fMulExp$fAddExp$fNegExp$fLitExp $fUnknownExpbase Data.MaybeNothingGHC.Base$ Data.FunctionfixflipIfRmkIntervalList mkIntervalMap