{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE TypeFamilies #-} module Data.Digit.Class.MixedCase ( -- * Types DAa , DBb , DCc , DDd , DEe , DFf -- * Parsers , parseAa , parseBb , parseCc , parseDd , parseEe , parseFf -- * Re-exports , module Data.Digit.Class.UpperCase , module Data.Digit.Class.LowerCase ) where import Text.Parser.Char (CharParsing) import Text.Parser.Combinators (choice, (<?>)) import Data.Digit.Class.LowerCase import Data.Digit.Class.UpperCase -- $setup -- >>> import Text.Parsec(parse, ParseError, eof) -- >>> import Data.Void(Void) -- >>> import Data.Digit -- >>> import Papa type DAa a = (DA a, Da a) type DBb a = (DB a, Db a) type DCc a = (DC a, Dc a) type DDd a = (DD a, Dd a) type DEe a = (DE a, De a) type DFf a = (DF a, Df a) -- | -- -- >>> parse (parseAa <* eof) "test" "A" :: Either ParseError HeXDigit -- Right HeXDigitA -- -- >>> parse parseAa "test" "Axyz" :: Either ParseError HeXDigit -- Right HeXDigitA -- -- >>> parse (parseAa <* eof) "test" "a" :: Either ParseError HeXDigit -- Right HeXDigita -- -- >>> parse parseAa "test" "axyz" :: Either ParseError HeXDigit -- Right HeXDigita -- -- >>> isn't _Right (parse parseAa "test" "xyz" :: Either ParseError HeXDigit) -- True parseAa :: (DAa d, CharParsing p) => p d parseAa = choice [parseA, parsea] <?> "Aa" -- | -- -- >>> parse (parseBb <* eof) "test" "B" :: Either ParseError HeXDigit -- Right HeXDigitB -- -- >>> parse parseBb "test" "Bxyz" :: Either ParseError HeXDigit -- Right HeXDigitB -- -- >>> parse (parseBb <* eof) "test" "b" :: Either ParseError HeXDigit -- Right HeXDigitb -- -- >>> parse parseBb "test" "bxyz" :: Either ParseError HeXDigit -- Right HeXDigitb -- -- >>> isn't _Right (parse parseBb "test" "xyz" :: Either ParseError HeXDigit) -- True parseBb :: (DBb d, CharParsing p) => p d parseBb = choice [parseB, parseb] <?> "Bb" -- | -- -- >>> parse (parseCc <* eof) "test" "C" :: Either ParseError HeXDigit -- Right HeXDigitC -- -- >>> parse parseCc "test" "Cxyz" :: Either ParseError HeXDigit -- Right HeXDigitC -- -- >>> parse (parseCc <* eof) "test" "c" :: Either ParseError HeXDigit -- Right HeXDigitc -- -- >>> parse parseCc "test" "cxyz" :: Either ParseError HeXDigit -- Right HeXDigitc -- -- >>> isn't _Right (parse parseCc "test" "xyz" :: Either ParseError HeXDigit) -- True parseCc :: (DCc d, CharParsing p) => p d parseCc = choice [parseC, parsec] <?> "Cc" -- | -- -- >>> parse (parseDd <* eof) "test" "D" :: Either ParseError HeXDigit -- Right HeXDigitD -- -- >>> parse parseDd "test" "Dxyz" :: Either ParseError HeXDigit -- Right HeXDigitD -- -- >>> parse (parseDd <* eof) "test" "d" :: Either ParseError HeXDigit -- Right HeXDigitd -- -- >>> parse parseDd "test" "dxyz" :: Either ParseError HeXDigit -- Right HeXDigitd -- -- >>> isn't _Right (parse parseDd "test" "xyz" :: Either ParseError HeXDigit) -- True parseDd :: (DDd d, CharParsing p) => p d parseDd = choice [parseD, parsed] <?> "Dd" -- | -- -- >>> parse (parseEe <* eof) "test" "E" :: Either ParseError HeXDigit -- Right HeXDigitE -- -- >>> parse parseEe "test" "Exyz" :: Either ParseError HeXDigit -- Right HeXDigitE -- -- >>> parse (parseEe <* eof) "test" "e" :: Either ParseError HeXDigit -- Right HeXDigite -- -- >>> parse parseEe "test" "exyz" :: Either ParseError HeXDigit -- Right HeXDigite -- -- >>> isn't _Right (parse parseEe "test" "xyz" :: Either ParseError HeXDigit) -- True parseEe :: (DEe d, CharParsing p) => p d parseEe = choice [parseE, parsee] <?> "Ee" -- | -- -- >>> parse (parseFf <* eof) "test" "F" :: Either ParseError HeXDigit -- Right HeXDigitF -- -- >>> parse parseFf "test" "Fxyz" :: Either ParseError HeXDigit -- Right HeXDigitF -- -- >>> parse (parseFf <* eof) "test" "f" :: Either ParseError HeXDigit -- Right HeXDigitf -- -- >>> parse parseFf "test" "fxyz" :: Either ParseError HeXDigit -- Right HeXDigitf -- -- >>> isn't _Right (parse parseFf "test" "xyz" :: Either ParseError HeXDigit) -- True parseFf :: (DFf d, CharParsing p) => p d parseFf = choice [parseF, parsef] <?> "Ff"