digit 0.5.2 → 0.6
raw patch · 43 files changed
+1410/−3230 lines, 43 filesdep ~basedep ~hedgehogdep ~papaPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base, hedgehog, papa, tasty
API changes (from Hackage documentation)
- Data.Digit.D0: instance Data.Digit.D0.D0 Data.Digit.Digit.Digit
- Data.Digit.D1: instance Data.Digit.D1.D1 Data.Digit.Digit.Digit
- Data.Digit.D2: instance Data.Digit.D2.D2 Data.Digit.Digit.Digit
- Data.Digit.D3: instance Data.Digit.D3.D3 Data.Digit.Digit.Digit
- Data.Digit.D4: instance Data.Digit.D4.D4 Data.Digit.Digit.Digit
- Data.Digit.D5: instance Data.Digit.D5.D5 Data.Digit.Digit.Digit
- Data.Digit.D6: instance Data.Digit.D6.D6 Data.Digit.Digit.Digit
- Data.Digit.D7: instance Data.Digit.D7.D7 Data.Digit.Digit.Digit
- Data.Digit.D8: instance Data.Digit.D8.D8 Data.Digit.Digit.Digit
- Data.Digit.D9: instance Data.Digit.D9.D9 Data.Digit.Digit.Digit
- Data.Digit.DA: instance Data.Digit.DA.DA Data.Digit.Digit.Digit
- Data.Digit.DB: instance Data.Digit.DB.DB Data.Digit.Digit.Digit
- Data.Digit.DC: instance Data.Digit.DC.DC Data.Digit.Digit.Digit
- Data.Digit.DD: instance Data.Digit.DD.DD Data.Digit.Digit.Digit
- Data.Digit.DE: instance Data.Digit.DE.DE Data.Digit.Digit.Digit
- Data.Digit.DF: instance Data.Digit.DF.DF Data.Digit.Digit.Digit
- Data.Digit.Da: instance Data.Digit.Da.Da Data.Digit.Digit.Digit
- Data.Digit.Db: instance Data.Digit.Db.Db Data.Digit.Digit.Digit
- Data.Digit.Dc: instance Data.Digit.Dc.Dc Data.Digit.Digit.Digit
- Data.Digit.Dd: instance Data.Digit.Dd.Dd Data.Digit.Digit.Digit
- Data.Digit.De: instance Data.Digit.De.De Data.Digit.Digit.Digit
- Data.Digit.Df: instance Data.Digit.Df.Df Data.Digit.Digit.Digit
- Data.Digit.Digit: Digit0 :: Digit
- Data.Digit.Digit: Digit1 :: Digit
- Data.Digit.Digit: Digit2 :: Digit
- Data.Digit.Digit: Digit3 :: Digit
- Data.Digit.Digit: Digit4 :: Digit
- Data.Digit.Digit: Digit5 :: Digit
- Data.Digit.Digit: Digit6 :: Digit
- Data.Digit.Digit: Digit7 :: Digit
- Data.Digit.Digit: Digit8 :: Digit
- Data.Digit.Digit: Digit9 :: Digit
- Data.Digit.Digit: DigitA :: Digit
- Data.Digit.Digit: DigitB :: Digit
- Data.Digit.Digit: DigitC :: Digit
- Data.Digit.Digit: DigitD :: Digit
- Data.Digit.Digit: DigitE :: Digit
- Data.Digit.Digit: DigitF :: Digit
- Data.Digit.Digit: Digita :: Digit
- Data.Digit.Digit: Digitb :: Digit
- Data.Digit.Digit: Digitc :: Digit
- Data.Digit.Digit: Digitd :: Digit
- Data.Digit.Digit: Digite :: Digit
- Data.Digit.Digit: Digitf :: Digit
- Data.Digit.Digit: data Digit
- Data.Digit.Digit: instance GHC.Classes.Eq Data.Digit.Digit.Digit
- Data.Digit.Digit: instance GHC.Classes.Ord Data.Digit.Digit.Digit
- Data.Digit.Digit: instance GHC.Show.Show Data.Digit.Digit.Digit
+ Data.Digit.Binary: BinDigit0 :: BinDigit
+ Data.Digit.Binary: BinDigit1 :: BinDigit
+ Data.Digit.Binary: _BinDigit0 :: Prism' BinDigit ()
+ Data.Digit.Binary: _BinDigit1 :: Prism' BinDigit ()
+ Data.Digit.Binary: data BinDigit
+ Data.Digit.Binary: instance Data.Digit.D0.D0 Data.Digit.Binary.BinDigit
+ Data.Digit.Binary: instance Data.Digit.D1.D1 Data.Digit.Binary.BinDigit
+ Data.Digit.Binary: instance GHC.Classes.Eq Data.Digit.Binary.BinDigit
+ Data.Digit.Binary: instance GHC.Classes.Ord Data.Digit.Binary.BinDigit
+ Data.Digit.Binary: instance GHC.Show.Show Data.Digit.Binary.BinDigit
+ Data.Digit.Decimal: DecDigit0 :: DecDigit
+ Data.Digit.Decimal: DecDigit1 :: DecDigit
+ Data.Digit.Decimal: DecDigit2 :: DecDigit
+ Data.Digit.Decimal: DecDigit3 :: DecDigit
+ Data.Digit.Decimal: DecDigit4 :: DecDigit
+ Data.Digit.Decimal: DecDigit5 :: DecDigit
+ Data.Digit.Decimal: DecDigit6 :: DecDigit
+ Data.Digit.Decimal: DecDigit7 :: DecDigit
+ Data.Digit.Decimal: DecDigit8 :: DecDigit
+ Data.Digit.Decimal: DecDigit9 :: DecDigit
+ Data.Digit.Decimal: _DecDigit0 :: Prism' DecDigit ()
+ Data.Digit.Decimal: _DecDigit1 :: Prism' DecDigit ()
+ Data.Digit.Decimal: _DecDigit2 :: Prism' DecDigit ()
+ Data.Digit.Decimal: _DecDigit3 :: Prism' DecDigit ()
+ Data.Digit.Decimal: _DecDigit4 :: Prism' DecDigit ()
+ Data.Digit.Decimal: _DecDigit5 :: Prism' DecDigit ()
+ Data.Digit.Decimal: _DecDigit6 :: Prism' DecDigit ()
+ Data.Digit.Decimal: _DecDigit7 :: Prism' DecDigit ()
+ Data.Digit.Decimal: _DecDigit8 :: Prism' DecDigit ()
+ Data.Digit.Decimal: _DecDigit9 :: Prism' DecDigit ()
+ Data.Digit.Decimal: data DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D0.D0 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D1.D1 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D2.D2 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D3.D3 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D4.D4 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D5.D5 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D6.D6 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D7.D7 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D8.D8 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance Data.Digit.D9.D9 Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance GHC.Classes.Eq Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance GHC.Classes.Ord Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance GHC.Enum.Bounded Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance GHC.Enum.Enum Data.Digit.Decimal.DecDigit
+ Data.Digit.Decimal: instance GHC.Show.Show Data.Digit.Decimal.DecDigit
+ Data.Digit.Enum: enumBinary :: Binary d => [d]
+ Data.Digit.Enum: enumBinaryNoZero :: BinaryNoZero d => [d]
+ Data.Digit.Enum: enumDecimal :: Decimal d => [d]
+ Data.Digit.Enum: enumDecimalNoZero :: DecimalNoZero d => [d]
+ Data.Digit.Enum: enumHEXADECIMAL :: HEXADECIMAL d => [d]
+ Data.Digit.Enum: enumHEXADECIMALNoZero :: HEXADECIMALNoZero d => [d]
+ Data.Digit.Enum: enumHexadecimal :: Hexadecimal d => [d]
+ Data.Digit.Enum: enumHexadecimalNoZero :: HexadecimalNoZero d => [d]
+ Data.Digit.Enum: enumOctal :: Octal d => [d]
+ Data.Digit.Enum: enumOctalNoZero :: OctalNoZero d => [d]
+ Data.Digit.HEXADECIMAL: HEXDigit0 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigit1 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigit2 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigit3 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigit4 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigit5 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigit6 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigit7 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigit8 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigit9 :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigitA :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigitB :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigitC :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigitD :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigitE :: HEXDigit
+ Data.Digit.HEXADECIMAL: HEXDigitF :: HEXDigit
+ Data.Digit.HEXADECIMAL: _HEXDigit0 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigit1 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigit2 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigit3 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigit4 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigit5 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigit6 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigit7 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigit8 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigit9 :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigitA :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigitB :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigitC :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigitD :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigitE :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: _HEXDigitF :: Prism' HEXDigit ()
+ Data.Digit.HEXADECIMAL: data HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D0.D0 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D1.D1 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D2.D2 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D3.D3 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D4.D4 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D5.D5 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D6.D6 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D7.D7 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D8.D8 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.D9.D9 Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.DA.DA Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.DB.DB Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.DC.DC Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.DD.DD Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.DE.DE Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance Data.Digit.DF.DF Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance GHC.Classes.Eq Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance GHC.Classes.Ord Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HEXADECIMAL: instance GHC.Show.Show Data.Digit.HEXADECIMAL.HEXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit0 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit1 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit2 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit3 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit4 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit5 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit6 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit7 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit8 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigit9 :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitA :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitB :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitC :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitD :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitE :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitF :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigita :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitb :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitc :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitd :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigite :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: HeXDigitf :: HeXDigit
+ Data.Digit.HeXaDeCiMaL: _HeXDigit0 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigit1 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigit2 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigit3 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigit4 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigit5 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigit6 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigit7 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigit8 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigit9 :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitA :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitB :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitC :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitD :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitE :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitF :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigita :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitb :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitc :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitd :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigite :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: _HeXDigitf :: Prism' HeXDigit ()
+ Data.Digit.HeXaDeCiMaL: data HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D0.D0 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D1.D1 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D2.D2 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D3.D3 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D4.D4 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D5.D5 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D6.D6 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D7.D7 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D8.D8 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.D9.D9 Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.DA.DA Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.DB.DB Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.DC.DC Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.DD.DD Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.DE.DE Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.DF.DF Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.Da.Da Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.Db.Db Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.Dc.Dc Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.Dd.Dd Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.De.De Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance Data.Digit.Df.Df Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance GHC.Classes.Eq Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance GHC.Classes.Ord Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.HeXaDeCiMaL: instance GHC.Show.Show Data.Digit.HeXaDeCiMaL.HeXDigit
+ Data.Digit.Hexadecimal: HexDigit0 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigit1 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigit2 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigit3 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigit4 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigit5 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigit6 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigit7 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigit8 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigit9 :: HexDigit
+ Data.Digit.Hexadecimal: HexDigita :: HexDigit
+ Data.Digit.Hexadecimal: HexDigitb :: HexDigit
+ Data.Digit.Hexadecimal: HexDigitc :: HexDigit
+ Data.Digit.Hexadecimal: HexDigitd :: HexDigit
+ Data.Digit.Hexadecimal: HexDigite :: HexDigit
+ Data.Digit.Hexadecimal: HexDigitf :: HexDigit
+ Data.Digit.Hexadecimal: _HexDigit0 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigit1 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigit2 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigit3 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigit4 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigit5 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigit6 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigit7 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigit8 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigit9 :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigita :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigitb :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigitc :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigitd :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigite :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: _HexDigitf :: Prism' HexDigit ()
+ Data.Digit.Hexadecimal: data HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D0.D0 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D1.D1 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D2.D2 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D3.D3 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D4.D4 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D5.D5 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D6.D6 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D7.D7 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D8.D8 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.D9.D9 Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.Da.Da Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.Db.Db Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.Dc.Dc Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.Dd.Dd Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.De.De Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance Data.Digit.Df.Df Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance GHC.Classes.Eq Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance GHC.Classes.Ord Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Hexadecimal: instance GHC.Show.Show Data.Digit.Hexadecimal.HexDigit
+ Data.Digit.Integral: _HEXDigitsIntegral :: Integral a => Either (NonEmpty HEXDigit) (NonEmpty HEXDigit) -> a
+ Data.Digit.Integral: _HeXDigitsIntegral :: Integral a => Either (NonEmpty HeXDigit) (NonEmpty HeXDigit) -> a
+ Data.Digit.Integral: binDigitsIntegral :: Integral a => Either (NonEmpty BinDigit) (NonEmpty BinDigit) -> a
+ Data.Digit.Integral: decDigitsIntegral :: Integral a => Either (NonEmpty DecDigit) (NonEmpty DecDigit) -> a
+ Data.Digit.Integral: hexDigitsIntegral :: Integral a => Either (NonEmpty HexDigit) (NonEmpty HexDigit) -> a
+ Data.Digit.Integral: integralBinDigits :: Integral a => a -> Either (NonEmpty BinDigit) (NonEmpty BinDigit)
+ Data.Digit.Integral: integralDecDigits :: Integral a => a -> Either (NonEmpty DecDigit) (NonEmpty DecDigit)
+ Data.Digit.Integral: integralHEXDigits :: Integral a => a -> Either (NonEmpty HEXDigit) (NonEmpty HEXDigit)
+ Data.Digit.Integral: integralHeXaDeCiMaL :: (Integral a, HeXaDeCiMaL d) => Review a d
+ Data.Digit.Integral: integralHeXaDeCiMaLNoZero :: (Integral a, HeXaDeCiMaLNoZero d) => Review a d
+ Data.Digit.Integral: integralHexDigits :: Integral a => a -> Either (NonEmpty HexDigit) (NonEmpty HexDigit)
+ Data.Digit.Integral: integralOctDigits :: Integral a => a -> Either (NonEmpty OctDigit) (NonEmpty OctDigit)
+ Data.Digit.Integral: octDigitsIntegral :: Integral a => Either (NonEmpty OctDigit) (NonEmpty OctDigit) -> a
+ Data.Digit.Octal: OctDigit0 :: OctDigit
+ Data.Digit.Octal: OctDigit1 :: OctDigit
+ Data.Digit.Octal: OctDigit2 :: OctDigit
+ Data.Digit.Octal: OctDigit3 :: OctDigit
+ Data.Digit.Octal: OctDigit4 :: OctDigit
+ Data.Digit.Octal: OctDigit5 :: OctDigit
+ Data.Digit.Octal: OctDigit6 :: OctDigit
+ Data.Digit.Octal: OctDigit7 :: OctDigit
+ Data.Digit.Octal: _OctDigit0 :: Prism' OctDigit ()
+ Data.Digit.Octal: _OctDigit1 :: Prism' OctDigit ()
+ Data.Digit.Octal: _OctDigit2 :: Prism' OctDigit ()
+ Data.Digit.Octal: _OctDigit3 :: Prism' OctDigit ()
+ Data.Digit.Octal: _OctDigit4 :: Prism' OctDigit ()
+ Data.Digit.Octal: _OctDigit5 :: Prism' OctDigit ()
+ Data.Digit.Octal: _OctDigit6 :: Prism' OctDigit ()
+ Data.Digit.Octal: _OctDigit7 :: Prism' OctDigit ()
+ Data.Digit.Octal: data OctDigit
+ Data.Digit.Octal: instance Data.Digit.D0.D0 Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance Data.Digit.D1.D1 Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance Data.Digit.D2.D2 Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance Data.Digit.D3.D3 Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance Data.Digit.D4.D4 Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance Data.Digit.D5.D5 Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance Data.Digit.D6.D6 Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance Data.Digit.D7.D7 Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance GHC.Classes.Eq Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance GHC.Classes.Ord Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance GHC.Enum.Bounded Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance GHC.Enum.Enum Data.Digit.Octal.OctDigit
+ Data.Digit.Octal: instance GHC.Show.Show Data.Digit.Octal.OctDigit
- Data.Digit.Natural: _NaturalDigits :: Prism' (NonEmpty Digit) Natural
+ Data.Digit.Natural: _NaturalDigits :: Prism' (NonEmpty DecDigit) Natural
- Data.Digit.Natural: digitsToNatural :: NonEmpty Digit -> Maybe Natural
+ Data.Digit.Natural: digitsToNatural :: NonEmpty DecDigit -> Maybe Natural
- Data.Digit.Natural: naturalToDigits :: Natural -> NonEmpty Digit
+ Data.Digit.Natural: naturalToDigits :: Natural -> NonEmpty DecDigit
Files
- changelog.md +21/−0
- digit.cabal +8/−7
- src/Data/Digit.hs +21/−39
- src/Data/Digit/Binary.hs +22/−38
- src/Data/Digit/Char.hs +50/−867
- src/Data/Digit/D0.hs +6/−18
- src/Data/Digit/D1.hs +6/−18
- src/Data/Digit/D2.hs +6/−19
- src/Data/Digit/D3.hs +6/−18
- src/Data/Digit/D4.hs +7/−19
- src/Data/Digit/D5.hs +6/−18
- src/Data/Digit/D6.hs +6/−18
- src/Data/Digit/D7.hs +6/−18
- src/Data/Digit/D8.hs +6/−18
- src/Data/Digit/D9.hs +6/−18
- src/Data/Digit/DA.hs +6/−18
- src/Data/Digit/DAa.hs +15/−17
- src/Data/Digit/DB.hs +6/−18
- src/Data/Digit/DBb.hs +15/−15
- src/Data/Digit/DC.hs +6/−18
- src/Data/Digit/DCc.hs +15/−15
- src/Data/Digit/DD.hs +6/−18
- src/Data/Digit/DDd.hs +15/−15
- src/Data/Digit/DE.hs +6/−18
- src/Data/Digit/DEe.hs +14/−14
- src/Data/Digit/DF.hs +6/−18
- src/Data/Digit/DFf.hs +15/−15
- src/Data/Digit/Da.hs +6/−18
- src/Data/Digit/Db.hs +6/−18
- src/Data/Digit/Dc.hs +6/−18
- src/Data/Digit/Dd.hs +6/−19
- src/Data/Digit/De.hs +6/−18
- src/Data/Digit/Decimal.hs +62/−142
- src/Data/Digit/Df.hs +6/−18
- src/Data/Digit/Digit.hs +0/−78
- src/Data/Digit/Enum.hs +169/−0
- src/Data/Digit/HEXADECIMAL.hs +92/−220
- src/Data/Digit/HeXaDeCiMaL.hs +110/−304
- src/Data/Digit/Hexadecimal.hs +92/−220
- src/Data/Digit/Integral.hs +327/−586
- src/Data/Digit/Natural.hs +32/−41
- src/Data/Digit/Octal.hs +52/−116
- test/Main.hs +130/−82
changelog.md view
@@ -1,3 +1,24 @@+0.6++* Removed the `Digit` datatype+* Added new datatypes with appropriate `D*` instances+ * `BinDigit`+ * `OctDigit`+ * `DecDigit`+ * `HexDigit`+ * `HeXDigit`+ * `HEXDigit`+* Culled most of the doctests, and leaving one or two per function to illustrate+ usage+* Juggled re-exports to make the library easier to use and to improve documentation+* Added `Data.Digit.Enum`, which contains ascending-order enumerations of the new datatypes+* Added integral conversion functions for the new datatypes++0.5.3++* Bump version of [tasty-hedgehog, hedgehog, papa]+* Updated default.nix+ 0.5.2 * Add `Data.Digit.Natural (_NaturalDigits, naturalToDigits, digitsToNatural)`
digit.cabal view
@@ -1,5 +1,5 @@ name: digit-version: 0.5.2+version: 0.6 license: BSD3 license-file: LICENCE author: Queensland Functional Programming Lab <oᴉ˙ldɟb@llǝʞsɐɥ>@@ -13,6 +13,7 @@ cabal-version: >= 1.10 build-type: Simple extra-source-files: CONTRIBUTORS, changelog.md+tested-with: GHC == 8.4.1, GHC == 8.2.2, GHC == 8.0.2, GHC == 7.10.3 description: <<http://i.imgur.com/uZnp9ke.png>> .@@ -32,7 +33,7 @@ , parsers >= 0.12.3 && < 0.13 , semigroups >= 0.12 && < 1.0 , template-haskell >= 2.8 && < 3- , papa >= 0.3 && < 0.4+ , papa >= 0.3.1 && < 0.4 , semigroupoids >= 5 && < 6 , scientific >= 0.3 && < 0.4 @@ -82,8 +83,8 @@ Data.Digit.DDd Data.Digit.DEe Data.Digit.DFf- Data.Digit.Digit Data.Digit.Char+ Data.Digit.Enum Data.Digit.Integral @@ -98,13 +99,13 @@ Haskell2010 build-depends:- base >=4.9 && <4.12+ base >=4.8 && <4.12 , lens >=4.0 && <5 , ansi-wl-pprint >=0.6 && <0.7- , hedgehog >=0.5 && <0.6- , tasty >=0.11 && <1.1+ , hedgehog >=0.5 && <0.7+ , tasty >=0.11 && <1.2 , tasty-hspec >=1.1 && <1.2- , papa >=0.3 && <0.4+ , papa >= 0.3.1 && < 0.4 , parsec >=3.1 && <3.2 , parsers >=0.12.3 && <0.13 , pretty >=1.1 && <1.2
src/Data/Digit.hs view
@@ -1,44 +1,26 @@ {-# LANGUAGE NoImplicitPrelude #-} module Data.Digit (- module D+ module Data.Digit.Binary+, module Data.Digit.Decimal+, module Data.Digit.Octal+, module Data.Digit.Hexadecimal+, module Data.Digit.HeXaDeCiMaL+, module Data.Digit.HEXADECIMAL+-- * Utilities+, module Data.Digit.Char+, module Data.Digit.Enum+, module Data.Digit.Integral+, module Data.Digit.Natural ) where -import Data.Digit.Binary as D-import Data.Digit.Decimal as D-import Data.Digit.Natural as D-import Data.Digit.Octal as D-import Data.Digit.Hexadecimal as D-import Data.Digit.HeXaDeCiMaL as D-import Data.Digit.HEXADECIMAL as D-import Data.Digit.D0 as D-import Data.Digit.D1 as D-import Data.Digit.D2 as D-import Data.Digit.D3 as D-import Data.Digit.D4 as D-import Data.Digit.D5 as D-import Data.Digit.D6 as D-import Data.Digit.D7 as D-import Data.Digit.D8 as D-import Data.Digit.D9 as D-import Data.Digit.Da as D-import Data.Digit.DA as D-import Data.Digit.Db as D-import Data.Digit.DB as D-import Data.Digit.Dc as D-import Data.Digit.DC as D-import Data.Digit.Dd as D-import Data.Digit.DD as D-import Data.Digit.De as D-import Data.Digit.DE as D-import Data.Digit.Df as D-import Data.Digit.DF as D-import Data.Digit.DAa as D-import Data.Digit.DBb as D-import Data.Digit.DCc as D-import Data.Digit.DDd as D-import Data.Digit.DEe as D-import Data.Digit.DFf as D-import Data.Digit.Digit as D-import Data.Digit.Integral as D-import Data.Digit.Char as D+import Data.Digit.Binary+import Data.Digit.Decimal+import Data.Digit.Octal+import Data.Digit.Hexadecimal+import Data.Digit.HeXaDeCiMaL+import Data.Digit.HEXADECIMAL+import Data.Digit.Char+import Data.Digit.Enum+import Data.Digit.Integral+import Data.Digit.Natural
src/Data/Digit/Binary.hs view
@@ -1,39 +1,41 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE TemplateHaskell #-} module Data.Digit.Binary(- BinaryNoZero+ BinDigit(..)+, BinaryNoZero , Binary , parseBinaryNoZero , parseBinary+-- * Prisms+, _BinDigit0+, _BinDigit1+-- * Re-exports+, module Data.Digit.D0+, module Data.Digit.D1 ) where +import Prelude (Eq, Show, Ord)+import Control.Lens.TH (makePrisms) import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.D0(D0, parse0)-import Data.Digit.D1(D1, parse1)+import Data.Digit.D0+import Data.Digit.D1 --- $setup--- >>> import Text.Parsec(parse, ParseError, eof)--- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit--- >>> import Papa+data BinDigit+ = BinDigit0+ | BinDigit1+ deriving (Show, Eq, Ord) +makePrisms ''BinDigit++instance D0 BinDigit where; d0 = _BinDigit0+instance D1 BinDigit where; d1 = _BinDigit1+ type BinaryNoZero d = D1 d --- |------ >>> parse (parseBinaryNoZero <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseBinaryNoZero "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> isn't _Right (parse parseBinaryNoZero "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "1") ==> isn't _Right (parse parseBinaryNoZero "test" [c] :: Either ParseError Digit) parseBinaryNoZero :: (BinaryNoZero d, CharParsing p) => p d@@ -43,24 +45,6 @@ type Binary d = (D0 d, BinaryNoZero d) --- |------ >>> parse (parseBinary <* eof) "test" "0" :: Either ParseError Digit--- Right 0------ >>> parse parseBinary "test" "0xyz" :: Either ParseError Digit--- Right 0------ >>> parse (parseBinary <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseBinary "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> isn't _Right (parse parseBinary "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "01") ==> isn't _Right (parse parseBinary "test" [c] :: Either ParseError Digit) parseBinary :: (Binary d, CharParsing p) => p d
src/Data/Digit/Char.hs view
@@ -1,16 +1,22 @@ {-# LANGUAGE NoImplicitPrelude #-} module Data.Digit.Char(+-- * Binary charBinaryNoZero , charBinary+-- * Octal , charOctalNoZero , charOctal+-- * Decimal , charDecimalNoZero , charDecimal+-- * Hexadecimal , charHexadecimalNoZero , charHexadecimal+-- * HEXADECIMAL , charHEXADECIMALNoZero , charHEXADECIMAL+-- * HeXaDeCiMaL , charHeXaDeCiMaLNoZero , charHeXaDeCiMaL ) where@@ -22,43 +28,19 @@ import Data.Digit.Hexadecimal as D import Data.Digit.HeXaDeCiMaL as D import Data.Digit.HEXADECIMAL as D-import Data.Digit.D0 as D-import Data.Digit.D1 as D-import Data.Digit.D2 as D-import Data.Digit.D3 as D-import Data.Digit.D4 as D-import Data.Digit.D5 as D-import Data.Digit.D6 as D-import Data.Digit.D7 as D-import Data.Digit.D8 as D-import Data.Digit.D9 as D-import Data.Digit.Da as D-import Data.Digit.DA as D-import Data.Digit.Db as D-import Data.Digit.DB as D-import Data.Digit.Dc as D-import Data.Digit.DC as D-import Data.Digit.Dd as D-import Data.Digit.DD as D-import Data.Digit.De as D-import Data.Digit.DE as D-import Data.Digit.Df as D-import Data.Digit.DF as D import Papa -- $setup--- >>> import Data.Digit.Digit+-- >>> import Data.Digit -- | ----- >>> '1' ^? charBinaryNoZero :: Maybe Digit--- Just 1+-- >>> '1' ^? charBinaryNoZero :: Maybe BinDigit+-- Just BinDigit1 ----- >>> charBinaryNoZero # Digit1+-- >>> charBinaryNoZero # BinDigit1 -- '1'------ prop> \c -> c /= '1' ==> (c ^? charBinaryNoZero == Nothing) charBinaryNoZero :: BinaryNoZero d => Prism'@@ -69,19 +51,11 @@ -- | ----- >>> '0' ^? charBinary :: Maybe Digit--- Just 0------ >>> '1' ^? charBinary :: Maybe Digit--- Just 1+-- >>> '0' ^? charBinary :: Maybe BinDigit+-- Just BinDigit0 ----- >>> charBinary # Digit0 :: Char+-- >>> charBinary # BinDigit0 :: Char -- '0'------ >>> charBinary # Digit1 :: Char--- '1'------ prop> \c -> (c `notElem` "01") ==> (c ^? charBinary == Nothing) charBinary :: Binary d => Prism'@@ -92,49 +66,11 @@ -- | ----- >>> '1' ^? charOctalNoZero :: Maybe Digit--- Just 1------ >>> '2' ^? charOctalNoZero :: Maybe Digit--- Just 2------ >>> '3' ^? charOctalNoZero :: Maybe Digit--- Just 3------ >>> '4' ^? charOctalNoZero :: Maybe Digit--- Just 4------ >>> '5' ^? charOctalNoZero :: Maybe Digit--- Just 5------ >>> '6' ^? charOctalNoZero :: Maybe Digit--- Just 6------ >>> '7' ^? charOctalNoZero :: Maybe Digit--- Just 7------ >>> charOctalNoZero # Digit1 :: Char--- '1'------ >>> charOctalNoZero # Digit2 :: Char--- '2'------ >>> charOctalNoZero # Digit3 :: Char--- '3'------ >>> charOctalNoZero # Digit4 :: Char--- '4'+-- >>> '6' ^? charOctalNoZero :: Maybe OctDigit+-- Just OctDigit6 ----- >>> charOctalNoZero # Digit5 :: Char+-- >>> charOctalNoZero # OctDigit5 :: Char -- '5'------ >>> charOctalNoZero # Digit6 :: Char--- '6'------ >>> charOctalNoZero # Digit7 :: Char--- '7'------ prop> \c -> (c `notElem` "1234567") ==> (c ^? charOctalNoZero == Nothing) charOctalNoZero :: OctalNoZero d => Prism'@@ -144,56 +80,11 @@ associatePrism ('1', d1) [('2', d2), ('3', d3), ('4', d4), ('5', d5), ('6', d6), ('7', d7)] -- |------ >>> '0' ^? charOctal :: Maybe Digit--- Just 0------ >>> '1' ^? charOctal :: Maybe Digit--- Just 1------ >>> '2' ^? charOctal :: Maybe Digit--- Just 2------ >>> '3' ^? charOctal :: Maybe Digit--- Just 3------ >>> '4' ^? charOctal :: Maybe Digit--- Just 4------ >>> '5' ^? charOctal :: Maybe Digit--- Just 5------ >>> '6' ^? charOctal :: Maybe Digit--- Just 6------ >>> '7' ^? charOctal :: Maybe Digit--- Just 7------ >>> charOctal # Digit0 :: Char--- '0'------ >>> charOctal # Digit1 :: Char--- '1'------ >>> charOctal # Digit2 :: Char--- '2'------ >>> charOctal # Digit3 :: Char--- '3'------ >>> charOctal # Digit4 :: Char--- '4'------ >>> charOctal # Digit5 :: Char--- '5'------ >>> charOctal # Digit6 :: Char--- '6'+-- >>> '7' ^? charOctal :: Maybe OctDigit+-- Just OctDigit7 ----- >>> charOctal # Digit7 :: Char+-- >>> charOctal # OctDigit7 :: Char -- '7'------ prop> \c -> (c `notElem` "01234567") ==> (c ^? charOctal == Nothing) charOctal :: Octal d => Prism'@@ -203,62 +94,11 @@ associatePrism ('0', d0) [('1', d1), ('2', d2), ('3', d3), ('4', d4), ('5', d5), ('6', d6), ('7', d7)] -- |------ >>> '1' ^? charDecimalNoZero :: Maybe Digit--- Just 1------ >>> '2' ^? charDecimalNoZero :: Maybe Digit--- Just 2------ >>> '3' ^? charDecimalNoZero :: Maybe Digit--- Just 3------ >>> '4' ^? charDecimalNoZero :: Maybe Digit--- Just 4------ >>> '5' ^? charDecimalNoZero :: Maybe Digit--- Just 5------ >>> '6' ^? charDecimalNoZero :: Maybe Digit--- Just 6------ >>> '7' ^? charDecimalNoZero :: Maybe Digit--- Just 7------ >>> '8' ^? charDecimalNoZero :: Maybe Digit--- Just 8------ >>> '9' ^? charDecimalNoZero :: Maybe Digit--- Just 9------ >>> charDecimalNoZero # Digit1 :: Char--- '1'------ >>> charDecimalNoZero # Digit2 :: Char--- '2'------ >>> charDecimalNoZero # Digit3 :: Char--- '3'------ >>> charDecimalNoZero # Digit4 :: Char--- '4'------ >>> charDecimalNoZero # Digit5 :: Char--- '5'------ >>> charDecimalNoZero # Digit6 :: Char--- '6'------ >>> charDecimalNoZero # Digit7 :: Char--- '7'------ >>> charDecimalNoZero # Digit8 :: Char--- '8'+-- >>> '9' ^? charDecimalNoZero :: Maybe DecDigit+-- Just DecDigit9 ----- >>> charDecimalNoZero # Digit9 :: Char+-- >>> charDecimalNoZero # DecDigit9 :: Char -- '9'------ prop> \c -> (c `notElem` "123456789") ==> (c ^? charDecimalNoZero == Nothing) charDecimalNoZero :: DecimalNoZero d => Prism'@@ -268,68 +108,11 @@ associatePrism ('1', d1) [('2', d2), ('3', d3), ('4', d4), ('5', d5), ('6', d6), ('7', d7), ('8', d8), ('9', d9)] -- |------ >>> '0' ^? charDecimal :: Maybe Digit--- Just 0------ >>> '1' ^? charDecimal :: Maybe Digit--- Just 1------ >>> '2' ^? charDecimal :: Maybe Digit--- Just 2------ >>> '3' ^? charDecimal :: Maybe Digit--- Just 3------ >>> '4' ^? charDecimal :: Maybe Digit--- Just 4------ >>> '5' ^? charDecimal :: Maybe Digit--- Just 5------ >>> '6' ^? charDecimal :: Maybe Digit--- Just 6------ >>> '7' ^? charDecimal :: Maybe Digit--- Just 7------ >>> '8' ^? charDecimal :: Maybe Digit--- Just 8------ >>> '9' ^? charDecimal :: Maybe Digit--- Just 9------ >>> charDecimal # Digit0 :: Char--- '0'------ >>> charDecimal # Digit1 :: Char--- '1'------ >>> charDecimal # Digit2 :: Char--- '2'------ >>> charDecimal # Digit3 :: Char--- '3'------ >>> charDecimal # Digit4 :: Char--- '4'------ >>> charDecimal # Digit5 :: Char--- '5'------ >>> charDecimal # Digit6 :: Char--- '6'------ >>> charDecimal # Digit7 :: Char--- '7'------ >>> charDecimal # Digit8 :: Char--- '8'+-- >>> '9' ^? charDecimal :: Maybe DecDigit+-- Just DecDigit9 ----- >>> charDecimal # Digit9 :: Char+-- >>> charDecimal # DecDigit9 :: Char -- '9'------ prop> \c -> (c `notElem` "0123456789") ==> (c ^? charDecimal == Nothing) charDecimal :: Decimal d => Prism'@@ -339,98 +122,11 @@ associatePrism ('0', d0) [('1', d1), ('2', d2), ('3', d3), ('4', d4), ('5', d5), ('6', d6), ('7', d7), ('8', d8), ('9', d9)] -- |------ >>> '1' ^? charHexadecimalNoZero :: Maybe Digit--- Just 1------ >>> '2' ^? charHexadecimalNoZero :: Maybe Digit--- Just 2------ >>> '3' ^? charHexadecimalNoZero :: Maybe Digit--- Just 3------ >>> '4' ^? charHexadecimalNoZero :: Maybe Digit--- Just 4------ >>> '5' ^? charHexadecimalNoZero :: Maybe Digit--- Just 5------ >>> '6' ^? charHexadecimalNoZero :: Maybe Digit--- Just 6------ >>> '7' ^? charHexadecimalNoZero :: Maybe Digit--- Just 7------ >>> '8' ^? charHexadecimalNoZero :: Maybe Digit--- Just 8------ >>> '9' ^? charHexadecimalNoZero :: Maybe Digit--- Just 9------ >>> 'a' ^? charHexadecimalNoZero :: Maybe Digit--- Just a------ >>> 'b' ^? charHexadecimalNoZero :: Maybe Digit--- Just b------ >>> 'c' ^? charHexadecimalNoZero :: Maybe Digit--- Just c------ >>> 'd' ^? charHexadecimalNoZero :: Maybe Digit--- Just d------ >>> 'e' ^? charHexadecimalNoZero :: Maybe Digit--- Just e------ >>> 'f' ^? charHexadecimalNoZero :: Maybe Digit--- Just f------ >>> charHexadecimalNoZero # Digit1 :: Char--- '1'------ >>> charHexadecimalNoZero # Digit2 :: Char--- '2'------ >>> charHexadecimalNoZero # Digit3 :: Char--- '3'------ >>> charHexadecimalNoZero # Digit4 :: Char--- '4'------ >>> charHexadecimalNoZero # Digit5 :: Char--- '5'------ >>> charHexadecimalNoZero # Digit6 :: Char--- '6'------ >>> charHexadecimalNoZero # Digit7 :: Char--- '7'------ >>> charHexadecimalNoZero # Digit8 :: Char--- '8'------ >>> charHexadecimalNoZero # Digit9 :: Char--- '9'------ >>> charHexadecimalNoZero # Digita :: Char--- 'a'------ >>> charHexadecimalNoZero # Digitb :: Char--- 'b'------ >>> charHexadecimalNoZero # Digitc :: Char--- 'c'------ >>> charHexadecimalNoZero # Digitd :: Char--- 'd'------ >>> charHexadecimalNoZero # Digite :: Char--- 'e'+-- >>> 'f' ^? charHexadecimalNoZero :: Maybe HexDigit+-- Just HexDigitf ----- >>> charHexadecimalNoZero # Digitf :: Char+-- >>> charHexadecimalNoZero # HexDigitf :: Char -- 'f'------ prop> \c -> (c `notElem` "123456789abcdef") ==> (c ^? charHexadecimalNoZero == Nothing) charHexadecimalNoZero :: HexadecimalNoZero d => Prism'@@ -440,104 +136,11 @@ associatePrism ('1', d1) [('2', d2), ('3', d3), ('4', d4), ('5', d5), ('6', d6), ('7', d7), ('8', d8), ('9', d9), ('a', da), ('b', db), ('c', dc), ('d', dd), ('e', de), ('f', df)] -- |------ >>> '0' ^? charHexadecimal :: Maybe Digit--- Just 0------ >>> '1' ^? charHexadecimal :: Maybe Digit--- Just 1------ >>> '2' ^? charHexadecimal :: Maybe Digit--- Just 2------ >>> '3' ^? charHexadecimal :: Maybe Digit--- Just 3------ >>> '4' ^? charHexadecimal :: Maybe Digit--- Just 4------ >>> '5' ^? charHexadecimal :: Maybe Digit--- Just 5------ >>> '6' ^? charHexadecimal :: Maybe Digit--- Just 6------ >>> '7' ^? charHexadecimal :: Maybe Digit--- Just 7------ >>> '8' ^? charHexadecimal :: Maybe Digit--- Just 8------ >>> '9' ^? charHexadecimal :: Maybe Digit--- Just 9------ >>> 'a' ^? charHexadecimal :: Maybe Digit--- Just a------ >>> 'b' ^? charHexadecimal :: Maybe Digit--- Just b------ >>> 'c' ^? charHexadecimal :: Maybe Digit--- Just c------ >>> 'd' ^? charHexadecimal :: Maybe Digit--- Just d------ >>> 'e' ^? charHexadecimal :: Maybe Digit--- Just e------ >>> 'f' ^? charHexadecimal :: Maybe Digit--- Just f------ >>> charHexadecimal # Digit0 :: Char--- '0'------ >>> charHexadecimal # Digit1 :: Char--- '1'------ >>> charHexadecimal # Digit2 :: Char--- '2'------ >>> charHexadecimal # Digit3 :: Char--- '3'------ >>> charHexadecimal # Digit4 :: Char--- '4'------ >>> charHexadecimal # Digit5 :: Char--- '5'------ >>> charHexadecimal # Digit6 :: Char--- '6'------ >>> charHexadecimal # Digit7 :: Char--- '7'------ >>> charHexadecimal # Digit8 :: Char--- '8'------ >>> charHexadecimal # Digit9 :: Char--- '9'------ >>> charHexadecimal # Digita :: Char--- 'a'------ >>> charHexadecimal # Digitb :: Char--- 'b'------ >>> charHexadecimal # Digitc :: Char--- 'c'------ >>> charHexadecimal # Digitd :: Char--- 'd'------ >>> charHexadecimal # Digite :: Char--- 'e'+-- >>> 'f' ^? charHexadecimal :: Maybe HexDigit+-- Just HexDigitf ----- >>> charHexadecimal # Digitf :: Char+-- >>> charHexadecimal # HexDigitf :: Char -- 'f'------ prop> \c -> (c `notElem` "0123456789abcdef") ==> (c ^? charHexadecimal == Nothing) charHexadecimal :: Hexadecimal d => Prism'@@ -547,98 +150,11 @@ associatePrism ('0', d0) [('1', d1), ('2', d2), ('3', d3), ('4', d4), ('5', d5), ('6', d6), ('7', d7), ('8', d8), ('9', d9), ('a', da), ('b', db), ('c', dc), ('d', dd), ('e', de), ('f', df)] -- |------ >>> '1' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just 1------ >>> '2' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just 2------ >>> '3' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just 3------ >>> '4' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just 4------ >>> '5' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just 5------ >>> '6' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just 6------ >>> '7' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just 7------ >>> '8' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just 8------ >>> '9' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just 9------ >>> 'A' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just A------ >>> 'B' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just B------ >>> 'C' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just C------ >>> 'D' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just D------ >>> 'E' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just E------ >>> 'F' ^? charHEXADECIMALNoZero :: Maybe Digit--- Just F------ >>> charHEXADECIMALNoZero # Digit1 :: Char--- '1'------ >>> charHEXADECIMALNoZero # Digit2 :: Char--- '2'------ >>> charHEXADECIMALNoZero # Digit3 :: Char--- '3'------ >>> charHEXADECIMALNoZero # Digit4 :: Char--- '4'------ >>> charHEXADECIMALNoZero # Digit5 :: Char--- '5'------ >>> charHEXADECIMALNoZero # Digit6 :: Char--- '6'------ >>> charHEXADECIMALNoZero # Digit7 :: Char--- '7'------ >>> charHEXADECIMALNoZero # Digit8 :: Char--- '8'------ >>> charHEXADECIMALNoZero # Digit9 :: Char--- '9'------ >>> charHEXADECIMALNoZero # DigitA :: Char--- 'A'------ >>> charHEXADECIMALNoZero # DigitB :: Char--- 'B'------ >>> charHEXADECIMALNoZero # DigitC :: Char--- 'C'------ >>> charHEXADECIMALNoZero # DigitD :: Char--- 'D'------ >>> charHEXADECIMALNoZero # DigitE :: Char--- 'E'+-- >>> 'F' ^? charHEXADECIMALNoZero :: Maybe HEXDigit+-- Just HEXDigitF ----- >>> charHEXADECIMALNoZero # DigitF :: Char+-- >>> charHEXADECIMALNoZero # HEXDigitF :: Char -- 'F'------ prop> \c -> (c `notElem` "123456789ABCDEF") ==> (c ^? charHEXADECIMALNoZero == Nothing) charHEXADECIMALNoZero :: HEXADECIMALNoZero d => Prism'@@ -648,104 +164,11 @@ associatePrism ('1', d1) [('2', d2), ('3', d3), ('4', d4), ('5', d5), ('6', d6), ('7', d7), ('8', d8), ('9', d9), ('A', dA), ('B', dB), ('C', dC), ('D', dD), ('E', dE), ('F', dF)] -- |------ >>> '0' ^? charHEXADECIMAL :: Maybe Digit--- Just 0------ >>> '1' ^? charHEXADECIMAL :: Maybe Digit--- Just 1------ >>> '2' ^? charHEXADECIMAL :: Maybe Digit--- Just 2------ >>> '3' ^? charHEXADECIMAL :: Maybe Digit--- Just 3------ >>> '4' ^? charHEXADECIMAL :: Maybe Digit--- Just 4------ >>> '5' ^? charHEXADECIMAL :: Maybe Digit--- Just 5------ >>> '6' ^? charHEXADECIMAL :: Maybe Digit--- Just 6------ >>> '7' ^? charHEXADECIMAL :: Maybe Digit--- Just 7------ >>> '8' ^? charHEXADECIMAL :: Maybe Digit--- Just 8------ >>> '9' ^? charHEXADECIMAL :: Maybe Digit--- Just 9------ >>> 'A' ^? charHEXADECIMAL :: Maybe Digit--- Just A------ >>> 'B' ^? charHEXADECIMAL :: Maybe Digit--- Just B------ >>> 'C' ^? charHEXADECIMAL :: Maybe Digit--- Just C------ >>> 'D' ^? charHEXADECIMAL :: Maybe Digit--- Just D------ >>> 'E' ^? charHEXADECIMAL :: Maybe Digit--- Just E------ >>> 'F' ^? charHEXADECIMAL :: Maybe Digit--- Just F------ >>> charHEXADECIMAL # Digit0 :: Char--- '0'------ >>> charHEXADECIMAL # Digit1 :: Char--- '1'------ >>> charHEXADECIMAL # Digit2 :: Char--- '2'------ >>> charHEXADECIMAL # Digit3 :: Char--- '3'------ >>> charHEXADECIMAL # Digit4 :: Char--- '4'------ >>> charHEXADECIMAL # Digit5 :: Char--- '5'------ >>> charHEXADECIMAL # Digit6 :: Char--- '6'------ >>> charHEXADECIMAL # Digit7 :: Char--- '7'------ >>> charHEXADECIMAL # Digit8 :: Char--- '8'------ >>> charHEXADECIMAL # Digit9 :: Char--- '9'------ >>> charHEXADECIMAL # DigitA :: Char--- 'A'------ >>> charHEXADECIMAL # DigitB :: Char--- 'B'------ >>> charHEXADECIMAL # DigitC :: Char--- 'C'------ >>> charHEXADECIMAL # DigitD :: Char--- 'D'------ >>> charHEXADECIMAL # DigitE :: Char--- 'E'+-- >>> 'F' ^? charHEXADECIMAL :: Maybe HEXDigit+-- Just HEXDigitF ----- >>> charHEXADECIMAL # DigitF :: Char+-- >>> charHEXADECIMAL # HEXDigitF :: Char -- 'F'------ prop> \c -> (c `notElem` "0123456789ABCDEF") ==> (c ^? charHEXADECIMAL == Nothing) charHEXADECIMAL :: HEXADECIMAL d => Prism'@@ -755,134 +178,17 @@ associatePrism ('0', d0) [('1', d1), ('2', d2), ('3', d3), ('4', d4), ('5', d5), ('6', d6), ('7', d7), ('8', d8), ('9', d9), ('A', dA), ('B', dB), ('C', dC), ('D', dD), ('E', dE), ('F', dF)] -- |------ >>> '1' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just 1------ >>> '2' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just 2------ >>> '3' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just 3------ >>> '4' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just 4------ >>> '5' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just 5------ >>> '6' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just 6------ >>> '7' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just 7------ >>> '8' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just 8------ >>> '9' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just 9------ >>> 'a' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just a------ >>> 'b' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just b------ >>> 'c' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just c------ >>> 'd' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just d------ >>> 'e' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just e------ >>> 'f' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just f------ >>> 'A' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just A------ >>> 'B' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just B------ >>> 'C' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just C------ >>> 'D' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just D------ >>> 'E' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just E------ >>> 'F' ^? charHeXaDeCiMaLNoZero :: Maybe Digit--- Just F------ >>> charHeXaDeCiMaLNoZero # Digit1 :: Char--- '1'------ >>> charHeXaDeCiMaLNoZero # Digit2 :: Char--- '2'------ >>> charHeXaDeCiMaLNoZero # Digit3 :: Char--- '3'------ >>> charHeXaDeCiMaLNoZero # Digit4 :: Char--- '4'------ >>> charHeXaDeCiMaLNoZero # Digit5 :: Char--- '5'------ >>> charHeXaDeCiMaLNoZero # Digit6 :: Char--- '6'------ >>> charHeXaDeCiMaLNoZero # Digit7 :: Char--- '7'------ >>> charHeXaDeCiMaLNoZero # Digit8 :: Char--- '8'------ >>> charHeXaDeCiMaLNoZero # Digit9 :: Char--- '9'------ >>> charHeXaDeCiMaLNoZero # Digita :: Char--- 'a'------ >>> charHeXaDeCiMaLNoZero # Digitb :: Char--- 'b'------ >>> charHeXaDeCiMaLNoZero # Digitc :: Char--- 'c'------ >>> charHeXaDeCiMaLNoZero # Digitd :: Char--- 'd'+-- >>> 'f' ^? charHeXaDeCiMaLNoZero :: Maybe HeXDigit+-- Just HeXDigitf ----- >>> charHeXaDeCiMaLNoZero # Digite :: Char--- 'e'+-- >>> 'F' ^? charHeXaDeCiMaLNoZero :: Maybe HeXDigit+-- Just HeXDigitF ----- >>> charHeXaDeCiMaLNoZero # Digitf :: Char+-- >>> charHeXaDeCiMaLNoZero # HeXDigitf :: Char -- 'f' ----- >>> charHeXaDeCiMaLNoZero # DigitA :: Char--- 'A'------ >>> charHeXaDeCiMaLNoZero # DigitB :: Char--- 'B'------ >>> charHeXaDeCiMaLNoZero # DigitC :: Char--- 'C'------ >>> charHeXaDeCiMaLNoZero # DigitD :: Char--- 'D'------ >>> charHeXaDeCiMaLNoZero # DigitE :: Char--- 'E'------ >>> charHeXaDeCiMaLNoZero # DigitF :: Char+-- >>> charHeXaDeCiMaLNoZero # HeXDigitF :: Char -- 'F'------ prop> \c -> (c `notElem` "123456789abcdefABCDEF") ==> (c ^? charHeXaDeCiMaLNoZero == Nothing) charHeXaDeCiMaLNoZero :: HeXaDeCiMaLNoZero d => Prism'@@ -893,140 +199,17 @@ -- |------ >>> '0' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 0------ >>> '1' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 1------ >>> '2' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 2------ >>> '3' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 3------ >>> '4' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 4------ >>> '5' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 5------ >>> '6' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 6------ >>> '7' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 7------ >>> '8' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 8------ >>> '9' ^? charHeXaDeCiMaL :: Maybe Digit--- Just 9------ >>> 'a' ^? charHeXaDeCiMaL :: Maybe Digit--- Just a------ >>> 'b' ^? charHeXaDeCiMaL :: Maybe Digit--- Just b------ >>> 'c' ^? charHeXaDeCiMaL :: Maybe Digit--- Just c------ >>> 'd' ^? charHeXaDeCiMaL :: Maybe Digit--- Just d------ >>> 'e' ^? charHeXaDeCiMaL :: Maybe Digit--- Just e------ >>> 'f' ^? charHeXaDeCiMaL :: Maybe Digit--- Just f------ >>> 'A' ^? charHeXaDeCiMaL :: Maybe Digit--- Just A------ >>> 'B' ^? charHeXaDeCiMaL :: Maybe Digit--- Just B------ >>> 'C' ^? charHeXaDeCiMaL :: Maybe Digit--- Just C------ >>> 'D' ^? charHeXaDeCiMaL :: Maybe Digit--- Just D------ >>> 'E' ^? charHeXaDeCiMaL :: Maybe Digit--- Just E------ >>> 'F' ^? charHeXaDeCiMaL :: Maybe Digit--- Just F------ >>> charHeXaDeCiMaL # Digit0 :: Char--- '0'------ >>> charHeXaDeCiMaL # Digit1 :: Char--- '1'------ >>> charHeXaDeCiMaL # Digit2 :: Char--- '2'------ >>> charHeXaDeCiMaL # Digit3 :: Char--- '3'------ >>> charHeXaDeCiMaL # Digit4 :: Char--- '4'------ >>> charHeXaDeCiMaL # Digit5 :: Char--- '5'------ >>> charHeXaDeCiMaL # Digit6 :: Char--- '6'------ >>> charHeXaDeCiMaL # Digit7 :: Char--- '7'------ >>> charHeXaDeCiMaL # Digit8 :: Char--- '8'------ >>> charHeXaDeCiMaL # Digit9 :: Char--- '9'------ >>> charHeXaDeCiMaL # Digita :: Char--- 'a'------ >>> charHeXaDeCiMaL # Digitb :: Char--- 'b'------ >>> charHeXaDeCiMaL # Digitc :: Char--- 'c'------ >>> charHeXaDeCiMaL # Digitd :: Char--- 'd'+-- >>> 'f' ^? charHeXaDeCiMaL :: Maybe HeXDigit+-- Just HeXDigitf ----- >>> charHeXaDeCiMaL # Digite :: Char--- 'e'+-- >>> 'F' ^? charHeXaDeCiMaL :: Maybe HeXDigit+-- Just HeXDigitF ----- >>> charHeXaDeCiMaL # Digitf :: Char+-- >>> charHeXaDeCiMaL # HeXDigitf :: Char -- 'f' ----- >>> charHeXaDeCiMaL # DigitA :: Char--- 'A'------ >>> charHeXaDeCiMaL # DigitB :: Char--- 'B'------ >>> charHeXaDeCiMaL # DigitC :: Char--- 'C'------ >>> charHeXaDeCiMaL # DigitD :: Char--- 'D'------ >>> charHeXaDeCiMaL # DigitE :: Char--- 'E'------ >>> charHeXaDeCiMaL # DigitF :: Char+-- >>> charHeXaDeCiMaL # HeXDigitF :: Char -- 'F'------ prop> \c -> (c `notElem` "0123456789abcdefABCDEF") ==> (c ^? charHeXaDeCiMaL == Nothing) charHeXaDeCiMaL :: HeXaDeCiMaL d => Prism'@@ -1034,7 +217,7 @@ d charHeXaDeCiMaL = associatePrism ('0', d0) [('1', d1), ('2', d2), ('3', d3), ('4', d4), ('5', d5), ('6', d6), ('7', d7), ('8', d8), ('9', d9), ('a', da), ('b', db), ('c', dc), ('d', dd), ('e', de), ('f', df), ('A', dA), ('B', dB), ('C', dC), ('D', dD), ('E', dE), ('F', dF)]- + ---- not exported associatePrism :: (Eq b, Choice p, Applicative f) =>
src/Data/Digit/D0.hs view
@@ -6,12 +6,12 @@ , parse0 ) where -import Data.Digit.Digit(Digit(Digit0)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -31,28 +31,16 @@ -- | ----- >>> parse (parse0 <* eof) "test" "0" :: Either ParseError Digit--- Right 0+-- >>> parse (parse0 <* eof) "test" "0" :: Either ParseError BinDigit+-- Right BinDigit0 ----- >>> parse parse0 "test" "0xyz" :: Either ParseError Digit--- Right 0+-- >>> parse parse0 "test" "0xyz" :: Either ParseError BinDigit+-- Right BinDigit0 ----- >>> isn't _Right (parse parse0 "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parse0 "test" "xyz" :: Either ParseError BinDigit) -- True------ prop> \c -> c /= '0' ==> isn't _Right (parse parse0 "test" [c] :: Either ParseError Digit) parse0 :: (D0 d, CharParsing p) => p d parse0 = x0 <$ char '0' <?> "0"--instance D0 Digit where- d0 =- prism'- (\() -> Digit0)- (\d -> case d of- Digit0 ->- Just ()- _ ->- Nothing)
src/Data/Digit/D1.hs view
@@ -5,12 +5,12 @@ , parse1 ) where -import Data.Digit.Digit(Digit(Digit1)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parse1 <* eof) "test" "1" :: Either ParseError Digit--- Right 1+-- >>> parse (parse1 <* eof) "test" "1" :: Either ParseError BinDigit+-- Right BinDigit1 ----- >>> parse parse1 "test" "1xyz" :: Either ParseError Digit--- Right 1+-- >>> parse parse1 "test" "1xyz" :: Either ParseError BinDigit+-- Right BinDigit1 ----- >>> isn't _Right (parse parse1 "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parse1 "test" "xyz" :: Either ParseError BinDigit) -- True------ prop> \c -> c /= '1' ==> isn't _Right (parse parse1 "test" [c] :: Either ParseError Digit) parse1 :: (D1 d, CharParsing p) => p d parse1 = x1 <$ char '1' <?> "1"- -instance D1 Digit where- d1 =- prism'- (\() -> Digit1)- (\d -> case d of- Digit1 ->- Just ()- _ ->- Nothing)
src/Data/Digit/D2.hs view
@@ -5,12 +5,12 @@ , parse2 ) where -import Data.Digit.Digit(Digit(Digit2)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,29 +30,16 @@ -- | ----- >>> parse (parse2 <* eof) "test" "2" :: Either ParseError Digit--- Right 2+-- >>> parse (parse2 <* eof) "test" "2" :: Either ParseError DecDigit+-- Right DecDigit2 ----- >>> parse parse2 "test" "2xyz" :: Either ParseError Digit--- Right 2+-- >>> parse parse2 "test" "2xyz" :: Either ParseError DecDigit+-- Right DecDigit2 ----- >>> isn't _Right (parse parse2 "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parse2 "test" "xyz" :: Either ParseError DecDigit) -- True------ prop> \c -> c /= '2' ==> isn't _Right (parse parse2 "test" [c] :: Either ParseError Digit) parse2 :: (D2 d, CharParsing p) => p d parse2 = x2 <$ char '2' <?> "2"--instance D2 Digit where- d2 =- prism'- (\() -> Digit2)- (\d -> case d of- Digit2 ->- Just ()- _ ->- Nothing)-
src/Data/Digit/D3.hs view
@@ -5,12 +5,12 @@ , parse3 ) where -import Data.Digit.Digit(Digit(Digit3)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parse3 <* eof) "test" "3" :: Either ParseError Digit--- Right 3+-- >>> parse (parse3 <* eof) "test" "3" :: Either ParseError DecDigit+-- Right DecDigit3 ----- >>> parse parse3 "test" "3xyz" :: Either ParseError Digit--- Right 3+-- >>> parse parse3 "test" "3xyz" :: Either ParseError DecDigit+-- Right DecDigit3 ----- >>> isn't _Right (parse parse3 "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parse3 "test" "xyz" :: Either ParseError DecDigit) -- True------ prop> \c -> c /= '3' ==> isn't _Right (parse parse3 "test" [c] :: Either ParseError Digit) parse3 :: (D3 d, CharParsing p) => p d parse3 = x3 <$ char '3' <?> "3"--instance D3 Digit where- d3 =- prism'- (\() -> Digit3)- (\d -> case d of- Digit3 ->- Just ()- _ ->- Nothing)
src/Data/Digit/D4.hs view
@@ -5,12 +5,12 @@ , parse4 ) where -import Data.Digit.Digit(Digit(Digit4)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parse4 <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parse4 "test" "4xyz" :: Either ParseError Digit--- Right 4+-- >>> parse (parse4 <* eof) "test" "4" :: Either ParseError DecDigit+-- Right DecDigit4 ----- >>> isn't _Right (parse parse4 "test" "xyz" :: Either ParseError Digit)--- True +-- >>> parse parse4 "test" "4xyz" :: Either ParseError DecDigit+-- Right DecDigit4 ----- prop> \c -> c /= '4' ==> isn't _Right (parse parse4 "test" [c] :: Either ParseError Digit)+-- >>> isn't _Right (parse parse4 "test" "xyz" :: Either ParseError DecDigit)+-- True parse4 :: (D4 d, CharParsing p) => p d parse4 = x4 <$ char '4' <?> "4"--instance D4 Digit where- d4 =- prism'- (\() -> Digit4)- (\d -> case d of- Digit4 ->- Just ()- _ ->- Nothing)
src/Data/Digit/D5.hs view
@@ -5,12 +5,12 @@ , parse5 ) where -import Data.Digit.Digit(Digit(Digit5)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parse5 <* eof) "test" "5" :: Either ParseError Digit--- Right 5+-- >>> parse (parse5 <* eof) "test" "5" :: Either ParseError DecDigit+-- Right DecDigit5 ----- >>> parse parse5 "test" "5xyz" :: Either ParseError Digit--- Right 5+-- >>> parse parse5 "test" "5xyz" :: Either ParseError DecDigit+-- Right DecDigit5 ----- >>> isn't _Right (parse parse5 "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parse5 "test" "xyz" :: Either ParseError DecDigit) -- True------ prop> \c -> c /= '5' ==> isn't _Right (parse parse5 "test" [c] :: Either ParseError Digit) parse5 :: (D5 d, CharParsing p) => p d parse5 = x5 <$ char '5' <?> "5"--instance D5 Digit where- d5 =- prism'- (\() -> Digit5)- (\d -> case d of- Digit5 ->- Just ()- _ ->- Nothing)
src/Data/Digit/D6.hs view
@@ -5,12 +5,12 @@ , parse6 ) where -import Data.Digit.Digit(Digit(Digit6)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parse6 <* eof) "test" "6" :: Either ParseError Digit--- Right 6+-- >>> parse (parse6 <* eof) "test" "6" :: Either ParseError DecDigit+-- Right DecDigit6 ----- >>> parse parse6 "test" "6xyz" :: Either ParseError Digit--- Right 6+-- >>> parse parse6 "test" "6xyz" :: Either ParseError DecDigit+-- Right DecDigit6 ----- >>> isn't _Right (parse parse6 "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parse6 "test" "xyz" :: Either ParseError DecDigit) -- True------ prop> \c -> c /= '6' ==> isn't _Right (parse parse6 "test" [c] :: Either ParseError Digit) parse6 :: (D6 d, CharParsing p) => p d parse6 = x6 <$ char '6' <?> "6"--instance D6 Digit where- d6 =- prism'- (\() -> Digit6)- (\d -> case d of- Digit6 ->- Just ()- _ ->- Nothing)
src/Data/Digit/D7.hs view
@@ -5,12 +5,12 @@ , parse7 ) where -import Data.Digit.Digit(Digit(Digit7)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parse7 <* eof) "test" "7" :: Either ParseError Digit--- Right 7+-- >>> parse (parse7 <* eof) "test" "7" :: Either ParseError DecDigit+-- Right DecDigit7 ----- >>> parse parse7 "test" "7xyz" :: Either ParseError Digit--- Right 7+-- >>> parse parse7 "test" "7xyz" :: Either ParseError DecDigit+-- Right DecDigit7 ----- >>> isn't _Right (parse parse7 "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parse7 "test" "xyz" :: Either ParseError DecDigit) -- True------ prop> \c -> c /= '7' ==> isn't _Right (parse parse7 "test" [c] :: Either ParseError Digit) parse7 :: (D7 d, CharParsing p) => p d parse7 = x7 <$ char '7' <?> "7"--instance D7 Digit where- d7 =- prism'- (\() -> Digit7)- (\d -> case d of- Digit7 ->- Just ()- _ ->- Nothing)
src/Data/Digit/D8.hs view
@@ -5,12 +5,12 @@ , parse8 ) where -import Data.Digit.Digit(Digit(Digit8)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parse8 <* eof) "test" "8" :: Either ParseError Digit--- Right 8+-- >>> parse (parse8 <* eof) "test" "8" :: Either ParseError DecDigit+-- Right DecDigit8 ----- >>> parse parse8 "test" "8xyz" :: Either ParseError Digit--- Right 8+-- >>> parse parse8 "test" "8xyz" :: Either ParseError DecDigit+-- Right DecDigit8 ----- >>> isn't _Right (parse parse8 "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parse8 "test" "xyz" :: Either ParseError DecDigit) -- True------ prop> \c -> c /= '8' ==> isn't _Right (parse parse8 "test" [c] :: Either ParseError Digit) parse8 :: (D8 d, CharParsing p) => p d parse8 = x8 <$ char '8' <?> "8"--instance D8 Digit where- d8 =- prism'- (\() -> Digit8)- (\d -> case d of- Digit8 ->- Just ()- _ ->- Nothing)
src/Data/Digit/D9.hs view
@@ -5,12 +5,12 @@ , parse9 ) where -import Data.Digit.Digit(Digit(Digit9)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parse9 <* eof) "test" "9" :: Either ParseError Digit--- Right 9+-- >>> parse (parse9 <* eof) "test" "9" :: Either ParseError DecDigit+-- Right DecDigit9 ----- >>> parse parse9 "test" "9xyz" :: Either ParseError Digit--- Right 9+-- >>> parse parse9 "test" "9xyz" :: Either ParseError DecDigit+-- Right DecDigit9 ----- >>> isn't _Right (parse parse9 "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parse9 "test" "xyz" :: Either ParseError DecDigit) -- True------ prop> \c -> c /= '9' ==> isn't _Right (parse parse9 "test" [c] :: Either ParseError Digit) parse9 :: (D9 d, CharParsing p) => p d parse9 = x9 <$ char '9' <?> "9"--instance D9 Digit where- d9 =- prism'- (\() -> Digit9)- (\d -> case d of- Digit9 ->- Just ()- _ ->- Nothing)
src/Data/Digit/DA.hs view
@@ -5,12 +5,12 @@ , parseA ) where -import Data.Digit.Digit(Digit(DigitA)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parseA <* eof) "test" "A" :: Either ParseError Digit--- Right A+-- >>> parse (parseA <* eof) "test" "A" :: Either ParseError HEXDigit+-- Right HEXDigitA ----- >>> parse parseA "test" "Axyz" :: Either ParseError Digit--- Right A+-- >>> parse parseA "test" "Axyz" :: Either ParseError HEXDigit+-- Right HEXDigitA ----- >>> isn't _Right (parse parseA "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseA "test" "xyz" :: Either ParseError HEXDigit) -- True------ prop> \c -> c /= 'A' ==> isn't _Right (parse parseA "test" [c] :: Either ParseError Digit) parseA :: (DA d, CharParsing p) => p d parseA = xA <$ char 'A' <?> "A"--instance DA Digit where- dA =- prism'- (\() -> DigitA)- (\d -> case d of- DigitA ->- Just ()- _ ->- Nothing)
src/Data/Digit/DAa.hs view
@@ -1,25 +1,25 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ConstraintKinds #-}-{-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-} module Data.Digit.DAa(- DAa+ module Data.Digit.DA+, module Data.Digit.Da+, DAa , parseAa ) where import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.DA(DA, parseA)-import Data.Digit.Da(Da, parsea)+import Data.Digit.DA+import Data.Digit.Da -- $setup -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit+-- >>> import Data.Digit -- >>> import Papa type DAa a =@@ -27,22 +27,20 @@ -- | ----- >>> parse (parseAa <* eof) "test" "A" :: Either ParseError Digit--- Right A+-- >>> parse (parseAa <* eof) "test" "A" :: Either ParseError HeXDigit+-- Right HeXDigitA ----- >>> parse parseAa "test" "Axyz" :: Either ParseError Digit--- Right A+-- >>> parse parseAa "test" "Axyz" :: Either ParseError HeXDigit+-- Right HeXDigitA ----- >>> parse (parseAa <* eof) "test" "a" :: Either ParseError Digit--- Right a+-- >>> parse (parseAa <* eof) "test" "a" :: Either ParseError HeXDigit+-- Right HeXDigita ----- >>> parse parseAa "test" "axyz" :: Either ParseError Digit--- Right a+-- >>> parse parseAa "test" "axyz" :: Either ParseError HeXDigit+-- Right HeXDigita ----- >>> isn't _Right (parse parseAa "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseAa "test" "xyz" :: Either ParseError HeXDigit) -- True------ prop> \c -> (c `notElem` "Aa") ==> isn't _Right (parse parseAa "test" [c] :: Either ParseError Digit) parseAa :: (DAa d, CharParsing p) => p d
src/Data/Digit/DB.hs view
@@ -5,12 +5,12 @@ , parseB ) where -import Data.Digit.Digit(Digit(DigitB)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parseB <* eof) "test" "B" :: Either ParseError Digit--- Right B+-- >>> parse (parseB <* eof) "test" "B" :: Either ParseError HEXDigit+-- Right HEXDigitB ----- >>> parse parseB "test" "Bxyz" :: Either ParseError Digit--- Right B+-- >>> parse parseB "test" "Bxyz" :: Either ParseError HEXDigit+-- Right HEXDigitB ----- >>> isn't _Right (parse parseB "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseB "test" "xyz" :: Either ParseError HEXDigit) -- True------ prop> \c -> c /= 'B' ==> isn't _Right (parse parseB "test" [c] :: Either ParseError Digit) parseB :: (DB d, CharParsing p) => p d parseB = xB <$ char 'B' <?> "B"--instance DB Digit where- dB =- prism'- (\() -> DigitB)- (\d -> case d of- DigitB ->- Just ()- _ ->- Nothing)
src/Data/Digit/DBb.hs view
@@ -2,19 +2,21 @@ {-# LANGUAGE ConstraintKinds #-} module Data.Digit.DBb(- DBb+ module Data.Digit.DB+, module Data.Digit.Db+, DBb , parseBb ) where import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.DB(DB, parseB)-import Data.Digit.Db(Db, parseb)+import Data.Digit.DB+import Data.Digit.Db -- $setup -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit+-- >>> import Data.Digit -- >>> import Papa type DBb a =@@ -22,22 +24,20 @@ -- | ----- >>> parse (parseBb <* eof) "test" "B" :: Either ParseError Digit--- Right B+-- >>> parse (parseBb <* eof) "test" "B" :: Either ParseError HeXDigit+-- Right HeXDigitB ----- >>> parse parseBb "test" "Bxyz" :: Either ParseError Digit--- Right B+-- >>> parse parseBb "test" "Bxyz" :: Either ParseError HeXDigit+-- Right HeXDigitB ----- >>> parse (parseBb <* eof) "test" "b" :: Either ParseError Digit--- Right b+-- >>> parse (parseBb <* eof) "test" "b" :: Either ParseError HeXDigit+-- Right HeXDigitb ----- >>> parse parseBb "test" "bxyz" :: Either ParseError Digit--- Right b+-- >>> parse parseBb "test" "bxyz" :: Either ParseError HeXDigit+-- Right HeXDigitb ----- >>> isn't _Right (parse parseBb "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseBb "test" "xyz" :: Either ParseError HeXDigit) -- True------ prop> \c -> (c `notElem` "Bb") ==> isn't _Right (parse parseBb "test" [c] :: Either ParseError Digit) parseBb :: (DBb d, CharParsing p) => p d
src/Data/Digit/DC.hs view
@@ -5,12 +5,12 @@ , parseC ) where -import Data.Digit.Digit(Digit(DigitC)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parseC <* eof) "test" "C" :: Either ParseError Digit--- Right C+-- >>> parse (parseC <* eof) "test" "C" :: Either ParseError HEXDigit+-- Right HEXDigitC ----- >>> parse parseC "test" "Cxyz" :: Either ParseError Digit--- Right C+-- >>> parse parseC "test" "Cxyz" :: Either ParseError HEXDigit+-- Right HEXDigitC ----- >>> isn't _Right (parse parseC "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseC "test" "xyz" :: Either ParseError HEXDigit) -- True------ prop> \c -> c /= 'C' ==> isn't _Right (parse parseC "test" [c] :: Either ParseError Digit) parseC :: (DC d, CharParsing p) => p d parseC = xC <$ char 'C' <?> "C"--instance DC Digit where- dC =- prism'- (\() -> DigitC)- (\d -> case d of- DigitC ->- Just ()- _ ->- Nothing)
src/Data/Digit/DCc.hs view
@@ -2,19 +2,21 @@ {-# LANGUAGE ConstraintKinds #-} module Data.Digit.DCc(- DCc+ module Data.Digit.DC+, module Data.Digit.Dc+, DCc , parseCc ) where import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.DC(DC, parseC)-import Data.Digit.Dc(Dc, parsec)+import Data.Digit.DC+import Data.Digit.Dc -- $setup -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit+-- >>> import Data.Digit -- >>> import Papa type DCc a =@@ -22,22 +24,20 @@ -- | ----- >>> parse (parseCc <* eof) "test" "C" :: Either ParseError Digit--- Right C+-- >>> parse (parseCc <* eof) "test" "C" :: Either ParseError HeXDigit+-- Right HeXDigitC ----- >>> parse parseCc "test" "Cxyz" :: Either ParseError Digit--- Right C+-- >>> parse parseCc "test" "Cxyz" :: Either ParseError HeXDigit+-- Right HeXDigitC ----- >>> parse (parseCc <* eof) "test" "c" :: Either ParseError Digit--- Right c+-- >>> parse (parseCc <* eof) "test" "c" :: Either ParseError HeXDigit+-- Right HeXDigitc ----- >>> parse parseCc "test" "cxyz" :: Either ParseError Digit--- Right c+-- >>> parse parseCc "test" "cxyz" :: Either ParseError HeXDigit+-- Right HeXDigitc ----- >>> isn't _Right (parse parseCc "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseCc "test" "xyz" :: Either ParseError HeXDigit) -- True------ prop> \c -> (c `notElem` "Cc") ==> isn't _Right (parse parseCc "test" [c] :: Either ParseError Digit) parseCc :: (DCc d, CharParsing p) => p d
src/Data/Digit/DD.hs view
@@ -5,12 +5,12 @@ , parseD ) where -import Data.Digit.Digit(Digit(DigitD)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parseD <* eof) "test" "D" :: Either ParseError Digit--- Right D+-- >>> parse (parseD <* eof) "test" "D" :: Either ParseError HEXDigit+-- Right HEXDigitD ----- >>> parse parseD "test" "Dxyz" :: Either ParseError Digit--- Right D+-- >>> parse parseD "test" "Dxyz" :: Either ParseError HEXDigit+-- Right HEXDigitD ----- >>> isn't _Right (parse parseD "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseD "test" "xyz" :: Either ParseError HEXDigit) -- True------ prop> \c -> c /= 'D' ==> isn't _Right (parse parseD "test" [c] :: Either ParseError Digit) parseD :: (DD d, CharParsing p) => p d parseD = xD <$ char 'D' <?> "D"--instance DD Digit where- dD =- prism'- (\() -> DigitD)- (\d -> case d of- DigitD ->- Just ()- _ ->- Nothing)
src/Data/Digit/DDd.hs view
@@ -2,19 +2,21 @@ {-# LANGUAGE ConstraintKinds #-} module Data.Digit.DDd(- DDd+ module Data.Digit.DD+, module Data.Digit.Dd+, DDd , parseDd ) where import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.DD(DD, parseD)-import Data.Digit.Dd(Dd, parsed)+import Data.Digit.DD+import Data.Digit.Dd -- $setup -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit+-- >>> import Data.Digit -- >>> import Papa type DDd a =@@ -22,22 +24,20 @@ -- | ----- >>> parse (parseDd <* eof) "test" "D" :: Either ParseError Digit--- Right D+-- >>> parse (parseDd <* eof) "test" "D" :: Either ParseError HeXDigit+-- Right HeXDigitD ----- >>> parse parseDd "test" "Dxyz" :: Either ParseError Digit--- Right D+-- >>> parse parseDd "test" "Dxyz" :: Either ParseError HeXDigit+-- Right HeXDigitD ----- >>> parse (parseDd <* eof) "test" "d" :: Either ParseError Digit--- Right d+-- >>> parse (parseDd <* eof) "test" "d" :: Either ParseError HeXDigit+-- Right HeXDigitd ----- >>> parse parseDd "test" "dxyz" :: Either ParseError Digit--- Right d+-- >>> parse parseDd "test" "dxyz" :: Either ParseError HeXDigit+-- Right HeXDigitd ----- >>> isn't _Right (parse parseDd "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseDd "test" "xyz" :: Either ParseError HeXDigit) -- True------ prop> \c -> (c `notElem` "Dd") ==> isn't _Right (parse parseDd "test" [c] :: Either ParseError Digit) parseDd :: (DDd d, CharParsing p) => p d
src/Data/Digit/DE.hs view
@@ -5,12 +5,12 @@ , parseE ) where -import Data.Digit.Digit(Digit(DigitE)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parseE <* eof) "test" "E" :: Either ParseError Digit--- Right E+-- >>> parse (parseE <* eof) "test" "E" :: Either ParseError HEXDigit+-- Right HEXDigitE ----- >>> parse parseE "test" "Exyz" :: Either ParseError Digit--- Right E+-- >>> parse parseE "test" "Exyz" :: Either ParseError HEXDigit+-- Right HEXDigitE ----- >>> isn't _Right (parse parseE "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseE "test" "xyz" :: Either ParseError HEXDigit) -- True------ prop> \c -> c /= 'E' ==> isn't _Right (parse parseE "test" [c] :: Either ParseError Digit) parseE :: (DE d, CharParsing p) => p d parseE = xE <$ char 'E' <?> "E"--instance DE Digit where- dE =- prism'- (\() -> DigitE)- (\d -> case d of- DigitE ->- Just ()- _ ->- Nothing)
src/Data/Digit/DEe.hs view
@@ -2,14 +2,16 @@ {-# LANGUAGE ConstraintKinds #-} module Data.Digit.DEe(- DEe+ module Data.Digit.DE+, module Data.Digit.De+, DEe , parseEe ) where import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.DE(DE, parseE)-import Data.Digit.De(De, parsee)+import Data.Digit.DE+import Data.Digit.De -- $setup -- >>> import Text.Parsec(parse, ParseError, eof)@@ -22,22 +24,20 @@ -- | ----- >>> parse (parseEe <* eof) "test" "E" :: Either ParseError Digit--- Right E+-- >>> parse (parseEe <* eof) "test" "E" :: Either ParseError HeXDigit+-- Right HeXDigitE ----- >>> parse parseEe "test" "Exyz" :: Either ParseError Digit--- Right E+-- >>> parse parseEe "test" "Exyz" :: Either ParseError HeXDigit+-- Right HeXDigitE ----- >>> parse (parseEe <* eof) "test" "e" :: Either ParseError Digit--- Right e+-- >>> parse (parseEe <* eof) "test" "e" :: Either ParseError HeXDigit+-- Right HeXDigite ----- >>> parse parseEe "test" "exyz" :: Either ParseError Digit--- Right e+-- >>> parse parseEe "test" "exyz" :: Either ParseError HeXDigit+-- Right HeXDigite ----- >>> isn't _Right (parse parseEe "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseEe "test" "xyz" :: Either ParseError HeXDigit) -- True------ prop> \c -> (c `notElem` "Ee") ==> isn't _Right (parse parseEe "test" [c] :: Either ParseError Digit) parseEe :: (DEe d, CharParsing p) => p d
src/Data/Digit/DF.hs view
@@ -5,12 +5,12 @@ , parseF ) where -import Data.Digit.Digit(Digit(DigitF)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parseF <* eof) "test" "F" :: Either ParseError Digit--- Right F+-- >>> parse (parseF <* eof) "test" "F" :: Either ParseError HEXDigit+-- Right HEXDigitF ----- >>> parse parseF "test" "Fxyz" :: Either ParseError Digit--- Right F+-- >>> parse parseF "test" "Fxyz" :: Either ParseError HEXDigit+-- Right HEXDigitF ----- >>> isn't _Right (parse parseF "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseF "test" "xyz" :: Either ParseError HEXDigit) -- True------ prop> \c -> c /= 'F' ==> isn't _Right (parse parseF "test" [c] :: Either ParseError Digit) parseF :: (DF d, CharParsing p) => p d parseF = xF <$ char 'F' <?> "F"--instance DF Digit where- dF =- prism'- (\() -> DigitF)- (\d -> case d of- DigitF ->- Just ()- _ ->- Nothing)
src/Data/Digit/DFf.hs view
@@ -2,19 +2,21 @@ {-# LANGUAGE ConstraintKinds #-} module Data.Digit.DFf(- DFf+ module Data.Digit.DF+, module Data.Digit.Df+, DFf , parseFf ) where import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.DF(DF, parseF)-import Data.Digit.Df(Df, parsef)+import Data.Digit.DF+import Data.Digit.Df -- $setup -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit+-- >>> import Data.Digit -- >>> import Papa type DFf a =@@ -22,22 +24,20 @@ -- | ----- >>> parse (parseFf <* eof) "test" "F" :: Either ParseError Digit--- Right F+-- >>> parse (parseFf <* eof) "test" "F" :: Either ParseError HeXDigit+-- Right HeXDigitF ----- >>> parse parseFf "test" "Fxyz" :: Either ParseError Digit--- Right F+-- >>> parse parseFf "test" "Fxyz" :: Either ParseError HeXDigit+-- Right HeXDigitF ----- >>> parse (parseFf <* eof) "test" "f" :: Either ParseError Digit--- Right f+-- >>> parse (parseFf <* eof) "test" "f" :: Either ParseError HeXDigit+-- Right HeXDigitf ----- >>> parse parseFf "test" "fxyz" :: Either ParseError Digit--- Right f+-- >>> parse parseFf "test" "fxyz" :: Either ParseError HeXDigit+-- Right HeXDigitf ----- >>> isn't _Right (parse parseFf "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseFf "test" "xyz" :: Either ParseError HeXDigit) -- True------ prop> \c -> (c `notElem` "Ff") ==> isn't _Right (parse parseFf "test" [c] :: Either ParseError Digit) parseFf :: (DFf d, CharParsing p) => p d
src/Data/Digit/Da.hs view
@@ -5,12 +5,12 @@ , parsea ) where -import Data.Digit.Digit(Digit(Digita)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parsea <* eof) "test" "a" :: Either ParseError Digit--- Right a+-- >>> parse (parsea <* eof) "test" "a" :: Either ParseError HexDigit+-- Right HexDigita ----- >>> parse parsea "test" "axyz" :: Either ParseError Digit--- Right a+-- >>> parse parsea "test" "axyz" :: Either ParseError HexDigit+-- Right HexDigita ----- >>> isn't _Right (parse parsea "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parsea "test" "xyz" :: Either ParseError HexDigit) -- True------ prop> \c -> c /= 'a' ==> isn't _Right (parse parsea "test" [c] :: Either ParseError Digit) parsea :: (Da d, CharParsing p) => p d parsea = xa <$ char 'a' <?> "a"--instance Da Digit where- da =- prism'- (\() -> Digita)- (\d -> case d of- Digita ->- Just ()- _ ->- Nothing)
src/Data/Digit/Db.hs view
@@ -5,12 +5,12 @@ , parseb ) where -import Data.Digit.Digit(Digit(Digitb)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parseb <* eof) "test" "b" :: Either ParseError Digit--- Right b+-- >>> parse (parseb <* eof) "test" "b" :: Either ParseError HexDigit+-- Right HexDigitb ----- >>> parse parseb "test" "bxyz" :: Either ParseError Digit--- Right b+-- >>> parse parseb "test" "bxyz" :: Either ParseError HexDigit+-- Right HexDigitb ----- >>> isn't _Right (parse parseb "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parseb "test" "xyz" :: Either ParseError HexDigit) -- True------ prop> \c -> c /= 'b' ==> isn't _Right (parse parseb "test" [c] :: Either ParseError Digit) parseb :: (Db d, CharParsing p) => p d parseb = xb <$ char 'b' <?> "b"--instance Db Digit where- db =- prism'- (\() -> Digitb)- (\d -> case d of- Digitb ->- Just ()- _ ->- Nothing)
src/Data/Digit/Dc.hs view
@@ -5,12 +5,12 @@ , parsec ) where -import Data.Digit.Digit(Digit(Digitc)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parsec <* eof) "test" "c" :: Either ParseError Digit--- Right c+-- >>> parse (parsec <* eof) "test" "c" :: Either ParseError HexDigit+-- Right HexDigitc ----- >>> parse parsec "test" "cxyz" :: Either ParseError Digit--- Right c+-- >>> parse parsec "test" "cxyz" :: Either ParseError HexDigit+-- Right HexDigitc ----- >>> isn't _Right (parse parsec "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parsec "test" "xyz" :: Either ParseError HexDigit) -- True------ prop> \c -> c /= 'c' ==> isn't _Right (parse parsec "test" [c] :: Either ParseError Digit) parsec :: (Dc d, CharParsing p) => p d parsec = xc <$ char 'c' <?> "c"--instance Dc Digit where- dc =- prism'- (\() -> Digitc)- (\d -> case d of- Digitc ->- Just ()- _ ->- Nothing)
src/Data/Digit/Dd.hs view
@@ -5,12 +5,12 @@ , parsed ) where -import Data.Digit.Digit(Digit(Digitd)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,29 +30,16 @@ -- | ----- >>> parse (parsed <* eof) "test" "d" :: Either ParseError Digit--- Right d+-- >>> parse (parsed <* eof) "test" "d" :: Either ParseError HexDigit+-- Right HexDigitd ----- >>> parse parsed "test" "dxyz" :: Either ParseError Digit--- Right d+-- >>> parse parsed "test" "dxyz" :: Either ParseError HexDigit+-- Right HexDigitd ----- >>> isn't _Right (parse parsed "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parsed "test" "xyz" :: Either ParseError HexDigit) -- True------ prop> \c -> c /= 'd' ==> isn't _Right (parse parsed "test" [c] :: Either ParseError Digit) parsed :: (Dd d, CharParsing p) => p d parsed = xd <$ char 'd' <?> "d"--instance Dd Digit where- dd =- prism'- (\() -> Digitd)- (\d -> case d of- Digitd ->- Just ()- _ ->- Nothing)-
src/Data/Digit/De.hs view
@@ -5,12 +5,12 @@ , parsee ) where -import Data.Digit.Digit(Digit(Digite)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parsee <* eof) "test" "e" :: Either ParseError Digit--- Right e+-- >>> parse (parsee <* eof) "test" "e" :: Either ParseError HexDigit+-- Right HexDigite ----- >>> parse parsee "test" "exyz" :: Either ParseError Digit--- Right e+-- >>> parse parsee "test" "exyz" :: Either ParseError HexDigit+-- Right HexDigite ----- >>> isn't _Right (parse parsee "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parsee "test" "xyz" :: Either ParseError HexDigit) -- True------ prop> \c -> c /= 'e' ==> isn't _Right (parse parsee "test" [c] :: Either ParseError Digit) parsee :: (De d, CharParsing p) => p d parsee = xe <$ char 'e' <?> "e"--instance De Digit where- de =- prism'- (\() -> Digite)- (\d -> case d of- Digite ->- Just ()- _ ->- Nothing)
src/Data/Digit/Decimal.hs view
@@ -1,95 +1,81 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE TemplateHaskell #-} module Data.Digit.Decimal(- DecimalNoZero+ DecDigit(..)+, DecimalNoZero , Decimal , parseDecimalNoZero , parseDecimal+-- * Prisms+, _DecDigit0+, _DecDigit1+, _DecDigit2+, _DecDigit3+, _DecDigit4+, _DecDigit5+, _DecDigit6+, _DecDigit7+, _DecDigit8+, _DecDigit9+-- * Re-exports+, module Data.Digit.D0+, module Data.Digit.D1+, module Data.Digit.D2+, module Data.Digit.D3+, module Data.Digit.D4+, module Data.Digit.D5+, module Data.Digit.D6+, module Data.Digit.D7+, module Data.Digit.D8+, module Data.Digit.D9 ) where +import Prelude (Eq, Show, Ord, Enum, Bounded)+import Control.Lens.TH (makePrisms) import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.D0(D0, parse0)-import Data.Digit.D1(D1, parse1)-import Data.Digit.D2(D2, parse2)-import Data.Digit.D3(D3, parse3)-import Data.Digit.D4(D4, parse4)-import Data.Digit.D5(D5, parse5)-import Data.Digit.D6(D6, parse6)-import Data.Digit.D7(D7, parse7)-import Data.Digit.D8(D8, parse8)-import Data.Digit.D9(D9, parse9)+import Data.Digit.D0+import Data.Digit.D1+import Data.Digit.D2+import Data.Digit.D3+import Data.Digit.D4+import Data.Digit.D5+import Data.Digit.D6+import Data.Digit.D7+import Data.Digit.D8+import Data.Digit.D9 --- $setup--- >>> import Text.Parsec(parse, ParseError, eof)--- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit--- >>> import Papa+data DecDigit+ = DecDigit0+ | DecDigit1+ | DecDigit2+ | DecDigit3+ | DecDigit4+ | DecDigit5+ | DecDigit6+ | DecDigit7+ | DecDigit8+ | DecDigit9+ deriving (Show, Eq, Ord, Enum, Bounded) +makePrisms ''DecDigit++instance D0 DecDigit where; d0 = _DecDigit0+instance D1 DecDigit where; d1 = _DecDigit1+instance D2 DecDigit where; d2 = _DecDigit2+instance D3 DecDigit where; d3 = _DecDigit3+instance D4 DecDigit where; d4 = _DecDigit4+instance D5 DecDigit where; d5 = _DecDigit5+instance D6 DecDigit where; d6 = _DecDigit6+instance D7 DecDigit where; d7 = _DecDigit7+instance D8 DecDigit where; d8 = _DecDigit8+instance D9 DecDigit where; d9 = _DecDigit9+ type DecimalNoZero d = (D1 d, D2 d, D3 d, D4 d, D5 d, D6 d, D7 d, D8 d, D9 d) --- |------ >>> parse (parseDecimalNoZero <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseDecimalNoZero "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseDecimalNoZero <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseDecimalNoZero "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseDecimalNoZero <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseDecimalNoZero "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseDecimalNoZero <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseDecimalNoZero "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseDecimalNoZero <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseDecimalNoZero "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseDecimalNoZero <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseDecimalNoZero "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseDecimalNoZero <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseDecimalNoZero "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> parse (parseDecimalNoZero <* eof) "test" "8" :: Either ParseError Digit--- Right 8------ >>> parse parseDecimalNoZero "test" "8xyz" :: Either ParseError Digit--- Right 8------ >>> parse (parseDecimalNoZero <* eof) "test" "9" :: Either ParseError Digit--- Right 9------ >>> parse parseDecimalNoZero "test" "9xyz" :: Either ParseError Digit--- Right 9------ >>> isn't _Right (parse parseDecimalNoZero "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "123456789") ==> isn't _Right (parse parseDecimalNoZero "test" [c] :: Either ParseError Digit) parseDecimalNoZero :: (DecimalNoZero d, CharParsing p) => p d@@ -110,72 +96,6 @@ type Decimal d = (D0 d, DecimalNoZero d) --- |------ >>> parse (parseDecimal <* eof) "test" "0" :: Either ParseError Digit--- Right 0------ >>> parse parseDecimal "test" "0xyz" :: Either ParseError Digit--- Right 0------ >>> parse (parseDecimal <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseDecimal "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseDecimal <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseDecimal "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseDecimal <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseDecimal "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseDecimal <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseDecimal "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseDecimal <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseDecimal "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseDecimal <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseDecimal "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseDecimal <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseDecimal "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> parse (parseDecimal <* eof) "test" "8" :: Either ParseError Digit--- Right 8------ >>> parse parseDecimal "test" "8xyz" :: Either ParseError Digit--- Right 8------ >>> parse (parseDecimal <* eof) "test" "9" :: Either ParseError Digit--- Right 9------ >>> parse parseDecimal "test" "9xyz" :: Either ParseError Digit--- Right 9------ >>> isn't _Right (parse parseDecimal "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "0123456789") ==> isn't _Right (parse parseDecimal "test" [c] :: Either ParseError Digit) parseDecimal :: (Decimal d, CharParsing p) => p d
src/Data/Digit/Df.hs view
@@ -5,12 +5,12 @@ , parsef ) where -import Data.Digit.Digit(Digit(Digitf)) import Papa import Text.Parser.Char(CharParsing, char) import Text.Parser.Combinators((<?>)) -- $setup+-- >>> import Data.Digit -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) @@ -30,28 +30,16 @@ -- | ----- >>> parse (parsef <* eof) "test" "f" :: Either ParseError Digit--- Right f+-- >>> parse (parsef <* eof) "test" "f" :: Either ParseError HexDigit+-- Right HexDigitf ----- >>> parse parsef "test" "fxyz" :: Either ParseError Digit--- Right f+-- >>> parse parsef "test" "fxyz" :: Either ParseError HexDigit+-- Right HexDigitf ----- >>> isn't _Right (parse parsef "test" "xyz" :: Either ParseError Digit)+-- >>> isn't _Right (parse parsef "test" "xyz" :: Either ParseError HexDigit) -- True------ prop> \c -> c /= 'f' ==> isn't _Right (parse parsef "test" [c] :: Either ParseError Digit) parsef :: (Df d, CharParsing p) => p d parsef = xf <$ char 'f' <?> "f"--instance Df Digit where- df =- prism'- (\() -> Digitf)- (\d -> case d of- Digitf ->- Just ()- _ ->- Nothing)
− src/Data/Digit/Digit.hs
@@ -1,78 +0,0 @@-{-# LANGUAGE NoImplicitPrelude #-}--module Data.Digit.Digit(- Digit(..)-) where--import Papa--data Digit =- Digit0- | Digit1- | Digit2- | Digit3- | Digit4- | Digit5- | Digit6- | Digit7- | Digit8- | Digit9- | Digita- | Digitb- | Digitc- | Digitd- | Digite- | Digitf- | DigitA- | DigitB- | DigitC- | DigitD- | DigitE- | DigitF- deriving (Eq, Ord)--instance Show Digit where- show Digit0 =- "0"- show Digit1 =- "1"- show Digit2 =- "2"- show Digit3 =- "3"- show Digit4 =- "4"- show Digit5 =- "5"- show Digit6 =- "6"- show Digit7 =- "7"- show Digit8 =- "8"- show Digit9 =- "9"- show Digita =- "a"- show Digitb =- "b"- show Digitc =- "c"- show Digitd =- "d"- show Digite =- "e"- show Digitf =- "f"- show DigitA =- "A"- show DigitB =- "B"- show DigitC =- "C"- show DigitD =- "D"- show DigitE =- "E"- show DigitF =- "F"
+ src/Data/Digit/Enum.hs view
@@ -0,0 +1,169 @@+module Data.Digit.Enum+ ( -- * Binary+ enumBinaryNoZero+ , enumBinary+ -- * Octal+ , enumOctalNoZero+ , enumOctal+ -- * Decimal+ , enumDecimalNoZero+ , enumDecimal+ -- * Hexadecimal+ , enumHexadecimalNoZero+ , enumHexadecimal+ -- * HEXADECIMAL+ , enumHEXADECIMALNoZero+ , enumHEXADECIMAL+ )+where++import Control.Lens.Review ((#))+import Data.Digit.Binary+import Data.Digit.Decimal+import Data.Digit.Hexadecimal+import Data.Digit.HEXADECIMAL+import Data.Digit.Octal++-- | @[1]@+enumBinaryNoZero :: BinaryNoZero d => [d]+enumBinaryNoZero = [d1 # ()]++-- | @[0, 1]@+enumBinary :: Binary d => [d]+enumBinary = [d0 # (), d1 # ()]++-- | @[1..7]@+enumOctalNoZero :: OctalNoZero d => [d]+enumOctalNoZero =+ [ d1 # ()+ , d2 # ()+ , d3 # ()+ , d4 # ()+ , d5 # ()+ , d6 # ()+ , d7 # ()+ ]++-- | @[0..7]@+enumOctal :: Octal d => [d]+enumOctal =+ [ d0 # ()+ , d1 # ()+ , d2 # ()+ , d3 # ()+ , d4 # ()+ , d5 # ()+ , d6 # ()+ , d7 # ()+ ]++-- | @[1..9]@+enumDecimalNoZero :: DecimalNoZero d => [d]+enumDecimalNoZero =+ [ d1 # ()+ , d2 # ()+ , d3 # ()+ , d4 # ()+ , d5 # ()+ , d6 # ()+ , d7 # ()+ , d8 # ()+ , d9 # ()+ ]++-- | @[0..9]@+enumDecimal :: Decimal d => [d]+enumDecimal =+ [ d0 # ()+ , d1 # ()+ , d2 # ()+ , d3 # ()+ , d4 # ()+ , d5 # ()+ , d6 # ()+ , d7 # ()+ , d8 # ()+ , d9 # ()+ ]++-- | @[1..9] ++ [a..f]@+enumHexadecimalNoZero :: HexadecimalNoZero d => [d]+enumHexadecimalNoZero =+ [ d1 # ()+ , d2 # ()+ , d3 # ()+ , d4 # ()+ , d5 # ()+ , d6 # ()+ , d7 # ()+ , d8 # ()+ , d9 # ()+ , da # ()+ , db # ()+ , dc # ()+ , dd # ()+ , de # ()+ , df # ()+ ]++-- | @[0..9] ++ [a..f]@+enumHexadecimal :: Hexadecimal d => [d]+enumHexadecimal =+ [ d0 # ()+ , d1 # ()+ , d2 # ()+ , d3 # ()+ , d4 # ()+ , d5 # ()+ , d6 # ()+ , d7 # ()+ , d8 # ()+ , d9 # ()+ , da # ()+ , db # ()+ , dc # ()+ , dd # ()+ , de # ()+ , df # ()+ ]++-- | @[1..9] ++ [A..F]@+enumHEXADECIMALNoZero :: HEXADECIMALNoZero d => [d]+enumHEXADECIMALNoZero =+ [ d1 # ()+ , d2 # ()+ , d3 # ()+ , d4 # ()+ , d5 # ()+ , d6 # ()+ , d7 # ()+ , d8 # ()+ , d9 # ()+ , dA # ()+ , dB # ()+ , dC # ()+ , dD # ()+ , dE # ()+ , dF # ()+ ]++-- | @[0..9] ++ [A..F]@+enumHEXADECIMAL :: HEXADECIMAL d => [d]+enumHEXADECIMAL =+ [ d0 # ()+ , d1 # ()+ , d2 # ()+ , d3 # ()+ , d4 # ()+ , d5 # ()+ , d6 # ()+ , d7 # ()+ , d8 # ()+ , d9 # ()+ , dA # ()+ , dB # ()+ , dC # ()+ , dD # ()+ , dE # ()+ , dF # ()+ ]
src/Data/Digit/HEXADECIMAL.hs view
@@ -1,138 +1,112 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE TemplateHaskell #-} module Data.Digit.HEXADECIMAL(- HEXADECIMALNoZero+ HEXDigit(..)+, HEXADECIMALNoZero , HEXADECIMAL , parseHEXADECIMALNoZero , parseHEXADECIMAL+-- * Prisms+, _HEXDigit0+, _HEXDigit1+, _HEXDigit2+, _HEXDigit3+, _HEXDigit4+, _HEXDigit5+, _HEXDigit6+, _HEXDigit7+, _HEXDigit8+, _HEXDigit9+, _HEXDigitA+, _HEXDigitB+, _HEXDigitC+, _HEXDigitD+, _HEXDigitE+, _HEXDigitF+-- * Re-exports+, module Data.Digit.D0+, module Data.Digit.D1+, module Data.Digit.D2+, module Data.Digit.D3+, module Data.Digit.D4+, module Data.Digit.D5+, module Data.Digit.D6+, module Data.Digit.D7+, module Data.Digit.D8+, module Data.Digit.D9+, module Data.Digit.DA+, module Data.Digit.DB+, module Data.Digit.DC+, module Data.Digit.DD+, module Data.Digit.DE+, module Data.Digit.DF ) where +import Prelude (Eq, Show, Ord)+import Control.Lens.TH (makePrisms) import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.D0(D0, parse0)-import Data.Digit.D1(D1)-import Data.Digit.D2(D2)-import Data.Digit.D3(D3)-import Data.Digit.D4(D4)-import Data.Digit.D5(D5)-import Data.Digit.D6(D6)-import Data.Digit.D7(D7)-import Data.Digit.D8(D8)-import Data.Digit.D9(D9)-import Data.Digit.DA(DA, parseA)-import Data.Digit.DB(DB, parseB)-import Data.Digit.DC(DC, parseC)-import Data.Digit.DD(DD, parseD)-import Data.Digit.DE(DE, parseE)-import Data.Digit.DF(DF, parseF)+import Data.Digit.D0+import Data.Digit.D1+import Data.Digit.D2+import Data.Digit.D3+import Data.Digit.D4+import Data.Digit.D5+import Data.Digit.D6+import Data.Digit.D7+import Data.Digit.D8+import Data.Digit.D9+import Data.Digit.DA+import Data.Digit.DB+import Data.Digit.DC+import Data.Digit.DD+import Data.Digit.DE+import Data.Digit.DF import Data.Digit.Decimal(parseDecimalNoZero) --- $setup--- >>> import Text.Parsec(parse, ParseError, eof)--- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit--- >>> import Papa+data HEXDigit+ = HEXDigit0+ | HEXDigit1+ | HEXDigit2+ | HEXDigit3+ | HEXDigit4+ | HEXDigit5+ | HEXDigit6+ | HEXDigit7+ | HEXDigit8+ | HEXDigit9+ | HEXDigitA+ | HEXDigitB+ | HEXDigitC+ | HEXDigitD+ | HEXDigitE+ | HEXDigitF+ deriving (Show, Eq, Ord) +makePrisms ''HEXDigit++instance D0 HEXDigit where; d0 = _HEXDigit0+instance D1 HEXDigit where; d1 = _HEXDigit1+instance D2 HEXDigit where; d2 = _HEXDigit2+instance D3 HEXDigit where; d3 = _HEXDigit3+instance D4 HEXDigit where; d4 = _HEXDigit4+instance D5 HEXDigit where; d5 = _HEXDigit5+instance D6 HEXDigit where; d6 = _HEXDigit6+instance D7 HEXDigit where; d7 = _HEXDigit7+instance D8 HEXDigit where; d8 = _HEXDigit8+instance D9 HEXDigit where; d9 = _HEXDigit9+instance DA HEXDigit where; dA = _HEXDigitA+instance DB HEXDigit where; dB = _HEXDigitB+instance DC HEXDigit where; dC = _HEXDigitC+instance DD HEXDigit where; dD = _HEXDigitD+instance DE HEXDigit where; dE = _HEXDigitE+instance DF HEXDigit where; dF = _HEXDigitF+ type HEXADECIMALNoZero d = (D1 d, D2 d, D3 d, D4 d, D5 d, D6 d, D7 d, D8 d, D9 d, DA d, DB d, DC d, DD d, DE d, DF d) --- |------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseHEXADECIMALNoZero "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseHEXADECIMALNoZero "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseHEXADECIMALNoZero "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseHEXADECIMALNoZero "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseHEXADECIMALNoZero "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseHEXADECIMALNoZero "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseHEXADECIMALNoZero "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "8" :: Either ParseError Digit--- Right 8------ >>> parse parseHEXADECIMALNoZero "test" "8xyz" :: Either ParseError Digit--- Right 8------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "9" :: Either ParseError Digit--- Right 9------ >>> parse parseHEXADECIMALNoZero "test" "9xyz" :: Either ParseError Digit--- Right 9------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "A" :: Either ParseError Digit--- Right A------ >>> parse parseHEXADECIMALNoZero "test" "Axyz" :: Either ParseError Digit--- Right A------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "B" :: Either ParseError Digit--- Right B------ >>> parse parseHEXADECIMALNoZero "test" "Bxyz" :: Either ParseError Digit--- Right B------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "C" :: Either ParseError Digit--- Right C------ >>> parse parseHEXADECIMALNoZero "test" "Cxyz" :: Either ParseError Digit--- Right C------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "D" :: Either ParseError Digit--- Right D------ >>> parse parseHEXADECIMALNoZero "test" "Dxyz" :: Either ParseError Digit--- Right D------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "E" :: Either ParseError Digit--- Right E------ >>> parse parseHEXADECIMALNoZero "test" "Exyz" :: Either ParseError Digit--- Right E------ >>> parse (parseHEXADECIMALNoZero <* eof) "test" "F" :: Either ParseError Digit--- Right F------ >>> parse parseHEXADECIMALNoZero "test" "Fxyz" :: Either ParseError Digit--- Right F------ >>> isn't _Right (parse parseHEXADECIMALNoZero "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "123456789ABCDEF") ==> isn't _Right (parse parseHEXADECIMALNoZero "test" [c] :: Either ParseError Digit) parseHEXADECIMALNoZero :: (HEXADECIMALNoZero d, CharParsing p) => p d@@ -151,108 +125,6 @@ type HEXADECIMAL d = (D0 d, HEXADECIMALNoZero d) --- |------ >>> parse (parseHEXADECIMAL <* eof) "test" "0" :: Either ParseError Digit--- Right 0------ >>> parse parseHEXADECIMAL "test" "0xyz" :: Either ParseError Digit--- Right 0------ >>> parse (parseHEXADECIMAL <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseHEXADECIMAL "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseHEXADECIMAL <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseHEXADECIMAL "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseHEXADECIMAL <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseHEXADECIMAL "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseHEXADECIMAL <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseHEXADECIMAL "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseHEXADECIMAL <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseHEXADECIMAL "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseHEXADECIMAL <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseHEXADECIMAL "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseHEXADECIMAL <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseHEXADECIMAL "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> parse (parseHEXADECIMAL <* eof) "test" "8" :: Either ParseError Digit--- Right 8------ >>> parse parseHEXADECIMAL "test" "8xyz" :: Either ParseError Digit--- Right 8------ >>> parse (parseHEXADECIMAL <* eof) "test" "9" :: Either ParseError Digit--- Right 9------ >>> parse parseHEXADECIMAL "test" "9xyz" :: Either ParseError Digit--- Right 9------ >>> parse (parseHEXADECIMAL <* eof) "test" "A" :: Either ParseError Digit--- Right A------ >>> parse parseHEXADECIMAL "test" "Axyz" :: Either ParseError Digit--- Right A------ >>> parse (parseHEXADECIMAL <* eof) "test" "B" :: Either ParseError Digit--- Right B------ >>> parse parseHEXADECIMAL "test" "Bxyz" :: Either ParseError Digit--- Right B------ >>> parse (parseHEXADECIMAL <* eof) "test" "C" :: Either ParseError Digit--- Right C------ >>> parse parseHEXADECIMAL "test" "Cxyz" :: Either ParseError Digit--- Right C------ >>> parse (parseHEXADECIMAL <* eof) "test" "D" :: Either ParseError Digit--- Right D------ >>> parse parseHEXADECIMAL "test" "Dxyz" :: Either ParseError Digit--- Right D------ >>> parse (parseHEXADECIMAL <* eof) "test" "E" :: Either ParseError Digit--- Right E------ >>> parse parseHEXADECIMAL "test" "Exyz" :: Either ParseError Digit--- Right E------ >>> parse (parseHEXADECIMAL <* eof) "test" "F" :: Either ParseError Digit--- Right F------ >>> parse parseHEXADECIMAL "test" "Fxyz" :: Either ParseError Digit--- Right F------ >>> isn't _Right (parse parseHEXADECIMAL "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "0123456789ABCDEF") ==> isn't _Right (parse parseHEXADECIMAL "test" [c] :: Either ParseError Digit) parseHEXADECIMAL :: (HEXADECIMAL d, CharParsing p) => p d
src/Data/Digit/HeXaDeCiMaL.hs view
@@ -1,186 +1,130 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE TemplateHaskell #-} module Data.Digit.HeXaDeCiMaL(- HeXaDeCiMaLNoZero+ HeXDigit(..)+, HeXaDeCiMaLNoZero , HeXaDeCiMaL , parseHeXaDeCiMaLNoZero , parseHeXaDeCiMaL+-- * Prisms+, _HeXDigit0+, _HeXDigit1+, _HeXDigit2+, _HeXDigit3+, _HeXDigit4+, _HeXDigit5+, _HeXDigit6+, _HeXDigit7+, _HeXDigit8+, _HeXDigit9+, _HeXDigita+, _HeXDigitb+, _HeXDigitc+, _HeXDigitd+, _HeXDigite+, _HeXDigitf+, _HeXDigitA+, _HeXDigitB+, _HeXDigitC+, _HeXDigitD+, _HeXDigitE+, _HeXDigitF+-- * Re-exports+, module Data.Digit.D0+, module Data.Digit.D1+, module Data.Digit.D2+, module Data.Digit.D3+, module Data.Digit.D4+, module Data.Digit.D5+, module Data.Digit.D6+, module Data.Digit.D7+, module Data.Digit.D8+, module Data.Digit.D9+, module Data.Digit.DAa+, module Data.Digit.DBb+, module Data.Digit.DCc+, module Data.Digit.DDd+, module Data.Digit.DEe+, module Data.Digit.DFf ) where +import Prelude (Eq, Show, Ord)+import Control.Lens.TH (makePrisms) import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.D0(D0, parse0)-import Data.Digit.D1(D1)-import Data.Digit.D2(D2)-import Data.Digit.D3(D3)-import Data.Digit.D4(D4)-import Data.Digit.D5(D5)-import Data.Digit.D6(D6)-import Data.Digit.D7(D7)-import Data.Digit.D8(D8)-import Data.Digit.D9(D9)-import Data.Digit.DA(DA)-import Data.Digit.DB(DB)-import Data.Digit.DC(DC)-import Data.Digit.DD(DD)-import Data.Digit.DE(DE)-import Data.Digit.DF(DF)-import Data.Digit.Da(Da)-import Data.Digit.Db(Db)-import Data.Digit.Dc(Dc)-import Data.Digit.Dd(Dd)-import Data.Digit.De(De)-import Data.Digit.Df(Df)+import Data.Digit.D0+import Data.Digit.D1+import Data.Digit.D2+import Data.Digit.D3+import Data.Digit.D4+import Data.Digit.D5+import Data.Digit.D6+import Data.Digit.D7+import Data.Digit.D8+import Data.Digit.D9 import Data.Digit.Decimal(parseDecimalNoZero)-import Data.Digit.DAa(parseAa)-import Data.Digit.DBb(parseBb)-import Data.Digit.DCc(parseCc)-import Data.Digit.DDd(parseDd)-import Data.Digit.DEe(parseEe)-import Data.Digit.DFf(parseFf)+import Data.Digit.DAa+import Data.Digit.DBb+import Data.Digit.DCc+import Data.Digit.DDd+import Data.Digit.DEe+import Data.Digit.DFf --- $setup--- >>> import Text.Parsec(parse, ParseError, eof)--- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit--- >>> import Papa+data HeXDigit+ = HeXDigit0+ | HeXDigit1+ | HeXDigit2+ | HeXDigit3+ | HeXDigit4+ | HeXDigit5+ | HeXDigit6+ | HeXDigit7+ | HeXDigit8+ | HeXDigit9+ | HeXDigita+ | HeXDigitb+ | HeXDigitc+ | HeXDigitd+ | HeXDigite+ | HeXDigitf+ | HeXDigitA+ | HeXDigitB+ | HeXDigitC+ | HeXDigitD+ | HeXDigitE+ | HeXDigitF+ deriving (Show, Eq, Ord) +makePrisms ''HeXDigit++instance D0 HeXDigit where; d0 = _HeXDigit0+instance D1 HeXDigit where; d1 = _HeXDigit1+instance D2 HeXDigit where; d2 = _HeXDigit2+instance D3 HeXDigit where; d3 = _HeXDigit3+instance D4 HeXDigit where; d4 = _HeXDigit4+instance D5 HeXDigit where; d5 = _HeXDigit5+instance D6 HeXDigit where; d6 = _HeXDigit6+instance D7 HeXDigit where; d7 = _HeXDigit7+instance D8 HeXDigit where; d8 = _HeXDigit8+instance D9 HeXDigit where; d9 = _HeXDigit9+instance DA HeXDigit where; dA = _HeXDigitA+instance Da HeXDigit where; da = _HeXDigita+instance DB HeXDigit where; dB = _HeXDigitB+instance Db HeXDigit where; db = _HeXDigitb+instance DC HeXDigit where; dC = _HeXDigitC+instance Dc HeXDigit where; dc = _HeXDigitc+instance DD HeXDigit where; dD = _HeXDigitD+instance Dd HeXDigit where; dd = _HeXDigitd+instance DE HeXDigit where; dE = _HeXDigitE+instance De HeXDigit where; de = _HeXDigite+instance DF HeXDigit where; dF = _HeXDigitF+instance Df HeXDigit where; df = _HeXDigitf+ type HeXaDeCiMaLNoZero d = (D1 d, D2 d, D3 d, D4 d, D5 d, D6 d, D7 d, D8 d, D9 d, DA d, DB d, DC d, DD d, DE d, DF d, Da d, Db d, Dc d, Dd d, De d, De d, Df d) --- |------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseHeXaDeCiMaLNoZero "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseHeXaDeCiMaLNoZero "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseHeXaDeCiMaLNoZero "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseHeXaDeCiMaLNoZero "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseHeXaDeCiMaLNoZero "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseHeXaDeCiMaLNoZero "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseHeXaDeCiMaLNoZero "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "8" :: Either ParseError Digit--- Right 8------ >>> parse parseHeXaDeCiMaLNoZero "test" "8xyz" :: Either ParseError Digit--- Right 8------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "9" :: Either ParseError Digit--- Right 9------ >>> parse parseHeXaDeCiMaLNoZero "test" "9xyz" :: Either ParseError Digit--- Right 9------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "a" :: Either ParseError Digit--- Right a------ >>> parse parseHeXaDeCiMaLNoZero "test" "axyz" :: Either ParseError Digit--- Right a------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "b" :: Either ParseError Digit--- Right b------ >>> parse parseHeXaDeCiMaLNoZero "test" "bxyz" :: Either ParseError Digit--- Right b------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "c" :: Either ParseError Digit--- Right c------ >>> parse parseHeXaDeCiMaLNoZero "test" "cxyz" :: Either ParseError Digit--- Right c------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "d" :: Either ParseError Digit--- Right d------ >>> parse parseHeXaDeCiMaLNoZero "test" "dxyz" :: Either ParseError Digit--- Right d------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "e" :: Either ParseError Digit--- Right e------ >>> parse parseHeXaDeCiMaLNoZero "test" "exyz" :: Either ParseError Digit--- Right e------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "f" :: Either ParseError Digit--- Right f------ >>> parse parseHeXaDeCiMaLNoZero "test" "fxyz" :: Either ParseError Digit--- Right f------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "A" :: Either ParseError Digit--- Right A------ >>> parse parseHeXaDeCiMaLNoZero "test" "Axyz" :: Either ParseError Digit--- Right A------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "B" :: Either ParseError Digit--- Right B------ >>> parse parseHeXaDeCiMaLNoZero "test" "Bxyz" :: Either ParseError Digit--- Right B------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "C" :: Either ParseError Digit--- Right C------ >>> parse parseHeXaDeCiMaLNoZero "test" "Cxyz" :: Either ParseError Digit--- Right C------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "D" :: Either ParseError Digit--- Right D------ >>> parse parseHeXaDeCiMaLNoZero "test" "Dxyz" :: Either ParseError Digit--- Right D------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "E" :: Either ParseError Digit--- Right E------ >>> parse parseHeXaDeCiMaLNoZero "test" "Exyz" :: Either ParseError Digit--- Right E------ >>> parse (parseHeXaDeCiMaLNoZero <* eof) "test" "F" :: Either ParseError Digit--- Right F------ >>> parse parseHeXaDeCiMaLNoZero "test" "Fxyz" :: Either ParseError Digit--- Right F------ >>> isn't _Right (parse parseHeXaDeCiMaLNoZero "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "123456789abcdefABCDEF") ==> isn't _Right (parse parseHeXaDeCiMaLNoZero "test" [c] :: Either ParseError Digit) parseHeXaDeCiMaLNoZero :: (HeXaDeCiMaLNoZero d, CharParsing p) => p d@@ -199,144 +143,6 @@ type HeXaDeCiMaL d = (D0 d, HeXaDeCiMaLNoZero d) --- |------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "0" :: Either ParseError Digit--- Right 0------ >>> parse parseHeXaDeCiMaL "test" "0xyz" :: Either ParseError Digit--- Right 0------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseHeXaDeCiMaL "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseHeXaDeCiMaL "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseHeXaDeCiMaL "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseHeXaDeCiMaL "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseHeXaDeCiMaL "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseHeXaDeCiMaL "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseHeXaDeCiMaL "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "8" :: Either ParseError Digit--- Right 8------ >>> parse parseHeXaDeCiMaL "test" "8xyz" :: Either ParseError Digit--- Right 8------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "9" :: Either ParseError Digit--- Right 9------ >>> parse parseHeXaDeCiMaL "test" "9xyz" :: Either ParseError Digit--- Right 9------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "a" :: Either ParseError Digit--- Right a------ >>> parse parseHeXaDeCiMaL "test" "axyz" :: Either ParseError Digit--- Right a------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "b" :: Either ParseError Digit--- Right b------ >>> parse parseHeXaDeCiMaL "test" "bxyz" :: Either ParseError Digit--- Right b------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "c" :: Either ParseError Digit--- Right c------ >>> parse parseHeXaDeCiMaL "test" "cxyz" :: Either ParseError Digit--- Right c------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "d" :: Either ParseError Digit--- Right d------ >>> parse parseHeXaDeCiMaL "test" "dxyz" :: Either ParseError Digit--- Right d------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "e" :: Either ParseError Digit--- Right e------ >>> parse parseHeXaDeCiMaL "test" "exyz" :: Either ParseError Digit--- Right e------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "f" :: Either ParseError Digit--- Right f------ >>> parse parseHeXaDeCiMaL "test" "fxyz" :: Either ParseError Digit--- Right f------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "A" :: Either ParseError Digit--- Right A------ >>> parse parseHeXaDeCiMaL "test" "Axyz" :: Either ParseError Digit--- Right A------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "B" :: Either ParseError Digit--- Right B------ >>> parse parseHeXaDeCiMaL "test" "Bxyz" :: Either ParseError Digit--- Right B------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "C" :: Either ParseError Digit--- Right C------ >>> parse parseHeXaDeCiMaL "test" "Cxyz" :: Either ParseError Digit--- Right C------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "D" :: Either ParseError Digit--- Right D------ >>> parse parseHeXaDeCiMaL "test" "Dxyz" :: Either ParseError Digit--- Right D------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "E" :: Either ParseError Digit--- Right E------ >>> parse parseHeXaDeCiMaL "test" "Exyz" :: Either ParseError Digit--- Right E------ >>> parse (parseHeXaDeCiMaL <* eof) "test" "F" :: Either ParseError Digit--- Right F------ >>> parse parseHeXaDeCiMaL "test" "Fxyz" :: Either ParseError Digit--- Right F------ >>> isn't _Right (parse parseHeXaDeCiMaL "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "0123456789abcdefABCDEF") ==> isn't _Right (parse parseHeXaDeCiMaL "test" [c] :: Either ParseError Digit) parseHeXaDeCiMaL :: (HeXaDeCiMaL d, CharParsing p) => p d
src/Data/Digit/Hexadecimal.hs view
@@ -1,138 +1,112 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE TemplateHaskell #-} module Data.Digit.Hexadecimal(- HexadecimalNoZero+ HexDigit(..)+, HexadecimalNoZero , Hexadecimal , parseHexadecimalNoZero , parseHexadecimal+-- * Prisms+, _HexDigit0+, _HexDigit1+, _HexDigit2+, _HexDigit3+, _HexDigit4+, _HexDigit5+, _HexDigit6+, _HexDigit7+, _HexDigit8+, _HexDigit9+, _HexDigita+, _HexDigitb+, _HexDigitc+, _HexDigitd+, _HexDigite+, _HexDigitf+-- * Re-exports+, module Data.Digit.D0+, module Data.Digit.D1+, module Data.Digit.D2+, module Data.Digit.D3+, module Data.Digit.D4+, module Data.Digit.D5+, module Data.Digit.D6+, module Data.Digit.D7+, module Data.Digit.D8+, module Data.Digit.D9+, module Data.Digit.Da+, module Data.Digit.Db+, module Data.Digit.Dc+, module Data.Digit.Dd+, module Data.Digit.De+, module Data.Digit.Df ) where +import Prelude (Eq, Show, Ord)+import Control.Lens.TH (makePrisms) import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.D0(D0, parse0)-import Data.Digit.D1(D1)-import Data.Digit.D2(D2)-import Data.Digit.D3(D3)-import Data.Digit.D4(D4)-import Data.Digit.D5(D5)-import Data.Digit.D6(D6)-import Data.Digit.D7(D7)-import Data.Digit.D8(D8)-import Data.Digit.D9(D9)-import Data.Digit.Da(Da, parsea)-import Data.Digit.Db(Db, parseb)-import Data.Digit.Dc(Dc, parsec)-import Data.Digit.Dd(Dd, parsed)-import Data.Digit.De(De, parsee)-import Data.Digit.Df(Df, parsef)+import Data.Digit.D0+import Data.Digit.D1+import Data.Digit.D2+import Data.Digit.D3+import Data.Digit.D4+import Data.Digit.D5+import Data.Digit.D6+import Data.Digit.D7+import Data.Digit.D8+import Data.Digit.D9+import Data.Digit.Da+import Data.Digit.Db+import Data.Digit.Dc+import Data.Digit.Dd+import Data.Digit.De+import Data.Digit.Df import Data.Digit.Decimal(parseDecimalNoZero) --- $setup--- >>> import Text.Parsec(parse, ParseError, eof)--- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit--- >>> import Papa+data HexDigit+ = HexDigit0+ | HexDigit1+ | HexDigit2+ | HexDigit3+ | HexDigit4+ | HexDigit5+ | HexDigit6+ | HexDigit7+ | HexDigit8+ | HexDigit9+ | HexDigita+ | HexDigitb+ | HexDigitc+ | HexDigitd+ | HexDigite+ | HexDigitf+ deriving (Show, Eq, Ord) +makePrisms ''HexDigit++instance D0 HexDigit where; d0 = _HexDigit0+instance D1 HexDigit where; d1 = _HexDigit1+instance D2 HexDigit where; d2 = _HexDigit2+instance D3 HexDigit where; d3 = _HexDigit3+instance D4 HexDigit where; d4 = _HexDigit4+instance D5 HexDigit where; d5 = _HexDigit5+instance D6 HexDigit where; d6 = _HexDigit6+instance D7 HexDigit where; d7 = _HexDigit7+instance D8 HexDigit where; d8 = _HexDigit8+instance D9 HexDigit where; d9 = _HexDigit9+instance Da HexDigit where; da = _HexDigita+instance Db HexDigit where; db = _HexDigitb+instance Dc HexDigit where; dc = _HexDigitc+instance Dd HexDigit where; dd = _HexDigitd+instance De HexDigit where; de = _HexDigite+instance Df HexDigit where; df = _HexDigitf+ type HexadecimalNoZero d = (D1 d, D2 d, D3 d, D4 d, D5 d, D6 d, D7 d, D8 d, D9 d, Da d, Db d, Dc d, Dd d, De d, De d, Df d) --- |------ >>> parse (parseHexadecimalNoZero <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseHexadecimalNoZero "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseHexadecimalNoZero <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseHexadecimalNoZero "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseHexadecimalNoZero <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseHexadecimalNoZero "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseHexadecimalNoZero <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseHexadecimalNoZero "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseHexadecimalNoZero <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseHexadecimalNoZero "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseHexadecimalNoZero <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseHexadecimalNoZero "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseHexadecimalNoZero <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseHexadecimalNoZero "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> parse (parseHexadecimalNoZero <* eof) "test" "8" :: Either ParseError Digit--- Right 8------ >>> parse parseHexadecimalNoZero "test" "8xyz" :: Either ParseError Digit--- Right 8------ >>> parse (parseHexadecimalNoZero <* eof) "test" "9" :: Either ParseError Digit--- Right 9------ >>> parse parseHexadecimalNoZero "test" "9xyz" :: Either ParseError Digit--- Right 9------ >>> parse (parseHexadecimalNoZero <* eof) "test" "a" :: Either ParseError Digit--- Right a------ >>> parse parseHexadecimalNoZero "test" "axyz" :: Either ParseError Digit--- Right a------ >>> parse (parseHexadecimalNoZero <* eof) "test" "b" :: Either ParseError Digit--- Right b------ >>> parse parseHexadecimalNoZero "test" "bxyz" :: Either ParseError Digit--- Right b------ >>> parse (parseHexadecimalNoZero <* eof) "test" "c" :: Either ParseError Digit--- Right c------ >>> parse parseHexadecimalNoZero "test" "cxyz" :: Either ParseError Digit--- Right c------ >>> parse (parseHexadecimalNoZero <* eof) "test" "d" :: Either ParseError Digit--- Right d------ >>> parse parseHexadecimalNoZero "test" "dxyz" :: Either ParseError Digit--- Right d------ >>> parse (parseHexadecimalNoZero <* eof) "test" "e" :: Either ParseError Digit--- Right e------ >>> parse parseHexadecimalNoZero "test" "exyz" :: Either ParseError Digit--- Right e------ >>> parse (parseHexadecimalNoZero <* eof) "test" "f" :: Either ParseError Digit--- Right f------ >>> parse parseHexadecimalNoZero "test" "fxyz" :: Either ParseError Digit--- Right f------ >>> isn't _Right (parse parseHexadecimalNoZero "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "123456789abcdef") ==> isn't _Right (parse parseHexadecimalNoZero "test" [c] :: Either ParseError Digit) parseHexadecimalNoZero :: (HexadecimalNoZero d, CharParsing p) => p d@@ -151,108 +125,6 @@ type Hexadecimal d = (D0 d, HexadecimalNoZero d) --- |------ >>> parse (parseHexadecimal <* eof) "test" "0" :: Either ParseError Digit--- Right 0------ >>> parse parseHexadecimal "test" "0xyz" :: Either ParseError Digit--- Right 0------ >>> parse (parseHexadecimal <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseHexadecimal "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseHexadecimal <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseHexadecimal "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseHexadecimal <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseHexadecimal "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseHexadecimal <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseHexadecimal "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseHexadecimal <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseHexadecimal "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseHexadecimal <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseHexadecimal "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseHexadecimal <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseHexadecimal "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> parse (parseHexadecimal <* eof) "test" "8" :: Either ParseError Digit--- Right 8------ >>> parse parseHexadecimal "test" "8xyz" :: Either ParseError Digit--- Right 8------ >>> parse (parseHexadecimal <* eof) "test" "9" :: Either ParseError Digit--- Right 9------ >>> parse parseHexadecimal "test" "9xyz" :: Either ParseError Digit--- Right 9------ >>> parse (parseHexadecimal <* eof) "test" "a" :: Either ParseError Digit--- Right a------ >>> parse parseHexadecimal "test" "axyz" :: Either ParseError Digit--- Right a------ >>> parse (parseHexadecimal <* eof) "test" "b" :: Either ParseError Digit--- Right b------ >>> parse parseHexadecimal "test" "bxyz" :: Either ParseError Digit--- Right b------ >>> parse (parseHexadecimal <* eof) "test" "c" :: Either ParseError Digit--- Right c------ >>> parse parseHexadecimal "test" "cxyz" :: Either ParseError Digit--- Right c------ >>> parse (parseHexadecimal <* eof) "test" "d" :: Either ParseError Digit--- Right d------ >>> parse parseHexadecimal "test" "dxyz" :: Either ParseError Digit--- Right d------ >>> parse (parseHexadecimal <* eof) "test" "e" :: Either ParseError Digit--- Right e------ >>> parse parseHexadecimal "test" "exyz" :: Either ParseError Digit--- Right e------ >>> parse (parseHexadecimal <* eof) "test" "f" :: Either ParseError Digit--- Right f------ >>> parse parseHexadecimal "test" "fxyz" :: Either ParseError Digit--- Right f------ >>> isn't _Right (parse parseHexadecimal "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "0123456789abcdef") ==> isn't _Right (parse parseHexadecimal "test" [c] :: Either ParseError Digit) parseHexadecimal :: (Hexadecimal d, CharParsing p) => p d
src/Data/Digit/Integral.hs view
@@ -1,60 +1,58 @@ {-# LANGUAGE NoImplicitPrelude #-} module Data.Digit.Integral(+-- * Binary integralBinaryNoZero , integralBinary+, integralBinDigits+, binDigitsIntegral+-- * Octal , integralOctalNoZero , integralOctal+, integralOctDigits+, octDigitsIntegral+-- * Decimal , integralDecimal , integralDecimalNoZero+, integralDecDigits+, decDigitsIntegral+-- * Hexadecimal , integralHexadecimalNoZero , integralHexadecimal+, integralHexDigits+, hexDigitsIntegral+-- * HEXADECIMAL , integralHEXADECIMALNoZero , integralHEXADECIMAL+, integralHEXDigits+, _HEXDigitsIntegral+-- * HeXaDeCiMaL+, integralHeXaDeCiMaLNoZero+, integralHeXaDeCiMaL+, _HeXDigitsIntegral ) where +import Prelude (error) import Control.Lens.Extras(is)-import Data.Digit.Binary as D-import Data.Digit.Decimal as D-import Data.Digit.Octal as D-import Data.Digit.Hexadecimal as D-import Data.Digit.HEXADECIMAL as D-import Data.Digit.D0 as D-import Data.Digit.D1 as D-import Data.Digit.D2 as D-import Data.Digit.D3 as D-import Data.Digit.D4 as D-import Data.Digit.D5 as D-import Data.Digit.D6 as D-import Data.Digit.D7 as D-import Data.Digit.D8 as D-import Data.Digit.D9 as D-import Data.Digit.Da as D-import Data.Digit.DA as D-import Data.Digit.Db as D-import Data.Digit.DB as D-import Data.Digit.Dc as D-import Data.Digit.DC as D-import Data.Digit.Dd as D-import Data.Digit.DD as D-import Data.Digit.De as D-import Data.Digit.DE as D-import Data.Digit.Df as D-import Data.Digit.DF as D+import Data.Digit.Binary+import Data.Digit.Decimal+import Data.Digit.Octal+import Data.Digit.Hexadecimal+import Data.Digit.HEXADECIMAL+import Data.Digit.HeXaDeCiMaL+import qualified Data.List.NonEmpty as NonEmpty import Papa -- $setup--- >>> import Data.Digit.Digit+-- >>> import Data.Digit -- | -- -- >>> 1 ^? integralBinaryNoZero--- Just ()+-- Just BinDigit1 ----- >>> integralBinaryNoZero # Digit1 :: Integer+-- >>> integralBinaryNoZero # BinDigit1 :: Integer -- 1------ prop> \c -> c /= 1 ==> (c ^? integralBinaryNoZero == Nothing) integralBinaryNoZero :: (Integral a, BinaryNoZero d) => Prism'@@ -65,19 +63,11 @@ -- | ----- >>> 0 ^? integralBinary :: Maybe Digit--- Just 0------ >>> 1 ^? integralBinary :: Maybe Digit--- Just 1+-- >>> 0 ^? integralBinary :: Maybe BinDigit+-- Just BinDigit0 ----- >>> integralBinary # Digit0 :: Integer+-- >>> integralBinary # BinDigit0 :: Integer -- 0------ >>> integralBinary # Digit1 :: Integer--- 1------ prop> \c -> (c `notElem` [0, 1]) ==> (c ^? integralBinary == Nothing) integralBinary :: (Integral a, Binary d) => Prism'@@ -85,52 +75,55 @@ d integralBinary = associatePrism (0, d0) [(1, d1)]- + -- |------ >>> 1 ^? integralOctalNoZero :: Maybe Digit--- Just 1------ >>> 2 ^? integralOctalNoZero :: Maybe Digit--- Just 2------ >>> 3 ^? integralOctalNoZero :: Maybe Digit--- Just 3------ >>> 4 ^? integralOctalNoZero :: Maybe Digit--- Just 4------ >>> 5 ^? integralOctalNoZero :: Maybe Digit--- Just 5------ >>> 6 ^? integralOctalNoZero :: Maybe Digit--- Just 6+-- >>> integralBinDigits (4 :: Int)+-- Right (BinDigit1 :| [BinDigit0, BinDigit0]) ----- >>> 7 ^? integralOctalNoZero :: Maybe Digit--- Just 7+-- >>> integralBinDigits (0 :: Int)+-- Right (BinDigit0 :| []) ----- >>> integralOctalNoZero # Digit1 :: Integer--- 1+-- >>> integralBinDigits (-1 :: Int)+-- Left (BinDigit0 :| []) ----- >>> integralOctalNoZero # Digit2 :: Integer--- 2+-- >>> integralBinDigits (-4 :: Int)+-- Left (BinDigit1 :| [BinDigit1])+integralBinDigits :: Integral a => a -> Either (NonEmpty BinDigit) (NonEmpty BinDigit)+integralBinDigits n =+ if n >= 0+ then Right . NonEmpty.fromList $ go n []+ else Left . NonEmpty.fromList $ go (-n - 1) []+ where+ go k =+ let+ (q, r) = quotRem k 2+ in+ (if q == 0 then id else go q) . ((r ^?! integralBinary) :)++-- |+-- >>> binDigitsIntegral (Right (BinDigit1 :| [BinDigit0, BinDigit0])) :: Int+-- 4 ----- >>> integralOctalNoZero # Digit3 :: Integer--- 3+-- >>> binDigitsIntegral (Right (BinDigit0 :| [])) :: Int+-- 0 ----- >>> integralOctalNoZero # Digit4 :: Integer--- 4+-- >>> binDigitsIntegral (Left (BinDigit0 :| [])) :: Int+-- -1 ----- >>> integralOctalNoZero # Digit5 :: Integer--- 5+-- >>> binDigitsIntegral (Left (BinDigit1 :| [BinDigit1])) :: Int+-- -4+binDigitsIntegral :: Integral a => Either (NonEmpty BinDigit) (NonEmpty BinDigit) -> a+binDigitsIntegral = either (\n -> -(go n) - 1) go+ where+ go = foldl' (\b a -> (integralBinary # a) + 2 * b) 0++-- | ----- >>> integralOctalNoZero # Digit6 :: Integer--- 6+-- >>> 7 ^? integralOctalNoZero :: Maybe OctDigit+-- Just OctDigit7 ----- >>> integralOctalNoZero # Digit7 :: Integer+-- >>> integralOctalNoZero # OctDigit7 :: Integer -- 7------ prop> \c -> (c `notElem` [1..7]) ==> (c ^? integralOctalNoZero == Nothing) integralOctalNoZero :: (Integral a, OctalNoZero d) => Prism'@@ -141,55 +134,11 @@ -- | ----- >>> 0 ^? integralOctal :: Maybe Digit--- Just 0------ >>> 1 ^? integralOctal :: Maybe Digit--- Just 1------ >>> 2 ^? integralOctal :: Maybe Digit--- Just 2------ >>> 3 ^? integralOctal :: Maybe Digit--- Just 3------ >>> 4 ^? integralOctal :: Maybe Digit--- Just 4------ >>> 5 ^? integralOctal :: Maybe Digit--- Just 5------ >>> 6 ^? integralOctal :: Maybe Digit--- Just 6------ >>> 7 ^? integralOctal :: Maybe Digit--- Just 7------ >>> integralOctal # Digit0 :: Integer--- 0------ >>> integralOctal # Digit1 :: Integer--- 1------ >>> integralOctal # Digit2 :: Integer--- 2------ >>> integralOctal # Digit3 :: Integer--- 3------ >>> integralOctal # Digit4 :: Integer--- 4------ >>> integralOctal # Digit5 :: Integer--- 5------ >>> integralOctal # Digit6 :: Integer--- 6+-- >>> 7 ^? integralOctal :: Maybe OctDigit+-- Just OctDigit7 ----- >>> integralOctal # Digit7 :: Integer+-- >>> integralOctal # OctDigit7 :: Integer -- 7------ prop> \c -> (c `notElem` [0..7]) ==> (c ^? integralOctal == Nothing) integralOctal :: (Integral a, Octal d) => Prism'@@ -197,64 +146,54 @@ d integralOctal = associatePrism (0, d0) [(1, d1), (2, d2), (3, d3), (4, d4), (5, d5), (6, d6), (7, d7)]- + -- |------ >>> 1 ^? integralDecimalNoZero :: Maybe Digit--- Just 1------ >>> 2 ^? integralDecimalNoZero :: Maybe Digit--- Just 2------ >>> 3 ^? integralDecimalNoZero :: Maybe Digit--- Just 3------ >>> 4 ^? integralDecimalNoZero :: Maybe Digit--- Just 4------ >>> 5 ^? integralDecimalNoZero :: Maybe Digit--- Just 5------ >>> 6 ^? integralDecimalNoZero :: Maybe Digit--- Just 6------ >>> 7 ^? integralDecimalNoZero :: Maybe Digit--- Just 7------ >>> 8 ^? integralDecimalNoZero :: Maybe Digit--- Just 8------ >>> 9 ^? integralDecimalNoZero :: Maybe Digit--- Just 9------ >>> integralDecimalNoZero # Digit1 :: Integer--- 1------ >>> integralDecimalNoZero # Digit2 :: Integer--- 2+-- >>> integralOctDigits (64 :: Int)+-- Right (OctDigit1 :| [OctDigit0, OctDigit0]) ----- >>> integralDecimalNoZero # Digit3 :: Integer--- 3+-- >>> integralOctDigits (0 :: Int)+-- Right (OctDigit0 :| []) ----- >>> integralDecimalNoZero # Digit4 :: Integer--- 4+-- >>> integralOctDigits (-1 :: Int)+-- Left (OctDigit0 :| []) ----- >>> integralDecimalNoZero # Digit5 :: Integer--- 5+-- >>> integralOctDigits (-64 :: Int)+-- Left (OctDigit7 :| [OctDigit7])+integralOctDigits :: Integral a => a -> Either (NonEmpty OctDigit) (NonEmpty OctDigit)+integralOctDigits n =+ if n >= 0+ then Right . NonEmpty.fromList $ go n []+ else Left . NonEmpty.fromList $ go (-n - 1) []+ where+ go k =+ let+ (q, r) = quotRem k 8+ in+ (if q == 0 then id else go q) . ((r ^?! integralOctal) :)++-- |+-- >>> octDigitsIntegral (Right (OctDigit1 :| [OctDigit0, OctDigit0])) :: Int+-- 64 ----- >>> integralDecimalNoZero # Digit6 :: Integer--- 6+-- >>> octDigitsIntegral (Right (OctDigit0 :| [])) :: Int+-- 0 ----- >>> integralDecimalNoZero # Digit7 :: Integer--- 7+-- >>> octDigitsIntegral (Left (OctDigit0 :| [])) :: Int+-- -1 ----- >>> integralDecimalNoZero # Digit8 :: Integer--- 8+-- >>> octDigitsIntegral (Left (OctDigit7 :| [OctDigit7])) :: Int+-- -64+octDigitsIntegral :: Integral a => Either (NonEmpty OctDigit) (NonEmpty OctDigit) -> a+octDigitsIntegral = either (\n -> -(go n) - 1) go+ where+ go = foldl' (\b a -> (integralOctal # a) + 8 * b) 0++-- |+-- >>> 9 ^? integralDecimalNoZero :: Maybe DecDigit+-- Just DecDigit9 ----- >>> integralDecimalNoZero # Digit9 :: Integer+-- >>> integralDecimalNoZero # DecDigit9 :: Integer -- 9------ prop> \c -> (c `notElem` [1..9]) ==> (c ^? integralDecimalNoZero == Nothing) integralDecimalNoZero :: (Integral a, DecimalNoZero d) => Prism'@@ -264,68 +203,11 @@ associatePrism (1, d1) [(2, d2), (3, d3), (4, d4), (5, d5), (6, d6), (7, d7), (8, d8), (9, d9)] -- |------ >>> 0 ^? integralDecimal :: Maybe Digit--- Just 0------ >>> 1 ^? integralDecimal :: Maybe Digit--- Just 1------ >>> 2 ^? integralDecimal :: Maybe Digit--- Just 2------ >>> 3 ^? integralDecimal :: Maybe Digit--- Just 3------ >>> 4 ^? integralDecimal :: Maybe Digit--- Just 4------ >>> 5 ^? integralDecimal :: Maybe Digit--- Just 5------ >>> 6 ^? integralDecimal :: Maybe Digit--- Just 6------ >>> 7 ^? integralDecimal :: Maybe Digit--- Just 7------ >>> 8 ^? integralDecimal :: Maybe Digit--- Just 8------ >>> 9 ^? integralDecimal :: Maybe Digit--- Just 9------ >>> integralDecimal # Digit0 :: Integer--- 0------ >>> integralDecimal # Digit1 :: Integer--- 1------ >>> integralDecimal # Digit2 :: Integer--- 2------ >>> integralDecimal # Digit3 :: Integer--- 3------ >>> integralDecimal # Digit4 :: Integer--- 4------ >>> integralDecimal # Digit5 :: Integer--- 5------ >>> integralDecimal # Digit6 :: Integer--- 6------ >>> integralDecimal # Digit7 :: Integer--- 7------ >>> integralDecimal # Digit8 :: Integer--- 8+-- >>> 9 ^? integralDecimal :: Maybe DecDigit+-- Just DecDigit9 ----- >>> integralDecimal # Digit9 :: Integer+-- >>> integralDecimal # DecDigit9 :: Integer -- 9------ prop> \c -> (c `notElem` [0..9]) ==> (c ^? integralDecimal == Nothing) integralDecimal :: (Integral a, Decimal d) => Prism'@@ -333,100 +215,55 @@ d integralDecimal = associatePrism (0, d0) [(1, d1), (2, d2), (3, d3), (4, d4), (5, d5), (6, d6), (7, d7), (8, d8), (9, d9)]- + -- |------ >>> 1 ^? integralHexadecimalNoZero :: Maybe Digit--- Just 1------ >>> 2 ^? integralHexadecimalNoZero :: Maybe Digit--- Just 2------ >>> 3 ^? integralHexadecimalNoZero :: Maybe Digit--- Just 3------ >>> 4 ^? integralHexadecimalNoZero :: Maybe Digit--- Just 4------ >>> 5 ^? integralHexadecimalNoZero :: Maybe Digit--- Just 5------ >>> 6 ^? integralHexadecimalNoZero :: Maybe Digit--- Just 6------ >>> 7 ^? integralHexadecimalNoZero :: Maybe Digit--- Just 7------ >>> 8 ^? integralHexadecimalNoZero :: Maybe Digit--- Just 8------ >>> 9 ^? integralHexadecimalNoZero :: Maybe Digit--- Just 9------ >>> 10 ^? integralHexadecimalNoZero :: Maybe Digit--- Just a------ >>> 11 ^? integralHexadecimalNoZero :: Maybe Digit--- Just b------ >>> 12 ^? integralHexadecimalNoZero :: Maybe Digit--- Just c------ >>> 13 ^? integralHexadecimalNoZero :: Maybe Digit--- Just d------ >>> 14 ^? integralHexadecimalNoZero :: Maybe Digit--- Just e------ >>> 15 ^? integralHexadecimalNoZero :: Maybe Digit--- Just f------ >>> integralHexadecimalNoZero # Digit1 :: Integer--- 1------ >>> integralHexadecimalNoZero # Digit2 :: Integer--- 2------ >>> integralHexadecimalNoZero # Digit3 :: Integer--- 3------ >>> integralHexadecimalNoZero # Digit4 :: Integer--- 4------ >>> integralHexadecimalNoZero # Digit5 :: Integer--- 5------ >>> integralHexadecimalNoZero # Digit6 :: Integer--- 6------ >>> integralHexadecimalNoZero # Digit7 :: Integer--- 7+-- >>> integralDecDigits (100 :: Int)+-- Right (DecDigit1 :| [DecDigit0, DecDigit0]) ----- >>> integralHexadecimalNoZero # Digit8 :: Integer--- 8+-- >>> integralDecDigits (0 :: Int)+-- Right (DecDigit0 :| []) ----- >>> integralHexadecimalNoZero # Digit9 :: Integer--- 9+-- >>> integralDecDigits (-1 :: Int)+-- Left (DecDigit0 :| []) ----- >>> integralHexadecimalNoZero # Digita :: Integer--- 10+-- >>> integralDecDigits (-100 :: Int)+-- Left (DecDigit9 :| [DecDigit9])+integralDecDigits :: Integral a => a -> Either (NonEmpty DecDigit) (NonEmpty DecDigit)+integralDecDigits n =+ if n >= 0+ then Right . NonEmpty.fromList $ go n []+ else Left . NonEmpty.fromList $ go (-n - 1) []+ where+ go k =+ let+ (q, r) = quotRem k 10+ in+ (if q == 0 then id else go q) . ((r ^?! integralDecimal) :)++-- |+-- >>> decDigitsIntegral (Right (DecDigit1 :| [DecDigit0, DecDigit0])) :: Int+-- 100 ----- >>> integralHexadecimalNoZero # Digitb :: Integer--- 11+-- >>> decDigitsIntegral (Right (DecDigit0 :| [])) :: Int+-- 0 ----- >>> integralHexadecimalNoZero # Digitc :: Integer--- 12+-- >>> decDigitsIntegral (Left (DecDigit0 :| [])) :: Int+-- -1 ----- >>> integralHexadecimalNoZero # Digitd :: Integer--- 13+-- >>> decDigitsIntegral (Left (DecDigit9 :| [DecDigit9])) :: Int+-- -100+decDigitsIntegral :: Integral a => Either (NonEmpty DecDigit) (NonEmpty DecDigit) -> a+decDigitsIntegral = either (\n -> -(go n) - 1) go+ where+ go = foldl' (\b a -> (integralDecimal # a) + 10 * b) 0++-- | ----- >>> integralHexadecimalNoZero # Digite :: Integer--- 14+-- >>> 15 ^? integralHexadecimalNoZero :: Maybe HexDigit+-- Just HexDigitf ----- >>> integralHexadecimalNoZero # Digitf :: Integer+-- >>> integralHexadecimalNoZero # HexDigitf :: Integer -- 15------ prop> \c -> (c `notElem` [1..15]) ==> (c ^? integralHexadecimalNoZero == Nothing) integralHexadecimalNoZero :: (Integral a, HexadecimalNoZero d) => Prism'@@ -437,103 +274,11 @@ -- | ----- >>> 0 ^? integralHexadecimal :: Maybe Digit--- Just 0------ >>> 1 ^? integralHexadecimal :: Maybe Digit--- Just 1------ >>> 2 ^? integralHexadecimal :: Maybe Digit--- Just 2------ >>> 3 ^? integralHexadecimal :: Maybe Digit--- Just 3------ >>> 4 ^? integralHexadecimal :: Maybe Digit--- Just 4------ >>> 5 ^? integralHexadecimal :: Maybe Digit--- Just 5------ >>> 6 ^? integralHexadecimal :: Maybe Digit--- Just 6------ >>> 7 ^? integralHexadecimal :: Maybe Digit--- Just 7------ >>> 8 ^? integralHexadecimal :: Maybe Digit--- Just 8------ >>> 9 ^? integralHexadecimal :: Maybe Digit--- Just 9------ >>> 10 ^? integralHexadecimal :: Maybe Digit--- Just a------ >>> 11 ^? integralHexadecimal :: Maybe Digit--- Just b------ >>> 12 ^? integralHexadecimal :: Maybe Digit--- Just c------ >>> 13 ^? integralHexadecimal :: Maybe Digit--- Just d------ >>> 14 ^? integralHexadecimal :: Maybe Digit--- Just e------ >>> 15 ^? integralHexadecimal :: Maybe Digit--- Just f------ >>> integralHexadecimal # Digit0 :: Integer--- 0------ >>> integralHexadecimal # Digit1 :: Integer--- 1------ >>> integralHexadecimal # Digit2 :: Integer--- 2------ >>> integralHexadecimal # Digit3 :: Integer--- 3------ >>> integralHexadecimal # Digit4 :: Integer--- 4------ >>> integralHexadecimal # Digit5 :: Integer--- 5------ >>> integralHexadecimal # Digit6 :: Integer--- 6------ >>> integralHexadecimal # Digit7 :: Integer--- 7------ >>> integralHexadecimal # Digit8 :: Integer--- 8------ >>> integralHexadecimal # Digit9 :: Integer--- 9------ >>> integralHexadecimal # Digita :: Integer--- 10------ >>> integralHexadecimal # Digitb :: Integer--- 11------ >>> integralHexadecimal # Digitc :: Integer--- 12------ >>> integralHexadecimal # Digitd :: Integer--- 13------ >>> integralHexadecimal # Digite :: Integer--- 14+-- >>> 15 ^? integralHexadecimal :: Maybe HexDigit+-- Just HexDigitf ----- >>> integralHexadecimal # Digitf :: Integer+-- >>> integralHexadecimal # HexDigitf :: Integer -- 15------ prop> \c -> (c `notElem` [0..15]) ==> (c ^? integralHexadecimal == Nothing) integralHexadecimal :: (Integral a, Hexadecimal d) => Prism'@@ -543,98 +288,53 @@ associatePrism (0, d0) [(1, d1), (2, d2), (3, d3), (4, d4), (5, d5), (6, d6), (7, d7), (8, d8), (9, d9), (10, da), (11, db), (12, dc), (13, dd), (14, de), (15, df)] -- |------ >>> 1 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just 1------ >>> 2 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just 2------ >>> 3 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just 3------ >>> 4 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just 4------ >>> 5 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just 5------ >>> 6 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just 6------ >>> 7 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just 7------ >>> 8 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just 8------ >>> 9 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just 9------ >>> 10 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just A------ >>> 11 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just B------ >>> 12 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just C------ >>> 13 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just D------ >>> 14 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just E------ >>> 15 ^? integralHEXADECIMALNoZero :: Maybe Digit--- Just F------ >>> integralHEXADECIMALNoZero # Digit1 :: Integer--- 1------ >>> integralHEXADECIMALNoZero # Digit2 :: Integer--- 2------ >>> integralHEXADECIMALNoZero # Digit3 :: Integer--- 3------ >>> integralHEXADECIMALNoZero # Digit4 :: Integer--- 4------ >>> integralHEXADECIMALNoZero # Digit5 :: Integer--- 5------ >>> integralHEXADECIMALNoZero # Digit6 :: Integer--- 6------ >>> integralHEXADECIMALNoZero # Digit7 :: Integer--- 7+-- >>> integralHexDigits (256 :: Int)+-- Right (HexDigit1 :| [HexDigit0, HexDigit0]) ----- >>> integralHEXADECIMALNoZero # Digit8 :: Integer--- 8+-- >>> integralHexDigits (0 :: Int)+-- Right (HexDigit0 :| []) ----- >>> integralHEXADECIMALNoZero # Digit9 :: Integer--- 9+-- >>> integralHexDigits (-1 :: Int)+-- Left (HexDigit0 :| []) ----- >>> integralHEXADECIMALNoZero # DigitA :: Integer--- 10+-- >>> integralHexDigits (-256 :: Int)+-- Left (HexDigitf :| [HexDigitf])+integralHexDigits :: Integral a => a -> Either (NonEmpty HexDigit) (NonEmpty HexDigit)+integralHexDigits n =+ if n >= 0+ then Right . NonEmpty.fromList $ go n []+ else Left . NonEmpty.fromList $ go (-n - 1) []+ where+ go k =+ let+ (q, r) = quotRem k 16+ in+ (if q == 0 then id else go q) . ((r ^?! integralHexadecimal) :)++-- |+-- >>> hexDigitsIntegral (Right (HexDigit1 :| [HexDigit0, HexDigit0])) :: Int+-- 256 ----- >>> integralHEXADECIMALNoZero # DigitB :: Integer--- 11+-- >>> hexDigitsIntegral (Right (HexDigit0 :| [])) :: Int+-- 0 ----- >>> integralHEXADECIMALNoZero # DigitC :: Integer--- 12+-- >>> hexDigitsIntegral (Left (HexDigit0 :| [])) :: Int+-- -1 ----- >>> integralHEXADECIMALNoZero # DigitD :: Integer--- 13+-- >>> hexDigitsIntegral (Left (HexDigitf :| [HexDigitf])) :: Int+-- -256+hexDigitsIntegral :: Integral a => Either (NonEmpty HexDigit) (NonEmpty HexDigit) -> a+hexDigitsIntegral = either (\n -> -(go n) - 1) go+ where+ go = foldl' (\b a -> (integralHexadecimal # a) + 16 * b) 0++-- | ----- >>> integralHEXADECIMALNoZero # DigitE :: Integer--- 14+-- >>> 15 ^? integralHEXADECIMALNoZero :: Maybe HEXDigit+-- Just HEXDigitF ----- >>> integralHEXADECIMALNoZero # DigitF :: Integer+-- >>> integralHEXADECIMALNoZero # HEXDigitF :: Integer -- 15------ prop> \c -> (c `notElem` [1..15]) ==> (c ^? integralHEXADECIMALNoZero == Nothing) integralHEXADECIMALNoZero :: (Integral a, HEXADECIMALNoZero d) => Prism'@@ -646,110 +346,151 @@ -- | ----- >>> 0 ^? integralHEXADECIMAL :: Maybe Digit--- Just 0------ >>> 1 ^? integralHEXADECIMAL :: Maybe Digit--- Just 1------ >>> 2 ^? integralHEXADECIMAL :: Maybe Digit--- Just 2------ >>> 3 ^? integralHEXADECIMAL :: Maybe Digit--- Just 3------ >>> 4 ^? integralHEXADECIMAL :: Maybe Digit--- Just 4------ >>> 5 ^? integralHEXADECIMAL :: Maybe Digit--- Just 5------ >>> 6 ^? integralHEXADECIMAL :: Maybe Digit--- Just 6------ >>> 7 ^? integralHEXADECIMAL :: Maybe Digit--- Just 7------ >>> 8 ^? integralHEXADECIMAL :: Maybe Digit--- Just 8------ >>> 9 ^? integralHEXADECIMAL :: Maybe Digit--- Just 9------ >>> 10 ^? integralHEXADECIMAL :: Maybe Digit--- Just A------ >>> 11 ^? integralHEXADECIMAL :: Maybe Digit--- Just B+-- >>> 15 ^? integralHEXADECIMAL :: Maybe HEXDigit+-- Just HEXDigitF ----- >>> 12 ^? integralHEXADECIMAL :: Maybe Digit--- Just C+-- >>> integralHEXADECIMAL # HEXDigitF :: Integer+-- 15+integralHEXADECIMAL ::+ (Integral a, HEXADECIMAL d) =>+ Prism'+ a+ d+integralHEXADECIMAL =+ associatePrism (0, d0) [(1, d1), (2, d2), (3, d3), (4, d4), (5, d5), (6, d6), (7, d7), (8, d8), (9, d9), (10, dA), (11, dB), (12, dC), (13, dD), (14, dE), (15, dF)]++-- |+-- >>> integralHEXDigits (256 :: Int)+-- Right (HEXDigit1 :| [HEXDigit0, HEXDigit0]) ----- >>> 13 ^? integralHEXADECIMAL :: Maybe Digit--- Just D+-- >>> integralHEXDigits (0 :: Int)+-- Right (HEXDigit0 :| []) ----- >>> 14 ^? integralHEXADECIMAL :: Maybe Digit--- Just E+-- >>> integralHEXDigits (-1 :: Int)+-- Left (HEXDigit0 :| []) ----- >>> 15 ^? integralHEXADECIMAL :: Maybe Digit--- Just F+-- >>> integralHEXDigits (-256 :: Int)+-- Left (HEXDigitF :| [HEXDigitF])+integralHEXDigits :: Integral a => a -> Either (NonEmpty HEXDigit) (NonEmpty HEXDigit)+integralHEXDigits n =+ if n >= 0+ then Right . NonEmpty.fromList $ go n []+ else Left . NonEmpty.fromList $ go (-n - 1) []+ where+ go k =+ let+ (q, r) = quotRem k 16+ in+ (if q == 0 then id else go q) . ((r ^?! integralHEXADECIMAL) :)++-- |+-- >>> HEXDigitsIntegral (Right (HEXDigit1 :| [HEXDigit0, HEXDigit0])) :: Int+-- 256 ----- >>> integralHEXADECIMAL # Digit0 :: Integer+-- >>> HEXDigitsIntegral (Right (HEXDigit0 :| [])) :: Int -- 0 ----- >>> integralHEXADECIMAL # Digit1 :: Integer--- 1------ >>> integralHEXADECIMAL # Digit2 :: Integer--- 2------ >>> integralHEXADECIMAL # Digit3 :: Integer--- 3------ >>> integralHEXADECIMAL # Digit4 :: Integer--- 4------ >>> integralHEXADECIMAL # Digit5 :: Integer--- 5------ >>> integralHEXADECIMAL # Digit6 :: Integer--- 6------ >>> integralHEXADECIMAL # Digit7 :: Integer--- 7------ >>> integralHEXADECIMAL # Digit8 :: Integer--- 8------ >>> integralHEXADECIMAL # Digit9 :: Integer--- 9------ >>> integralHEXADECIMAL # DigitA :: Integer--- 10+-- >>> HEXDigitsIntegral (Left (HEXDigit0 :| [])) :: Int+-- -1 ----- >>> integralHEXADECIMAL # DigitB :: Integer--- 11+-- >>> HEXDigitsIntegral (Left (HEXDigitF :| [HEXDigitF])) :: Int+-- -256+_HEXDigitsIntegral :: Integral a => Either (NonEmpty HEXDigit) (NonEmpty HEXDigit) -> a+_HEXDigitsIntegral = either (\n -> -(go n) - 1) go+ where+ go = foldl' (\b a -> (integralHEXADECIMAL # a) + 16 * b) 0++-- | ----- >>> integralHEXADECIMAL # DigitC :: Integer--- 12+-- >>> 15 ^? integralHeXaDeCiMaLNoZero :: Maybe HeXDigit+-- Just HeXDigitF ----- >>> integralHEXADECIMAL # DigitD :: Integer--- 13+-- >>> integralHeXaDeCiMaLNoZero # HeXDigitF :: Integer+-- 15+integralHeXaDeCiMaLNoZero ::+ (Integral a, HeXaDeCiMaLNoZero d) =>+ Review+ a+ d+integralHeXaDeCiMaLNoZero =+ unto+ (outside d1 .~ (\_ -> 1) $+ outside d2 .~ (\_ -> 2) $+ outside d3 .~ (\_ -> 3) $+ outside d4 .~ (\_ -> 4) $+ outside d5 .~ (\_ -> 5) $+ outside d6 .~ (\_ -> 6) $+ outside d7 .~ (\_ -> 7) $+ outside d8 .~ (\_ -> 8) $+ outside d9 .~ (\_ -> 9) $+ outside da .~ (\_ -> 10) $+ outside dA .~ (\_ -> 10) $+ outside db .~ (\_ -> 11) $+ outside dB .~ (\_ -> 11) $+ outside dc .~ (\_ -> 12) $+ outside dC .~ (\_ -> 12) $+ outside dd .~ (\_ -> 13) $+ outside dD .~ (\_ -> 13) $+ outside de .~ (\_ -> 14) $+ outside dE .~ (\_ -> 14) $+ outside df .~ (\_ -> 15) $+ outside dF .~ (\_ -> 15) $+ error "incomplete pattern")++-- | ----- >>> integralHEXADECIMAL # DigitE :: Integer--- 14+-- >>> 15 ^? integralHeXaDeCiMaL :: Maybe HeXDigit+-- Just HeXDigitF ----- >>> integralHEXADECIMAL # DigitF :: Integer+-- >>> integralHeXaDeCiMaL # HeXDigitF :: Integer -- 15------ prop> \c -> (c `notElem` [0..15]) ==> (c ^? integralHEXADECIMAL == Nothing)-integralHEXADECIMAL ::- (Integral a, HEXADECIMAL d) =>- Prism'+integralHeXaDeCiMaL ::+ (Integral a, HeXaDeCiMaL d) =>+ Review a d-integralHEXADECIMAL =- associatePrism (0, d0) [(1, d1), (2, d2), (3, d3), (4, d4), (5, d5), (6, d6), (7, d7), (8, d8), (9, d9), (10, dA), (11, dB), (12, dC), (13, dD), (14, dE), (15, dF)]+integralHeXaDeCiMaL =+ unto+ (outside d0 .~ (\_ -> 0) $+ outside d1 .~ (\_ -> 1) $+ outside d2 .~ (\_ -> 2) $+ outside d3 .~ (\_ -> 3) $+ outside d4 .~ (\_ -> 4) $+ outside d5 .~ (\_ -> 5) $+ outside d6 .~ (\_ -> 6) $+ outside d7 .~ (\_ -> 7) $+ outside d8 .~ (\_ -> 8) $+ outside d9 .~ (\_ -> 9) $+ outside da .~ (\_ -> 10) $+ outside dA .~ (\_ -> 10) $+ outside db .~ (\_ -> 11) $+ outside dB .~ (\_ -> 11) $+ outside dc .~ (\_ -> 12) $+ outside dC .~ (\_ -> 12) $+ outside dd .~ (\_ -> 13) $+ outside dD .~ (\_ -> 13) $+ outside de .~ (\_ -> 14) $+ outside dE .~ (\_ -> 14) $+ outside df .~ (\_ -> 15) $+ outside dF .~ (\_ -> 15) $+ error "incomplete pattern")++-- |+-- >>> HeXDigitsIntegral (Right (HeXDigit1 :| [HeXDigit0, HeXDigit0])) :: Int+-- 256+--+-- >>> HeXDigitsIntegral (Right (HeXDigit0 :| [])) :: Int+-- 0+--+-- >>> HeXDigitsIntegral (Left (HeXDigit0 :| [])) :: Int+-- -1+--+-- >>> HeXDigitsIntegral (Left (HeXDigitF :| [HeXDigitF])) :: Int+-- -256+_HeXDigitsIntegral :: Integral a => Either (NonEmpty HeXDigit) (NonEmpty HeXDigit) -> a+_HeXDigitsIntegral = either (\n -> -(go n) - 1) go+ where+ go = foldl' (\b a -> (integralHeXaDeCiMaL # a) + 16 * b) 0 ---- not exported associatePrism ::
src/Data/Digit/Natural.hs view
@@ -22,7 +22,7 @@ import Data.Maybe (Maybe (..)) -import Data.Digit.Digit+import Data.Digit.Decimal import Data.Digit.Integral (integralDecimal) import Numeric.Natural (Natural)@@ -32,40 +32,37 @@ -- | -- -- >>> _NaturalDigits # 0--- 0 :| []+-- DecDigit0 :| [] -- -- >>> _NaturalDigits # 1--- 1 :| []+-- DecDigit1 :| [] ----- >>> _NaturalDigits # 9223372036854775807--- 9 :| [2,2,3,3,7,2,0,3,6,8,5,4,7,7,5,8,0,7]+-- >>> _NaturalDigits # 922+-- DecDigit9 :| [DecDigit2,DecDigit2] ----- >>> (9 :| [2,2,3,3,7,2,0,3,6,8,5,4,7,7,5,8,0,7]) ^? _NaturalDigits--- Just 9223372036854775807+-- >>> (DecDigit9 :| [DecDigit2,DecDigit2]) ^? _NaturalDigits+-- Just 922 ----- >>> (1 :| []) ^? _NaturalDigits+-- >>> (DecDigit1 :| []) ^? _NaturalDigits -- Just 1 -- -- prop> \x -> digitsToNatural ( naturalToDigits x ) == Just x ---_NaturalDigits :: Prism' (NonEmpty Digit) Natural+_NaturalDigits :: Prism' (NonEmpty DecDigit) Natural _NaturalDigits = prism' naturalToDigits digitsToNatural --- | NonEmpty Digits from a Natural number+-- | -- -- >>> naturalDigits 0--- 0 :| []+-- DecDigit0 :| [] -- -- >>> naturalDigits 9--- 9 :| []------ >>> naturalDigits 393564--- 3 :| [9,3,5,6,4]+-- DecDigit9 :| [] ----- >>> naturalDigits 9223372036854775807--- 9 :| [2,2,3,3,7,2,0,3,6,8,5,4,7,7,5,8,0,7]+-- >>> naturalDigits 393+-- DecDigit3 :| [DecDigit9,DecDigit3] ---naturalToDigits :: Natural -> NonEmpty Digit+naturalToDigits :: Natural -> NonEmpty DecDigit naturalToDigits n = case toDecimalDigits $ fromIntegral n of -- toDecimalDigits :: n -> ([n],n)@@ -77,45 +74,39 @@ where t allDigs eXP =- replicate (eXP - length allDigs) Digit0+ replicate (eXP - length allDigs) (d0 # ()) -- EWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW! -- But you can't reach this point unless you have a non-zero absolute integral value. So... I dunno.- g 0 = Digit0- g 1 = Digit1- g 2 = Digit2- g 3 = Digit3- g 4 = Digit4- g 5 = Digit5- g 6 = Digit6- g 7 = Digit7- g 8 = Digit8- g 9 = Digit9+ g 0 = d0 # ()+ g 1 = d1 # ()+ g 2 = d2 # ()+ g 3 = d3 # ()+ g 4 = d4 # ()+ g 5 = d5 # ()+ g 6 = d6 # ()+ g 7 = d7 # ()+ g 8 = d8 # ()+ g 9 = d9 # () g _ = error "The universe now has more than ten digits." -- | Create a number from a list of digits with the integer bounds of the machine. ----- >>> naturalFromDigits (D.x3 :| [D.x4])+-- >>> digitsToNatural (DecDigit3 :| [DecDigit4]) -- Just 34 ----- >>> naturalFromDigits (D.Digit3 :| [D.Digit9,D.Digit3,D.Digit5,D.Digit6,D.Digit4])--- Just 393564------ >>> naturalFromDigits (D.x0 :| [])+-- >>> digitsToNatural (DecDigit0 :| []) -- Just 0 ----- Int maxBound for Int64--- >>> naturalFromDigits (D.x9 :| [D.x2,D.x2,D.x3,D.x3,D.x7,D.x2,D.x0,D.x3,D.x6,D.x8,D.x5,D.x4,D.x7,D.x7,D.x5,D.x8,D.x0,D.x7])+-- >>> digitsToNatural (naturalToDigits (maxBound :: Natural)) -- Just 9223372036854775807 ----- Int maxBound + 1 for Int64--- >>> naturalFromDigits (D.x9 :| [D.x2,D.x2,D.x3,D.x3,D.x7,D.x2,D.x0,D.x3,D.x6,D.x8,D.x5,D.x4,D.x7,D.x7,D.x5,D.x8,D.x0,D.x8])+-- >>> digitsToNatural (naturalToDigits $ (maxBound :: Natural) + 1) -- Nothing----digitsToNatural :: NonEmpty Digit -> Maybe Natural+digitsToNatural :: NonEmpty DecDigit -> Maybe Natural digitsToNatural = fmap fromIntegral . ifoldrM f 0 . NE.reverse where- f :: Int -> Digit -> Int -> Maybe Int+ f :: Int -> DecDigit -> Int -> Maybe Int f i d curr = let next = (integralDecimal # d) * (10 ^ i)
src/Data/Digit/Octal.hs view
@@ -1,81 +1,71 @@ {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE ConstraintKinds #-}+{-# LANGUAGE TemplateHaskell #-} module Data.Digit.Octal(- OctalNoZero+ OctDigit(..)+, OctalNoZero , Octal , parseOctalNoZero , parseOctal+-- * Prisms+, _OctDigit0+, _OctDigit1+, _OctDigit2+, _OctDigit3+, _OctDigit4+, _OctDigit5+, _OctDigit6+, _OctDigit7+-- * Re-exports+, module Data.Digit.D0+, module Data.Digit.D1+, module Data.Digit.D2+, module Data.Digit.D3+, module Data.Digit.D4+, module Data.Digit.D5+, module Data.Digit.D6+, module Data.Digit.D7 ) where +import Prelude (Eq, Show, Ord, Enum, Bounded)+import Control.Lens.TH (makePrisms) import Text.Parser.Char(CharParsing) import Text.Parser.Combinators((<?>), choice)-import Data.Digit.D0(D0, parse0)-import Data.Digit.D1(D1, parse1)-import Data.Digit.D2(D2, parse2)-import Data.Digit.D3(D3, parse3)-import Data.Digit.D4(D4, parse4)-import Data.Digit.D5(D5, parse5)-import Data.Digit.D6(D6, parse6)-import Data.Digit.D7(D7, parse7)+import Data.Digit.D0+import Data.Digit.D1+import Data.Digit.D2+import Data.Digit.D3+import Data.Digit.D4+import Data.Digit.D5+import Data.Digit.D6+import Data.Digit.D7 --- $setup--- >>> import Text.Parsec(parse, ParseError, eof)--- >>> import Data.Void(Void)--- >>> import Data.Digit.Digit--- >>> import Papa+data OctDigit+ = OctDigit0+ | OctDigit1+ | OctDigit2+ | OctDigit3+ | OctDigit4+ | OctDigit5+ | OctDigit6+ | OctDigit7+ deriving (Show, Eq, Ord, Enum, Bounded) +makePrisms ''OctDigit++instance D0 OctDigit where; d0 = _OctDigit0+instance D1 OctDigit where; d1 = _OctDigit1+instance D2 OctDigit where; d2 = _OctDigit2+instance D3 OctDigit where; d3 = _OctDigit3+instance D4 OctDigit where; d4 = _OctDigit4+instance D5 OctDigit where; d5 = _OctDigit5+instance D6 OctDigit where; d6 = _OctDigit6+instance D7 OctDigit where; d7 = _OctDigit7+ type OctalNoZero d = (D1 d, D2 d, D3 d, D4 d, D5 d, D6 d, D7 d) --- |------ >>> parse (parseOctalNoZero <* eof) "test" "1" :: Either ParseError Digit--- Right 1------ >>> parse parseOctalNoZero "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseOctalNoZero <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseOctalNoZero "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseOctalNoZero <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseOctalNoZero "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseOctalNoZero <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseOctalNoZero "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseOctalNoZero <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseOctalNoZero "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseOctalNoZero <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseOctalNoZero "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseOctalNoZero <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseOctalNoZero "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> isn't _Right (parse parseOctalNoZero "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "1234567") ==> isn't _Right (parse parseOctalNoZero "test" [c] :: Either ParseError Digit) parseOctalNoZero :: (OctalNoZero d, CharParsing p) => p d@@ -94,60 +84,6 @@ type Octal d = (D0 d, OctalNoZero d) --- |------ >>> parse (parseOctal <* eof) "test" "0" :: Either ParseError Digit--- Right 0------ >>> parse (parseOctal <* eof) "test" "0" :: Either ParseError Digit--- Right 0------ >>> parse parseOctal "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse parseOctal "test" "1xyz" :: Either ParseError Digit--- Right 1------ >>> parse (parseOctal <* eof) "test" "2" :: Either ParseError Digit--- Right 2------ >>> parse parseOctal "test" "2xyz" :: Either ParseError Digit--- Right 2------ >>> parse (parseOctal <* eof) "test" "3" :: Either ParseError Digit--- Right 3------ >>> parse parseOctal "test" "3xyz" :: Either ParseError Digit--- Right 3------ >>> parse (parseOctal <* eof) "test" "4" :: Either ParseError Digit--- Right 4------ >>> parse parseOctal "test" "4xyz" :: Either ParseError Digit--- Right 4------ >>> parse (parseOctal <* eof) "test" "5" :: Either ParseError Digit--- Right 5------ >>> parse parseOctal "test" "5xyz" :: Either ParseError Digit--- Right 5------ >>> parse (parseOctal <* eof) "test" "6" :: Either ParseError Digit--- Right 6------ >>> parse parseOctal "test" "6xyz" :: Either ParseError Digit--- Right 6------ >>> parse (parseOctal <* eof) "test" "7" :: Either ParseError Digit--- Right 7------ >>> parse parseOctal "test" "7xyz" :: Either ParseError Digit--- Right 7------ >>> isn't _Right (parse parseOctal "test" "xyz" :: Either ParseError Digit)--- True------ prop> \c -> (c `notElem` "01234567") ==> isn't _Right (parse parseOctal "test" [c] :: Either ParseError Digit) parseOctal :: (Octal d, CharParsing p) => p d
test/Main.hs view
@@ -6,22 +6,22 @@ import Data.Digit import Numeric.Natural (Natural)-import Prelude (maxBound)+import Prelude (minBound, maxBound) import Papa hiding (re) import Hedgehog(Property, Gen, forAll, property, assert, (===)) import Test.Tasty(TestTree, defaultMain, testGroup) import Test.Tasty.Hedgehog(testProperty) import Test.Tasty.HUnit(testCase, (@?=))-import qualified Hedgehog.Gen as Gen(choice, integral, unicode, hexit, filter)-import qualified Hedgehog.Range as Range(linear)+import qualified Hedgehog.Gen as Gen+import qualified Hedgehog.Range as Range import Text.Parsec(parse, ParseError, Parsec, eof) testPrism :: (Show x, Eq x) => Gen x -> String- -> Prism' x Digit- -> [(x, Digit)]+ -> Prism' x HeXDigit+ -> [(x, HeXDigit)] -> [TestTree] testPrism g n p x = testProperty@@ -29,14 +29,14 @@ ( property $ do c <- forAll . Gen.filter (`notElem` (map fst x)) $ g- (c ^? p :: Maybe Digit) === Nothing+ (c ^? p :: Maybe HeXDigit) === Nothing ) : ( x >>= \(c, d) -> [ testCase (n ++ " prism ->")- ((c ^? p :: Maybe Digit) @?= Just d)+ ((c ^? p :: Maybe HeXDigit) @?= Just d) , testCase (n ++ " prism <-") (p # d @?= c)@@ -45,8 +45,8 @@ testParser :: String- -> Parsec String () Digit- -> [(Char, Digit)]+ -> Parsec String () HeXDigit+ -> [(Char, HeXDigit)] -> [TestTree] testParser n p x = (@@ -56,7 +56,7 @@ ( property $ do c <- forAll . Gen.filter (`notElem` (map fst x)) . Gen.choice $ [Gen.hexit, Gen.unicode]- assert (isLeft (parse p (n' ++ " test") [c] :: Either ParseError Digit))+ assert (isLeft (parse p (n' ++ " test") [c] :: Either ParseError HeXDigit)) ) ) : (@@ -65,27 +65,27 @@ let n' = n ++ " parses exactly one character" in testCase n'- ((parse (p <* eof) (n' ++ " test") [c] :: Either ParseError Digit) @?= Right d)+ ((parse (p <* eof) (n' ++ " test") [c] :: Either ParseError HeXDigit) @?= Right d) , let n' = n ++ " parses the correct digit" in testCase n'- ((parse p (n' ++ "test") (c:"xyz") :: Either ParseError Digit) @?= Right d)+ ((parse p (n' ++ "test") (c:"xyz") :: Either ParseError HeXDigit) @?= Right d) ] ) integralPrism :: (Show n, Integral n) => String- -> Prism' n Digit- -> [(n, Digit)]+ -> Prism' n HeXDigit+ -> [(n, HeXDigit)] -> [TestTree] integralPrism = testPrism (Gen.choice [Gen.integral (Range.linear 0 9), Gen.integral (Range.linear 10 99999), Gen.integral (Range.linear (-1) (-99999))]) charPrism :: String- -> Prism' Char Digit- -> [(Char, Digit)]+ -> Prism' Char HeXDigit+ -> [(Char, HeXDigit)] -> [TestTree] charPrism = testPrism (Gen.choice [Gen.hexit, Gen.unicode])@@ -103,83 +103,131 @@ [ testProperty "Natural <-> NonEmpty Digit" prop_natural_digits_roundtrip ] +prop_integer_X :: (Integer -> a) -> (a -> Integer) -> Property+prop_integer_X iToX xToI =+ property $ do+ n <- forAll .+ Gen.integral $+ Range.constant+ (fromIntegral (minBound :: Int))+ (fromIntegral (maxBound :: Int))+ xToI (iToX n) === n++prop_X_integer+ :: (Eq a, Show a)+ => Gen a+ -> (Integer -> Either (NonEmpty a) (NonEmpty a))+ -> (Either (NonEmpty a) (NonEmpty a) -> Integer)+ -> Property+prop_X_integer genX iToX xToI =+ property $ do+ let digits = Gen.nonEmpty (Range.constant 1 50) genX+ ds <- forAll $ Gen.choice [Left <$> digits, Right <$> digits]+ xToI (iToX (xToI ds)) === xToI ds++toFromIntegralTests :: TestTree+toFromIntegralTests =+ testGroup "To and from integers"+ [ testProperty "Integer <-> BinDigit" $+ prop_integer_X integralBinDigits binDigitsIntegral+ , testProperty "BinDigit <-> Integer" $+ prop_X_integer (Gen.element enumBinary) integralBinDigits binDigitsIntegral+ , testProperty "Integer <-> OctDigit" $+ prop_integer_X integralOctDigits octDigitsIntegral+ , testProperty "OctDigit <-> Integer" $+ prop_X_integer (Gen.element enumOctal) integralOctDigits octDigitsIntegral+ , testProperty "Integer <-> DecDigit" $+ prop_integer_X integralDecDigits decDigitsIntegral+ , testProperty "DecDigit <-> Integer" $+ prop_X_integer (Gen.element enumDecimal) integralDecDigits decDigitsIntegral+ , testProperty "Integer <-> HexDigit" $+ prop_integer_X integralHexDigits hexDigitsIntegral+ , testProperty "HexDigit <-> Integer" $+ prop_X_integer (Gen.element enumHexadecimal) integralHexDigits hexDigitsIntegral+ , testProperty "Integer <-> HEXDigit" $+ prop_integer_X integralHEXDigits _HEXDigitsIntegral+ , testProperty "HEXDigit <-> Integer" $+ prop_X_integer (Gen.element enumHEXADECIMAL) integralHEXDigits _HEXDigitsIntegral+ ]+ main :: IO () main = defaultMain $ testGroup "All Digit Tests" [ digitBaseTests , digitNaturalTests+ , toFromIntegralTests ] digitBaseTests :: TestTree digitBaseTests = testGroup "digit parser/prism tests" $- let q0 = ('0', Digit0)- q1 = ('1', Digit1)- q2 = ('2', Digit2)- q3 = ('3', Digit3)- q4 = ('4', Digit4)- q5 = ('5', Digit5)- q6 = ('6', Digit6)- q7 = ('7', Digit7)- q8 = ('8', Digit8)- q9 = ('9', Digit9)- qa = ('a', Digita)- qb = ('b', Digitb)- qc = ('c', Digitc)- qd = ('d', Digitd)- qe = ('e', Digite)- qf = ('f', Digitf)- qA = ('A', DigitA)- qB = ('B', DigitB)- qC = ('C', DigitC)- qD = ('D', DigitD)- qE = ('E', DigitE)- qF = ('F', DigitF)- r0 :: (Integer, Digit)- r0 = (0 , Digit0)- r1 :: (Integer, Digit)- r1 = (1 , Digit1)- r2 :: (Integer, Digit)- r2 = (2 , Digit2)- r3 :: (Integer, Digit)- r3 = (3 , Digit3)- r4 :: (Integer, Digit)- r4 = (4 , Digit4)- r5 :: (Integer, Digit)- r5 = (5 , Digit5)- r6 :: (Integer, Digit)- r6 = (6 , Digit6)- r7 :: (Integer, Digit)- r7 = (7 , Digit7)- r8 :: (Integer, Digit)- r8 = (8 , Digit8)- r9 :: (Integer, Digit)- r9 = (9 , Digit9)- ra :: (Integer, Digit)- ra = (10 , Digita)- rb :: (Integer, Digit)- rb = (11 , Digitb)- rc :: (Integer, Digit)- rc = (12 , Digitc)- rd :: (Integer, Digit)- rd = (13 , Digitd)- re :: (Integer, Digit)- re = (14 , Digite)- rf :: (Integer, Digit)- rf = (15 , Digitf)- rA :: (Integer, Digit)- rA = (10 , DigitA)- rB :: (Integer, Digit)- rB = (11 , DigitB)- rC :: (Integer, Digit)- rC = (12 , DigitC)- rD :: (Integer, Digit)- rD = (13 , DigitD)- rE :: (Integer, Digit)- rE = (14 , DigitE)- rF :: (Integer, Digit)- rF = (15 , DigitF)+ let q0 = ('0', HeXDigit0)+ q1 = ('1', HeXDigit1)+ q2 = ('2', HeXDigit2)+ q3 = ('3', HeXDigit3)+ q4 = ('4', HeXDigit4)+ q5 = ('5', HeXDigit5)+ q6 = ('6', HeXDigit6)+ q7 = ('7', HeXDigit7)+ q8 = ('8', HeXDigit8)+ q9 = ('9', HeXDigit9)+ qa = ('a', HeXDigita)+ qb = ('b', HeXDigitb)+ qc = ('c', HeXDigitc)+ qd = ('d', HeXDigitd)+ qe = ('e', HeXDigite)+ qf = ('f', HeXDigitf)+ qA = ('A', HeXDigitA)+ qB = ('B', HeXDigitB)+ qC = ('C', HeXDigitC)+ qD = ('D', HeXDigitD)+ qE = ('E', HeXDigitE)+ qF = ('F', HeXDigitF)+ r0 :: (Integer, HeXDigit)+ r0 = (0 , HeXDigit0)+ r1 :: (Integer, HeXDigit)+ r1 = (1 , HeXDigit1)+ r2 :: (Integer, HeXDigit)+ r2 = (2 , HeXDigit2)+ r3 :: (Integer, HeXDigit)+ r3 = (3 , HeXDigit3)+ r4 :: (Integer, HeXDigit)+ r4 = (4 , HeXDigit4)+ r5 :: (Integer, HeXDigit)+ r5 = (5 , HeXDigit5)+ r6 :: (Integer, HeXDigit)+ r6 = (6 , HeXDigit6)+ r7 :: (Integer, HeXDigit)+ r7 = (7 , HeXDigit7)+ r8 :: (Integer, HeXDigit)+ r8 = (8 , HeXDigit8)+ r9 :: (Integer, HeXDigit)+ r9 = (9 , HeXDigit9)+ ra :: (Integer, HeXDigit)+ ra = (10 , HeXDigita)+ rb :: (Integer, HeXDigit)+ rb = (11 , HeXDigitb)+ rc :: (Integer, HeXDigit)+ rc = (12 , HeXDigitc)+ rd :: (Integer, HeXDigit)+ rd = (13 , HeXDigitd)+ re :: (Integer, HeXDigit)+ re = (14 , HeXDigite)+ rf :: (Integer, HeXDigit)+ rf = (15 , HeXDigitf)+ rA :: (Integer, HeXDigit)+ rA = (10 , HeXDigitA)+ rB :: (Integer, HeXDigit)+ rB = (11 , HeXDigitB)+ rC :: (Integer, HeXDigit)+ rC = (12 , HeXDigitC)+ rD :: (Integer, HeXDigit)+ rD = (13 , HeXDigitD)+ rE :: (Integer, HeXDigit)+ rE = (14 , HeXDigitE)+ rF :: (Integer, HeXDigit)+ rF = (15 , HeXDigitF) in concat [ charPrism "charBinaryNoZero" charBinaryNoZero [q1] , charPrism "charBinary" charBinary [q0, q1]