ascii 1.5.4.0 → 1.6.0.0
raw patch · 4 files changed
+201/−104 lines, 4 filesdep ~ascii-numbersdep ~ascii-supersetPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: ascii-numbers, ascii-superset
API changes (from Hackage documentation)
- ASCII: class Lift subset superset
+ ASCII: forgetCase :: forall (letterCase :: Case) superset. ASCII'case letterCase superset -> ASCII superset
+ ASCII: fromChar :: FromChar char => Char -> char
+ ASCII: fromCharList :: FromString string => [Char] -> string
+ ASCII: fromDigit :: DigitSuperset char => Digit -> char
+ ASCII: fromDigitList :: DigitStringSuperset string => [Digit] -> string
+ ASCII: fromHexChar :: HexCharSuperset char => HexChar -> char
+ ASCII: fromHexCharList :: HexStringSuperset string => [HexChar] -> string
- ASCII: lift :: Lift ascii superset => ascii -> superset
+ ASCII: lift :: ASCII superset -> superset
Files
- ascii.cabal +3/−4
- changelog.md +24/−0
- library/ASCII.hs +169/−97
- test/Main.hs +5/−3
ascii.cabal view
@@ -1,7 +1,7 @@ cabal-version: 3.0 name: ascii-version: 1.5.4.0+version: 1.6.0.0 synopsis: The ASCII character set and encoding category: Data, Text @@ -32,9 +32,9 @@ , ascii-char == 1.0.1.* , ascii-group == 1.0.0.* , ascii-case == 1.0.1.*- , ascii-numbers == 1.1.0.*+ , ascii-numbers == 1.2.0.* , ascii-predicates == 1.0.1.*- , ascii-superset == 1.2.7.*+ , ascii-superset == 1.3.0.* , ascii-th == 1.2.0.* , base ^>= 4.14 || ^>= 4.15 || ^>= 4.16 || ^>= 4.17 , bytestring ^>= 0.10.12 || ^>= 0.11@@ -54,7 +54,6 @@ , ASCII.Group , ASCII.Hexadecimal , ASCII.Isomorphism- , ASCII.Lift , ASCII.Lists , ASCII.ListsAndPredicates , ASCII.Predicates
changelog.md view
@@ -1,3 +1,27 @@+### 1.6.0.0 (2023-02-08)++Raise `ascii-superset` to `1.3`. This removes the `ASCII.Lift` module.++Raise `ascii-numbers` to `1.2`.++From the `ASCII` module, the `Lift` class and `lift` function are removed.++The removed `lift` function is replaced with the `lift` function from+`ASCII.Refinement`. If you were using `lift` specialized as+`ASCII a -> a`, then this is not a breaking change. Otherwise, migrate+by using one the new functions below.++```haskell+fromChar :: FromChar char => Char -> char+fromCharList :: FromString string => [Char] -> string+fromDigit :: DigitSuperset char => Digit -> char+fromDigitList :: DigitStringSuperset string => [Digit] -> string+fromHexChar :: HexCharSuperset char => HexChar -> char+fromHexCharList :: HexStringSuperset string => [HexChar] -> string++forgetCase :: ASCII'case letterCase superset -> ASCII superset+```+ ### 1.5.4.0 (2023-02-08) Raise `ascii-superset` to `1.2.7`
library/ASCII.hs view
@@ -29,110 +29,187 @@ module ASCII ( {- * @Char@ -}- {- ** ASCII -} {- $char -} Char,- {- ** Unicode -} UnicodeChar,- {- ** Case-insensitive -} {- $caselessChar -} CaselessChar, + {- ** ASCII -}+ {- $char -} Char,++ {- ** Unicode -}+ UnicodeChar,++ {- ** Case-insensitive -}+ {- $caselessChar -} CaselessChar,+ {- * Character classifications -}- {- ** Print/control groups -} {- $groups -}- Group (..), charGroup, inGroup,- {- ** Upper/lower case -} {- $case -}- Case (..), letterCase, isCase, toCaseChar, toCaseString,- disregardCase, refineCharToCase, refineStringToCase,- {- ** Letters -} isLetter,- {- ** Letters and numbers -} isAlphaNum,- {- ** Decimal digits -} {- $digit -} isDigit, Digit,- {- ** Hexadecimal digits -} {- $hexchar -} isHexDigit, HexChar,- {- ** Octal digits -} isOctDigit,- {- ** Spaces and symbols -} isSpace, isPunctuation, isSymbol, isVisible, - {- * Monomorphic character conversions -} {- $monomorphicConversions -}- {- ** @ASCII.Char@ ↔ @Int@ -} {- $intConversions -}- charToInt, intToCharMaybe, intToCharUnsafe,- {- ** @ASCII.Char@ ↔ @Word8@ -} {- $word8Conversions -}- charToWord8, word8ToCharMaybe, word8ToCharUnsafe,- {- ** @ASCII.Char@ ↔ @UnicodeChar@ -} {- $unicodeCharConversions -}- charToUnicode, unicodeToCharMaybe, unicodeToCharUnsafe,+ {- ** Print/control groups -}+ {- $groups -} Group (..), charGroup, inGroup, + {- ** Upper/lower case -}+ {- $case -} Case (..), letterCase, isCase, toCaseChar, toCaseString,+ disregardCase, refineCharToCase, refineStringToCase,++ {- ** Letters -}+ isLetter,++ {- ** Letters and numbers -}+ isAlphaNum,++ {- ** Decimal digits -}+ {- $digit -} isDigit, Digit,++ {- ** Hexadecimal digits -}+ {- $hexchar -} isHexDigit, HexChar,++ {- ** Octal digits -}+ isOctDigit,++ {- ** Spaces and symbols -}+ isSpace, isPunctuation, isSymbol, isVisible,++ {- * Monomorphic character conversions -}++ {- $monomorphicConversions -}++ {- ** @ASCII.Char@ ↔ @Int@ -}+ {- $intConversions -}+ charToInt, intToCharMaybe, intToCharUnsafe,++ {- ** @ASCII.Char@ ↔ @Word8@ -}+ {- $word8Conversions -}+ charToWord8, word8ToCharMaybe, word8ToCharUnsafe,++ {- ** @ASCII.Char@ ↔ @UnicodeChar@ -}+ {- $unicodeCharConversions -}+ charToUnicode, unicodeToCharMaybe, unicodeToCharUnsafe,+ {- * Monomorphic digit conversions -}- {- ** @Digit@ ↔ @Word8@ -} {- $digitWord8Conversions -}- digitToWord8, word8ToDigitMaybe, word8ToDigitUnsafe,- {- ** @Digit@ ↔ @ASCII.Char@ -} {- $digitCharConversions -}- digitToChar, charToDigitMaybe, charToDigitUnsafe,- {- ** @Digit@ ↔ @UnicodeChar@ -} {- $digitUnicodeConversions -}- digitToUnicode, unicodeToDigitMaybe, unicodeToDigitUnsafe,- {- ** @HexChar@ ↔ @Word8@ -} {- $hexCharWord8Conversions -}- hexCharToWord8, word8ToHexCharMaybe, word8ToHexCharUnsafe,- {- ** @HexChar@ ↔ @ASCII.Char@ -} {- $hexCharCharConversions -}- hexCharToChar, charToHexCharMaybe, charToHexCharUnsafe,- {- ** @HexChar@ ↔ @UnicodeChar@ -} {- $hexCharUnicodeConversions -}- hexCharToUnicode, unicodeToHexCharMaybe, unicodeToHexCharUnsafe, + {- ** @Digit@ ↔ @Word8@ -}+ {- $digitWord8Conversions -}+ digitToWord8, word8ToDigitMaybe, word8ToDigitUnsafe,++ {- ** @Digit@ ↔ @ASCII.Char@ -}+ {- $digitCharConversions -}+ digitToChar, charToDigitMaybe, charToDigitUnsafe,++ {- ** @Digit@ ↔ @UnicodeChar@ -}+ {- $digitUnicodeConversions -}+ digitToUnicode, unicodeToDigitMaybe, unicodeToDigitUnsafe,++ {- ** @HexChar@ ↔ @Word8@ -}+ {- $hexCharWord8Conversions -}+ hexCharToWord8, word8ToHexCharMaybe, word8ToHexCharUnsafe,++ {- ** @HexChar@ ↔ @ASCII.Char@ -}+ {- $hexCharCharConversions -}+ hexCharToChar, charToHexCharMaybe, charToHexCharUnsafe,++ {- ** @HexChar@ ↔ @UnicodeChar@ -}+ {- $hexCharUnicodeConversions -}+ hexCharToUnicode, unicodeToHexCharMaybe, unicodeToHexCharUnsafe,+ {- * Monomorphic string conversions -}- {- ** @ASCII.Char@ ↔ @String@ -} {- $unicodeStringConversions -}- charListToUnicodeString, unicodeStringToCharListMaybe, unicodeStringToCharListUnsafe,- {- ** @ASCII.Char@ ↔ @Text@ -} {- $textConversions -}- charListToText, textToCharListMaybe, textToCharListUnsafe,- {- ** @ASCII.Char@ ↔ @ByteString@ -} {- $byteStringConversions -}- charListToByteString, byteStringToCharListMaybe, byteStringToCharListUnsafe,- {- ** @ASCII ByteString@ -> @Text@ -}- asciiByteStringToText, asciiByteStringToTextLazy, - {- * Monomorphic conversions between ASCII supersets -} {- $monoSupersetConversions -}- {- ** @ByteString@ ↔ @String@ -}- byteStringToUnicodeStringMaybe, unicodeStringToByteStringMaybe,- {- ** @[Word8]@ ↔ @String@ -}- byteListToUnicodeStringMaybe, unicodeStringToByteListMaybe,+ {- ** @ASCII.Char@ ↔ @String@ -}+ {- $unicodeStringConversions -}+ charListToUnicodeString, unicodeStringToCharListMaybe,+ unicodeStringToCharListUnsafe, + {- ** @ASCII.Char@ ↔ @Text@ -}+ {- $textConversions -}+ charListToText, textToCharListMaybe, textToCharListUnsafe,++ {- ** @ASCII.Char@ ↔ @ByteString@ -}+ {- $byteStringConversions -}+ charListToByteString, byteStringToCharListMaybe,+ byteStringToCharListUnsafe,++ {- ** @ASCII ByteString@ -> @Text@ -}+ asciiByteStringToText, asciiByteStringToTextLazy,++ {- * Monomorphic conversions between ASCII supersets -}++ {- $monoSupersetConversions -}++ {- ** @ByteString@ ↔ @String@ -}+ byteStringToUnicodeStringMaybe, unicodeStringToByteStringMaybe,++ {- ** @[Word8]@ ↔ @String@ -}+ byteListToUnicodeStringMaybe, unicodeStringToByteListMaybe,+ {- * Monomorphic numeric string conversions -}- {- ** @Natural@ ↔ @[Digit]@ -}- showNaturalDigits, readNaturalDigits,- {- ** @Natural@ ↔ @[HexChar]@ -}- showNaturalHexChars, readNaturalHexChars, - {- * Refinement types -} {- $refinement -} ASCII,- ASCII'case, ASCII'upper, ASCII'lower, KnownCase (..),+ {- ** @Natural@ ↔ @[Digit]@ -}+ showNaturalDigits, readNaturalDigits, + {- ** @Natural@ ↔ @[HexChar]@ -}+ showNaturalHexChars, readNaturalHexChars,++ {- * Refinement types -}+ {- $refinement -} ASCII,+ ASCII'case, ASCII'upper, ASCII'lower, KnownCase (..),+ {- * Polymorphic conversions -}- {- ** Narrowing -} toAsciiCharMaybe, toDigitMaybe, toHexCharMaybe,- {- ** Validate -} validateChar, validateString,- {- ** Widening -} {- $toText -} toStrictText, toLazyText, toUnicodeCharList,- {- $lift -} lift,- {- ** Convert -} {- $supersetConversions -}- convertCharMaybe, convertCharOrFail, convertStringMaybe, convertStringOrFail,- convertRefinedString,- {- ** Integral strings -} {- $numbers -}- showIntegralDecimal, showIntegralHexadecimal,- readIntegralDecimal, readIntegralHexadecimal,- {- ** Natural strings -}- showNaturalDecimal, showNaturalHexadecimal,- readNaturalDecimal, readNaturalHexadecimal,- {- ** Single-digit strings -}- digitString, hexCharString, + {- ** Narrowing -}+ toAsciiCharMaybe, toDigitMaybe, toHexCharMaybe,++ {- ** Validate -}+ validateChar, validateString,++ {- ** Widening -}+ {- $lift -} lift,+ {- $toText -} toStrictText, toLazyText, toUnicodeCharList,+ {- $fromChar -} fromChar, fromCharList,+ {- $fromDigit -} fromDigit, fromDigitList,+ {- $fromHexChar -} fromHexChar, fromHexCharList,+ {- $forgetCase -} forgetCase,++ {- ** Convert -}+ {- $supersetConversions -}+ convertCharMaybe, convertCharOrFail, convertStringMaybe,+ convertStringOrFail, convertRefinedString,++ {- ** Integral strings -}+ {- $numbers -}+ showIntegralDecimal, showIntegralHexadecimal,+ readIntegralDecimal, readIntegralHexadecimal,++ {- ** Natural strings -}+ showNaturalDecimal, showNaturalHexadecimal,+ readNaturalDecimal, readNaturalHexadecimal,++ {- ** Single-digit strings -}+ digitString, hexCharString,+ {- * Classes -}- {- ** Supersets of ASCII -} CharSuperset, StringSuperset,- StringSupersetConversion, ToText, Lift,- {- ** Equivalents to ASCII -} CharIso, StringIso,- {- ** Supersets of numeric characters -}- DigitSuperset, DigitStringSuperset, HexCharSuperset, HexStringSuperset, - {- * Quasi-quoters -} char, string, caseless, lower, upper,+ {- ** Supersets of ASCII -}+ CharSuperset, StringSuperset,+ StringSupersetConversion, ToText,++ {- ** Equivalents to ASCII -}+ CharIso, StringIso,++ {- ** Supersets of numeric characters -}+ DigitSuperset, DigitStringSuperset, HexCharSuperset, HexStringSuperset,++ {- * Quasi-quoters -}+ char, string, caseless, lower, upper, ) where import ASCII.Case (Case (..))-import ASCII.CaseRefinement (KnownCase (..), ASCII'case, ASCII'upper, ASCII'lower, refineCharToCase, refineStringToCase)+import ASCII.CaseRefinement (KnownCase (..), ASCII'case, ASCII'upper, ASCII'lower, refineCharToCase, refineStringToCase, forgetCase) import ASCII.Caseless (CaselessChar) import ASCII.Char (Char)-import ASCII.Decimal (Digit, DigitStringSuperset, DigitSuperset)+import ASCII.Decimal (Digit, DigitStringSuperset, DigitSuperset, fromDigit, fromDigitList) import ASCII.Group (Group (..))-import ASCII.Hexadecimal (HexChar, HexCharSuperset, HexStringSuperset)+import ASCII.Hexadecimal (HexChar, HexCharSuperset, HexStringSuperset, fromHexChar, fromHexCharList) import ASCII.Isomorphism (CharIso, StringIso)-import ASCII.Lift (Lift) import ASCII.QuasiQuoters (char, string, caseless, lower, upper)-import ASCII.Refinement (ASCII, validateChar, validateString)-import ASCII.Superset (CharSuperset, StringSuperset)+import ASCII.Refinement (ASCII, lift, validateChar, validateString)+import ASCII.Superset (CharSuperset, StringSuperset, fromChar, fromCharList) import ASCII.SupersetConversion (StringSupersetConversion) import ASCII.Superset.Text (ToText (..)) @@ -154,7 +231,6 @@ import qualified ASCII.Group import qualified ASCII.Hexadecimal import qualified ASCII.Isomorphism-import qualified ASCII.Lift import qualified ASCII.Predicates import qualified ASCII.Superset import qualified ASCII.SupersetConversion as SupersetConversion@@ -470,10 +546,10 @@ byteStringToCharListUnsafe = ASCII.Superset.toCharListUnsafe asciiByteStringToText :: ASCII BS.ByteString -> Text.Text-asciiByteStringToText = Text.decodeASCII . lift+asciiByteStringToText = Text.decodeUtf8 . ASCII.Refinement.lift asciiByteStringToTextLazy :: ASCII LBS.ByteString -> LText.Text-asciiByteStringToTextLazy = LText.decodeASCII . lift+asciiByteStringToTextLazy = LText.decodeUtf8 . ASCII.Refinement.lift {- $refinement @@ -481,31 +557,27 @@ {- $lift -See also: "ASCII.Lift" -}+See also: "ASCII.Refinement" -} {- $toText See also: "ASCII.Superset.ToText" -} -{-| Converts from ASCII to any larger type+{- $fromChar -For example, @(lift \@ASCII.Char \@Word8)@ is the same function as 'charToWord8'.+See also: "ASCII.Superset" -} -@-(lift CapitalLetterA :: Word8) == 65-@+{- $fromDigit -And @(lift \@[ASCII.Char] \@Text)@ is equivalent to 'charListToText'.+See also: "ASCII.Decimal" -} -@-(lift [CapitalLetterH,SmallLetterI,ExclamationMark] :: Text) == "Hi!"-@+{- $fromHexChar -Due to the highly polymorphic nature of the 'lift' function, often it must used-with an explicit type signature or type application to avoid any type ambiguity.--}-lift :: Lift ascii superset => ascii -> superset-lift = ASCII.Lift.lift+See also: "ASCII.Hexadecimal" -}++{- $forgetCase++See also: "ASCII.CaseRefinement" -} {- $supersetConversions
test/Main.hs view
@@ -118,10 +118,12 @@ charListToText [CapitalLetterH, SmallLetterI, ExclamationMark] `shouldBe` "Hi!" - describe "lift" $ do- it "converts Char to Word8" $ (lift CapitalLetterA :: Word8) `shouldBe` 65+ describe "fromChar" $ do+ it "converts Char to Word8" $ (fromChar CapitalLetterA :: Word8) `shouldBe` 65++ describe "fromCharList" $ do it "converts [Char] to Text" $- (lift [CapitalLetterH, SmallLetterI, ExclamationMark] :: Text)+ (fromCharList [CapitalLetterH, SmallLetterI, ExclamationMark] :: Text) `shouldBe` "Hi!" describe "byteListToUnicodeStringMaybe" $ do