{-# LANGUAGE PackageImports #-} module Text.Numeral ( -- * Overview -- $overview -- ** Expression language -- $dsl -- ** Rules -- $rules -- ** Rendering -- $render module Text.Numeral.Exp.Reified , module Text.Numeral.Render , module Text.Numeral.Rules ) where ------------------------------------------------------------------------------- -- Imports ------------------------------------------------------------------------------- import "this" Text.Numeral.Exp.Reified import "this" Text.Numeral.Render import "this" Text.Numeral.Rules ------------------------------------------------------------------------------- -- Documentation ------------------------------------------------------------------------------- {- $overview The general idea behind this package is to take a number, convert that number to an abstract representation of its spoken form and finally render that representation to a 'Text' value. -} {- $dsl Numerals are represented by a small expression language defined in the "Text.Numeral.Exp" module. This language is also reified as the concrete type 'Exp' in the "Text.Numeral.Exp.Reified" module. -} {- $rules Conversion from numbers to numerals is the responsibility of rules. The 'Rule' type itself and a number of useful rules are defined in the "Text.Numeral.Rules" module. All rules are completely polymorphic in their types. Their result types are only constrained by the type classes that make up the numeral expression language. -} {- $render Finally, the "Text.Numeral.Render" module is responsible for converting the numeral expression language to a 'Text' value. This happens via the 'render' function. Render is parametrised with a 'Repr' value and with an 'Inflection'. The 'Repr' contains all the knowledge on how to convert the abstract expression to a concrete 'Text' value. The 'Inflection' is used for languages where number words change based on a number of grammatical categories such as case, gender or number. The expression itself is passed as a concrete 'Exp' value. -}