Digits

package digits
package
Converts integers to lists of digits and back. Version 0.2
floatDigits :: RealFloat a => a -> Int
base Prelude
floatToDigits :: RealFloat a => Integer -> a -> ([Int], Int)
base Numeric
floatToDigits takes a base and a non-negative RealFloat number, and returns a list of digits and an exponent. In particular, if x>=0, and > floatToDigits base x = ([d1,d2,...,dn], e) then *  >= *  = 0.d1d2...dn * (base** *  <= di <= base
lexDigits :: ReadS String
base Numeric
Reads a non-empty string of decimal digits.
package type-digits
package
This is a workaround until type-level literals (specifically naturals) are more fully supported. The main difference is that these types-level digits and numerals can be inspected/case-discriminated within type family instances. See the type-ord and type-cereal packages for use cases; they ultimately support the yoko package. Arbitrary type-level digits, for when the radix itself doesn't actually matter. It's currently base-128, because that seemed to best expedite the compilation of the modules with which I using this package. Please let me know what you find if you experiment with this. Type.Digits.radix is the (arbitrary) radix. Type.Digits.digit computes the NameG of a digit from its value (assuming its less than the radix). Combinators are provided to compute a full type-level numeral from values (potentially) larger than the radix. The digits themselves all take less significant numeral as an argument. I chose this over minimal digits in promoted lists because I wanted to keep the actual encoding of type-level numeral smaller; they get quite large with some of my uses and the type family computation becomes quite slow. Version 0.3