-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Arbitrary-base type-level digits -- -- 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. @package type-digits @version 0.3 -- | The parameters for the type-digits package. module Type.Digits.Aux -- | The names of the digits. digitStrings :: [String] -- | The number of digits. radix :: Num i => i data Proxy a Proxy :: Proxy a -- | Type-level numerals built from type-level digits of an arbitrary -- radix. module Type.Digits.Stage0 data Digit DigitStop :: Digit T00 :: Digit -> Digit T01 :: Digit -> Digit T02 :: Digit -> Digit T03 :: Digit -> Digit T04 :: Digit -> Digit T05 :: Digit -> Digit T06 :: Digit -> Digit T07 :: Digit -> Digit T08 :: Digit -> Digit T09 :: Digit -> Digit T0A :: Digit -> Digit T0B :: Digit -> Digit T0C :: Digit -> Digit T0D :: Digit -> Digit T0E :: Digit -> Digit T0F :: Digit -> Digit T10 :: Digit -> Digit T11 :: Digit -> Digit T12 :: Digit -> Digit T13 :: Digit -> Digit T14 :: Digit -> Digit T15 :: Digit -> Digit T16 :: Digit -> Digit T17 :: Digit -> Digit T18 :: Digit -> Digit T19 :: Digit -> Digit T1A :: Digit -> Digit T1B :: Digit -> Digit T1C :: Digit -> Digit T1D :: Digit -> Digit T1E :: Digit -> Digit T1F :: Digit -> Digit T20 :: Digit -> Digit T21 :: Digit -> Digit T22 :: Digit -> Digit T23 :: Digit -> Digit T24 :: Digit -> Digit T25 :: Digit -> Digit T26 :: Digit -> Digit T27 :: Digit -> Digit T28 :: Digit -> Digit T29 :: Digit -> Digit T2A :: Digit -> Digit T2B :: Digit -> Digit T2C :: Digit -> Digit T2D :: Digit -> Digit T2E :: Digit -> Digit T2F :: Digit -> Digit T30 :: Digit -> Digit T31 :: Digit -> Digit T32 :: Digit -> Digit T33 :: Digit -> Digit T34 :: Digit -> Digit T35 :: Digit -> Digit T36 :: Digit -> Digit T37 :: Digit -> Digit T38 :: Digit -> Digit T39 :: Digit -> Digit T3A :: Digit -> Digit T3B :: Digit -> Digit T3C :: Digit -> Digit T3D :: Digit -> Digit T3E :: Digit -> Digit T3F :: Digit -> Digit T40 :: Digit -> Digit T41 :: Digit -> Digit T42 :: Digit -> Digit T43 :: Digit -> Digit T44 :: Digit -> Digit T45 :: Digit -> Digit T46 :: Digit -> Digit T47 :: Digit -> Digit T48 :: Digit -> Digit T49 :: Digit -> Digit T4A :: Digit -> Digit T4B :: Digit -> Digit T4C :: Digit -> Digit T4D :: Digit -> Digit T4E :: Digit -> Digit T4F :: Digit -> Digit T50 :: Digit -> Digit T51 :: Digit -> Digit T52 :: Digit -> Digit T53 :: Digit -> Digit T54 :: Digit -> Digit T55 :: Digit -> Digit T56 :: Digit -> Digit T57 :: Digit -> Digit T58 :: Digit -> Digit T59 :: Digit -> Digit T5A :: Digit -> Digit T5B :: Digit -> Digit T5C :: Digit -> Digit T5D :: Digit -> Digit T5E :: Digit -> Digit T5F :: Digit -> Digit T60 :: Digit -> Digit T61 :: Digit -> Digit T62 :: Digit -> Digit T63 :: Digit -> Digit T64 :: Digit -> Digit T65 :: Digit -> Digit T66 :: Digit -> Digit T67 :: Digit -> Digit T68 :: Digit -> Digit T69 :: Digit -> Digit T6A :: Digit -> Digit T6B :: Digit -> Digit T6C :: Digit -> Digit T6D :: Digit -> Digit T6E :: Digit -> Digit T6F :: Digit -> Digit T70 :: Digit -> Digit T71 :: Digit -> Digit T72 :: Digit -> Digit T73 :: Digit -> Digit T74 :: Digit -> Digit T75 :: Digit -> Digit T76 :: Digit -> Digit T77 :: Digit -> Digit T78 :: Digit -> Digit T79 :: Digit -> Digit T7A :: Digit -> Digit T7B :: Digit -> Digit T7C :: Digit -> Digit T7D :: Digit -> Digit T7E :: Digit -> Digit T7F :: Digit -> Digit -- | Type-level numerals built from type-level digits of an arbitrary -- radix. module Type.Digits.Stage1 digitNames :: [Name] digitTypes :: [Type] digitStopName :: Name digitStopType :: Type -- | Type-level numerals built from type-level digits of an arbitrary -- radix. module Type.Digits -- | The names of the digits. digitStrings :: [String] -- | The number of digits. radix :: Num i => i data Digit -- | Convert a number to the name of the corresponding digit -- error if -- the argument is out of range. digit :: (Show a, Eq a, Num a) => a -> Name -- | Give a list of digit names, and a base type, yields a type. toType :: [Name] -> Type -> Type -- | toType_ = ($ PromotedT 'DigitStop) . toType. toType_ :: [Name] -> Type -- |
-- toDigits f = toType . f --toDigits :: (a -> [Name]) -> a -> Type -> Type -- | toDigits_ = (($ PromotedT 'DigitStop) .) . toDigits. toDigits_ :: (a -> [Name]) -> a -> Type -- | Converts an Integral to a type-level numeral using as many -- digits as it takes that particular number. flexible :: (Show a, Eq a, Integral a) => a -> [Name] -- | Converts a Bounded Integral to a type-level numeral -- using exactly the number of digits it takes to represent each value of -- that type uniquely. fixed :: (Bounded a, Show a, Eq a, Integral a) => a -> [Name] -- |
-- flexible' = flexible . fromEnum --flexible' :: Enum a => a -> [Name] -- |
-- fixed' = fixed . fromEnum --fixed' :: Enum a => a -> [Name] -- | Pads its second argument so that the resulting length is its first -- argument; fails if the second argument is already larger. exactly :: Int -> [Name] -> [Name] digitNames :: [Name] digitTypes :: [Type] digitStopName :: Name digitStopType :: Type