packages feed

ascii-caseless 0.0.0.0 → 0.0.0.1

raw patch · 4 files changed

+250/−220 lines, 4 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

Files

ascii-caseless.cabal view
@@ -1,7 +1,7 @@ cabal-version: 3.0  name: ascii-caseless-version: 0.0.0.0+version: 0.0.0.1 synopsis: ASCII character without an upper/lower case distinction category: Data, Text @@ -16,7 +16,7 @@ maintainer: Chris Martin, Julie Moronuki  homepage: https://github.com/typeclasses/ascii-caseless-bug-Reports: https://github.com/typeclasses/ascii-caseless/issues+bug-reports: https://github.com/typeclasses/ascii-caseless/issues  extra-source-files: *.md @@ -25,31 +25,27 @@     location: git://github.com/typeclasses/ascii-caseless.git  common base-    default-language: Haskell2010+    default-language: GHC2021     ghc-options: -Wall      default-extensions:+        BlockArguments+        DeriveAnyClass+        DerivingStrategies         NoImplicitPrelude      build-depends:-        ascii-case ^>= 1.0.1+      , ascii-case ^>= 1.0.1       , ascii-char ^>= 1.0-      , base ^>= 4.14 || ^>= 4.15 || ^>= 4.16 || ^>= 4.17+      , base ^>= 4.16 || ^>= 4.17 || ^>= 4.18  library     import: base     ghc-options: -fno-warn-unused-imports     hs-source-dirs: library -    default-extensions:-        DeriveAnyClass-        DeriveDataTypeable-        DeriveGeneric-        DerivingStrategies-        StandaloneDeriving-     build-depends:-        hashable ^>= 1.3.5 || ^>= 1.4+      , hashable ^>= 1.3.5 || ^>= 1.4      exposed-modules:         ASCII.Caseless@@ -65,5 +61,5 @@         QuasiQuotes      build-depends:-        ascii-caseless-      , hspec ^>= 2.8.5 || ^>= 2.9 || ^>= 2.10+      , ascii-caseless+      , hspec ^>= 2.8.5 || ^>= 2.9 || ^>= 2.10 || ^>= 2.11
changelog.md view
@@ -1,1 +1,3 @@-0.0.0.0 - Initial release+0.0.0.1 - 2023-06-21 - Support GHC range 9.2 to 9.6++0.0.0.0 - 2022-12-27 - Initial release
library/ASCII/Caseless.hs view
@@ -1,74 +1,99 @@ module ASCII.Caseless-  (-    {- * The @Char@ type -} CaselessChar (..),-    {- * Enumeration -} allCharacters,-    {- * Conversion -} disregardCase, toCase, assumeCaseUnsafe,+  ( -- * The @CaselessChar@ type+    CaselessChar (..),++    -- * Enumeration+    allCharacters,++    -- * Conversion+    disregardCase,+    toCase,+    assumeCaseUnsafe,   )-  where+where  import ASCII.Case (Case (..))-+import ASCII.Char qualified as ASCII import Data.Bool (otherwise)+import Data.Bool qualified as Bool+import Data.Char qualified as C import Data.Data (Data) import Data.Eq (Eq, (/=), (==)) import Data.Hashable (Hashable) import Data.Int (Int) import Data.Maybe (Maybe (..))-import Data.Ord (Ord, (<), (>), (<=))+import Data.Ord (Ord, (<), (<=), (>)) import GHC.Generics (Generic)-import Prelude (Bounded, Enum, enumFromTo, fromEnum, maxBound, minBound, toEnum, (-), (+)) import Text.Show (Show)--import qualified Data.Char as C-import qualified Data.Bool as Bool-import qualified Prelude as Enum (Enum (..))-import qualified ASCII.Char as ASCII---- | A character in the ASCII character set, without an upper/lower case distinction for letters+import Prelude (Bounded, Enum, enumFromTo, fromEnum, maxBound, minBound, toEnum, (+), (-))+import Prelude qualified as Enum (Enum (..)) +-- | A character in the ASCII character set, without an+-- upper/lower case distinction for letters data CaselessChar =-      Null | StartOfHeading | StartOfText | EndOfText | EndOfTransmission | Enquiry | Acknowledgement | Bell | Backspace | HorizontalTab | LineFeed | VerticalTab | FormFeed | CarriageReturn | ShiftOut | ShiftIn | DataLinkEscape+      Null | StartOfHeading | StartOfText | EndOfText+    | EndOfTransmission | Enquiry | Acknowledgement | Bell+    | Backspace | HorizontalTab | LineFeed | VerticalTab+    | FormFeed | CarriageReturn | ShiftOut | ShiftIn | DataLinkEscape      | DeviceControl1 | DeviceControl2 | DeviceControl3 | DeviceControl4 -    | NegativeAcknowledgement | SynchronousIdle | EndOfTransmissionBlock | Cancel | EndOfMedium | Substitute | Escape+    | NegativeAcknowledgement | SynchronousIdle | EndOfTransmissionBlock+    | Cancel | EndOfMedium | Substitute | Escape      | FileSeparator | GroupSeparator | RecordSeparator | UnitSeparator -    | Space | ExclamationMark | QuotationMark | NumberSign | DollarSign | PercentSign | Ampersand | Apostrophe | LeftParenthesis | RightParenthesis | Asterisk | PlusSign | Comma | HyphenMinus | FullStop | Slash+    | Space | ExclamationMark | QuotationMark | NumberSign+    | DollarSign | PercentSign | Ampersand | Apostrophe+    | LeftParenthesis | RightParenthesis | Asterisk+    | PlusSign | Comma | HyphenMinus | FullStop | Slash -    | Digit0 | Digit1 | Digit2 | Digit3 | Digit4 | Digit5 | Digit6 | Digit7 | Digit8 | Digit9+    | Digit0 | Digit1 | Digit2 | Digit3 | Digit4+    | Digit5 | Digit6 | Digit7 | Digit8 | Digit9 -    | Colon | Semicolon | LessThanSign | EqualsSign | GreaterThanSign | QuestionMark | AtSign+    | Colon | Semicolon | LessThanSign | EqualsSign+    | GreaterThanSign | QuestionMark | AtSign -    | LetterA | LetterB | LetterC | LetterD | LetterE | LetterF | LetterG | LetterH | LetterI | LetterJ | LetterK | LetterL | LetterM | LetterN | LetterO | LetterP | LetterQ | LetterR | LetterS | LetterT | LetterU | LetterV | LetterW | LetterX | LetterY | LetterZ+    | LetterA | LetterB | LetterC | LetterD | LetterE | LetterF+    | LetterG | LetterH | LetterI | LetterJ | LetterK | LetterL+    | LetterM | LetterN | LetterO | LetterP | LetterQ | LetterR+    | LetterS | LetterT | LetterU | LetterV | LetterW | LetterX+    | LetterY | LetterZ -    | LeftSquareBracket | Backslash | RightSquareBracket | Caret | Underscore | GraveAccent+    | LeftSquareBracket | Backslash | RightSquareBracket+    | Caret | Underscore | GraveAccent -    | LeftCurlyBracket | VerticalLine | RightCurlyBracket | Tilde | Delete+    | LeftCurlyBracket | VerticalLine | RightCurlyBracket+    | Tilde | Delete  -- | ASCII characters can be compared for equality using '(==)'. deriving stock instance Eq CaselessChar --- | Caseless ASCII characters are ordered; for example, the letter /A/ is "less than" ('<') the letter /B/ because it appears earlier in the list. The ordering of caseless ASCII characters is roughly the same as the ordering of the corresponding Unicode 'C.Char's, with caseless letters appearing in the place of case-sensitive capital letters.+-- | Caseless ASCII characters are ordered; for example, the letter+-- /A/ is "less than" ('<') the letter /B/ because it appears earlier+-- in the list. The ordering of caseless ASCII characters is roughly+-- the same as the ordering of the corresponding Unicode 'C.Char's,+-- with caseless letters appearing in the place of case-sensitive+-- capital letters. deriving stock instance Ord CaselessChar --- | The 'Enum' instance allows us to use range syntax, for example @['LetterA' .. 'LetterZ']@ is a list all letters from /a/ to /z/.+-- | The 'Enum' instance allows us to use range syntax, for example+-- @['LetterA' .. 'LetterZ']@ is a list all letters from /a/ to /z/. deriving stock instance Enum CaselessChar --- | You can write @(['minBound' .. 'maxBound'] :: ['CaselessChar'])@ to get a list of all the caseless ASCII characters.+-- | You can write @(['minBound' .. 'maxBound'] :: ['CaselessChar'])@+-- to get a list of all the caseless ASCII characters. deriving stock instance Bounded CaselessChar --- | 'show' produces the name of a constructor. For example, the character @e@ is shown as “@LetterE@”. See "ASCII.Caseless" for the complete list of constructor names.+-- | 'show' produces the name of a constructor. For example,+-- the character @e@ is shown as “@LetterE@”.+-- See "ASCII.Caseless" for the complete list of constructor names. deriving stock instance Show CaselessChar --- | The 'Data' instance allows caseless ASCII characters to be used with generic programming in the “SYB” style. (See the <https://hackage.haskell.org/package/syb syb> package and the 2003 paper <https://www.microsoft.com/en-us/research/wp-content/uploads/2003/01/hmap.pdf Scrap Your Boilerplate> by Ralf Lämmel and Simon Peyton Jones.) deriving stock instance Data CaselessChar --- | The 'Generic' instance allows caseless ASCII characters to be used with generic programming in the “generic deriving” style. (See the <https://hackage.haskell.org/package/generic-data generic-data> package and the 2010 paper <http://dreixel.net/research/pdf/gdmh.pdf A generic deriving mechanism for Haskell> by José Pedro Magalhães, Atze Dijkstra, Johan Jeuring, and Andres Löh.) deriving stock instance Generic CaselessChar --- | The 'Hashable' instance lets us collect caseless ASCII characters in hash-based sets, and it lets us use caseless ASCII characters as keys in hash-based maps. (See the @unordered-containers@ package.) deriving anyclass instance Hashable CaselessChar  -- | There are 102 characters in total.@@ -77,25 +102,26 @@  disregardCase :: ASCII.Char -> CaselessChar disregardCase x-    | x <= ASCII.GraveAccent  = Enum.toEnum (Enum.fromEnum x)-    | x <= ASCII.SmallLetterZ = Enum.toEnum (Enum.fromEnum x - 32)-    | Bool.otherwise          = Enum.toEnum (Enum.fromEnum x - 26)+  | x <= ASCII.GraveAccent = Enum.toEnum (Enum.fromEnum x)+  | x <= ASCII.SmallLetterZ = Enum.toEnum (Enum.fromEnum x - 32)+  | Bool.otherwise = Enum.toEnum (Enum.fromEnum x - 26) --- | Like 'disregardCase', but defined only where the character is either a letter in the given case or a non-letter+-- | Like 'disregardCase', but defined only where the character+-- is either a letter in the given case or a non-letter -- -- For upper case, this is slightly more efficient than 'disregardCase'. assumeCaseUnsafe :: Case -> ASCII.Char -> CaselessChar assumeCaseUnsafe LowerCase x = disregardCase x assumeCaseUnsafe UpperCase x-    | x <= ASCII.GraveAccent  = Enum.toEnum (Enum.fromEnum x)-    | Bool.otherwise          = Enum.toEnum (Enum.fromEnum x - 26)+  | x <= ASCII.GraveAccent = Enum.toEnum (Enum.fromEnum x)+  | Bool.otherwise = Enum.toEnum (Enum.fromEnum x - 26)  toCase :: Case -> CaselessChar -> ASCII.Char toCase UpperCase x-    | x <= GraveAccent = Enum.toEnum (Enum.fromEnum x)-    | Bool.otherwise   = Enum.toEnum (Enum.fromEnum x + 26)+  | x <= GraveAccent = Enum.toEnum (Enum.fromEnum x)+  | Bool.otherwise = Enum.toEnum (Enum.fromEnum x + 26) toCase LowerCase x-    | x <= AtSign      = Enum.toEnum (Enum.fromEnum x)-    | x <= LetterZ     = Enum.toEnum (Enum.fromEnum x + 32)-    | x <= GraveAccent = Enum.toEnum (Enum.fromEnum x)-    | Bool.otherwise   = Enum.toEnum (Enum.fromEnum x + 26)+  | x <= AtSign = Enum.toEnum (Enum.fromEnum x)+  | x <= LetterZ = Enum.toEnum (Enum.fromEnum x + 32)+  | x <= GraveAccent = Enum.toEnum (Enum.fromEnum x)+  | Bool.otherwise = Enum.toEnum (Enum.fromEnum x + 26)
test/Main.hs view
@@ -1,180 +1,186 @@ module Main (main) where -import ASCII.Caseless import ASCII.Case (Case (..))-+import ASCII.Caseless+  ( CaselessChar,+    allCharacters,+    assumeCaseUnsafe,+    disregardCase,+    toCase,+  )+import ASCII.Caseless qualified as Caseless+import ASCII.Char qualified as CaseSensitive import Data.Eq (Eq ((==))) import Data.Foldable (for_) import Data.Function (($)) import Data.List (length) import Data.String (String) import System.IO (IO)-import Test.Hspec (hspec, describe, it, shouldBe)--import qualified ASCII.Char as CaseSensitive-import qualified ASCII.Caseless as Caseless+import Test.Hspec (describe, hspec, it, shouldBe)  main :: IO ()-main = hspec $ do--    describe "caseless characters" $ do-        it "how many" $ length allCharacters == 102+main = hspec do+  describe "caseless characters" do+    it "how many" $ length allCharacters == 102 -    describe "disregardCase" $ do-        for_ [nonLetters, capitalLetters, smallLetters] $ \(name, pairs) ->-            it name $ for_ pairs $ \(a, b) -> disregardCase b `shouldBe` a+  describe "disregardCase" do+    for_ [nonLetters, capitalLetters, smallLetters] \(name, pairs) ->+      it name $ for_ pairs $ \(a, b) -> disregardCase b `shouldBe` a -    describe "testAssumeCaseUnsafe" $ do-        describe "UpperCase" $ do-            for_ [nonLetters, capitalLetters] $ \(name, pairs) ->-                it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe UpperCase b `shouldBe` a-        describe "LowerCase" $ do-            for_ [nonLetters, smallLetters] $ \(name, pairs) ->-                it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe LowerCase b `shouldBe` a+  describe "testAssumeCaseUnsafe" do+    describe "UpperCase" do+      for_ [nonLetters, capitalLetters] \(name, pairs) ->+        it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe UpperCase b `shouldBe` a+    describe "LowerCase" do+      for_ [nonLetters, smallLetters] \(name, pairs) ->+        it name $ for_ pairs $ \(a, b) -> assumeCaseUnsafe LowerCase b `shouldBe` a -    describe "toCase" $ do-        describe "UpperCase" $ do-            for_ [nonLetters, capitalLetters] $ \(name, pairs) ->-                it name $ for_ pairs $ \(a, b) -> toCase UpperCase a `shouldBe` b-        describe "LowerCase" $ do-            for_ [nonLetters, smallLetters] $ \(name, pairs) ->-                it name $ for_ pairs $ \(a, b) -> toCase LowerCase a `shouldBe` b+  describe "toCase" do+    describe "UpperCase" do+      for_ [nonLetters, capitalLetters] \(name, pairs) ->+        it name $ for_ pairs \(a, b) -> toCase UpperCase a `shouldBe` b+    describe "LowerCase" do+      for_ [nonLetters, smallLetters] \(name, pairs) ->+        it name $ for_ pairs \(a, b) -> toCase LowerCase a `shouldBe` b  nonLetters, smallLetters, capitalLetters :: (String, [(CaselessChar, CaseSensitive.Char)])--smallLetters = (,) "small letters"-    [ (,) Caseless.LetterA CaseSensitive.SmallLetterA-    , (,) Caseless.LetterB CaseSensitive.SmallLetterB-    , (,) Caseless.LetterC CaseSensitive.SmallLetterC-    , (,) Caseless.LetterD CaseSensitive.SmallLetterD-    , (,) Caseless.LetterE CaseSensitive.SmallLetterE-    , (,) Caseless.LetterF CaseSensitive.SmallLetterF-    , (,) Caseless.LetterG CaseSensitive.SmallLetterG-    , (,) Caseless.LetterH CaseSensitive.SmallLetterH-    , (,) Caseless.LetterI CaseSensitive.SmallLetterI-    , (,) Caseless.LetterJ CaseSensitive.SmallLetterJ-    , (,) Caseless.LetterK CaseSensitive.SmallLetterK-    , (,) Caseless.LetterL CaseSensitive.SmallLetterL-    , (,) Caseless.LetterM CaseSensitive.SmallLetterM-    , (,) Caseless.LetterN CaseSensitive.SmallLetterN-    , (,) Caseless.LetterO CaseSensitive.SmallLetterO-    , (,) Caseless.LetterP CaseSensitive.SmallLetterP-    , (,) Caseless.LetterQ CaseSensitive.SmallLetterQ-    , (,) Caseless.LetterR CaseSensitive.SmallLetterR-    , (,) Caseless.LetterS CaseSensitive.SmallLetterS-    , (,) Caseless.LetterT CaseSensitive.SmallLetterT-    , (,) Caseless.LetterU CaseSensitive.SmallLetterU-    , (,) Caseless.LetterV CaseSensitive.SmallLetterV-    , (,) Caseless.LetterW CaseSensitive.SmallLetterW-    , (,) Caseless.LetterX CaseSensitive.SmallLetterX-    , (,) Caseless.LetterY CaseSensitive.SmallLetterY-    , (,) Caseless.LetterZ CaseSensitive.SmallLetterZ+smallLetters =+  (,)+    "small letters"+    [ (,) Caseless.LetterA CaseSensitive.SmallLetterA,+      (,) Caseless.LetterB CaseSensitive.SmallLetterB,+      (,) Caseless.LetterC CaseSensitive.SmallLetterC,+      (,) Caseless.LetterD CaseSensitive.SmallLetterD,+      (,) Caseless.LetterE CaseSensitive.SmallLetterE,+      (,) Caseless.LetterF CaseSensitive.SmallLetterF,+      (,) Caseless.LetterG CaseSensitive.SmallLetterG,+      (,) Caseless.LetterH CaseSensitive.SmallLetterH,+      (,) Caseless.LetterI CaseSensitive.SmallLetterI,+      (,) Caseless.LetterJ CaseSensitive.SmallLetterJ,+      (,) Caseless.LetterK CaseSensitive.SmallLetterK,+      (,) Caseless.LetterL CaseSensitive.SmallLetterL,+      (,) Caseless.LetterM CaseSensitive.SmallLetterM,+      (,) Caseless.LetterN CaseSensitive.SmallLetterN,+      (,) Caseless.LetterO CaseSensitive.SmallLetterO,+      (,) Caseless.LetterP CaseSensitive.SmallLetterP,+      (,) Caseless.LetterQ CaseSensitive.SmallLetterQ,+      (,) Caseless.LetterR CaseSensitive.SmallLetterR,+      (,) Caseless.LetterS CaseSensitive.SmallLetterS,+      (,) Caseless.LetterT CaseSensitive.SmallLetterT,+      (,) Caseless.LetterU CaseSensitive.SmallLetterU,+      (,) Caseless.LetterV CaseSensitive.SmallLetterV,+      (,) Caseless.LetterW CaseSensitive.SmallLetterW,+      (,) Caseless.LetterX CaseSensitive.SmallLetterX,+      (,) Caseless.LetterY CaseSensitive.SmallLetterY,+      (,) Caseless.LetterZ CaseSensitive.SmallLetterZ     ]--capitalLetters = (,) "capital letters"-    [ (,) Caseless.LetterA CaseSensitive.CapitalLetterA-    , (,) Caseless.LetterB CaseSensitive.CapitalLetterB-    , (,) Caseless.LetterC CaseSensitive.CapitalLetterC-    , (,) Caseless.LetterD CaseSensitive.CapitalLetterD-    , (,) Caseless.LetterE CaseSensitive.CapitalLetterE-    , (,) Caseless.LetterF CaseSensitive.CapitalLetterF-    , (,) Caseless.LetterG CaseSensitive.CapitalLetterG-    , (,) Caseless.LetterH CaseSensitive.CapitalLetterH-    , (,) Caseless.LetterI CaseSensitive.CapitalLetterI-    , (,) Caseless.LetterJ CaseSensitive.CapitalLetterJ-    , (,) Caseless.LetterK CaseSensitive.CapitalLetterK-    , (,) Caseless.LetterL CaseSensitive.CapitalLetterL-    , (,) Caseless.LetterM CaseSensitive.CapitalLetterM-    , (,) Caseless.LetterN CaseSensitive.CapitalLetterN-    , (,) Caseless.LetterO CaseSensitive.CapitalLetterO-    , (,) Caseless.LetterP CaseSensitive.CapitalLetterP-    , (,) Caseless.LetterQ CaseSensitive.CapitalLetterQ-    , (,) Caseless.LetterR CaseSensitive.CapitalLetterR-    , (,) Caseless.LetterS CaseSensitive.CapitalLetterS-    , (,) Caseless.LetterT CaseSensitive.CapitalLetterT-    , (,) Caseless.LetterU CaseSensitive.CapitalLetterU-    , (,) Caseless.LetterV CaseSensitive.CapitalLetterV-    , (,) Caseless.LetterW CaseSensitive.CapitalLetterW-    , (,) Caseless.LetterX CaseSensitive.CapitalLetterX-    , (,) Caseless.LetterY CaseSensitive.CapitalLetterY-    , (,) Caseless.LetterZ CaseSensitive.CapitalLetterZ+capitalLetters =+  (,)+    "capital letters"+    [ (,) Caseless.LetterA CaseSensitive.CapitalLetterA,+      (,) Caseless.LetterB CaseSensitive.CapitalLetterB,+      (,) Caseless.LetterC CaseSensitive.CapitalLetterC,+      (,) Caseless.LetterD CaseSensitive.CapitalLetterD,+      (,) Caseless.LetterE CaseSensitive.CapitalLetterE,+      (,) Caseless.LetterF CaseSensitive.CapitalLetterF,+      (,) Caseless.LetterG CaseSensitive.CapitalLetterG,+      (,) Caseless.LetterH CaseSensitive.CapitalLetterH,+      (,) Caseless.LetterI CaseSensitive.CapitalLetterI,+      (,) Caseless.LetterJ CaseSensitive.CapitalLetterJ,+      (,) Caseless.LetterK CaseSensitive.CapitalLetterK,+      (,) Caseless.LetterL CaseSensitive.CapitalLetterL,+      (,) Caseless.LetterM CaseSensitive.CapitalLetterM,+      (,) Caseless.LetterN CaseSensitive.CapitalLetterN,+      (,) Caseless.LetterO CaseSensitive.CapitalLetterO,+      (,) Caseless.LetterP CaseSensitive.CapitalLetterP,+      (,) Caseless.LetterQ CaseSensitive.CapitalLetterQ,+      (,) Caseless.LetterR CaseSensitive.CapitalLetterR,+      (,) Caseless.LetterS CaseSensitive.CapitalLetterS,+      (,) Caseless.LetterT CaseSensitive.CapitalLetterT,+      (,) Caseless.LetterU CaseSensitive.CapitalLetterU,+      (,) Caseless.LetterV CaseSensitive.CapitalLetterV,+      (,) Caseless.LetterW CaseSensitive.CapitalLetterW,+      (,) Caseless.LetterX CaseSensitive.CapitalLetterX,+      (,) Caseless.LetterY CaseSensitive.CapitalLetterY,+      (,) Caseless.LetterZ CaseSensitive.CapitalLetterZ     ]--nonLetters = (,) "non-letters"-  [ (,) Caseless.Null                    CaseSensitive.Null-  , (,) Caseless.StartOfHeading          CaseSensitive.StartOfHeading-  , (,) Caseless.StartOfText             CaseSensitive.StartOfText-  , (,) Caseless.EndOfText               CaseSensitive.EndOfText-  , (,) Caseless.EndOfTransmission       CaseSensitive.EndOfTransmission-  , (,) Caseless.Enquiry                 CaseSensitive.Enquiry-  , (,) Caseless.Acknowledgement         CaseSensitive.Acknowledgement-  , (,) Caseless.Bell                    CaseSensitive.Bell-  , (,) Caseless.Backspace               CaseSensitive.Backspace-  , (,) Caseless.HorizontalTab           CaseSensitive.HorizontalTab-  , (,) Caseless.LineFeed                CaseSensitive.LineFeed-  , (,) Caseless.VerticalTab             CaseSensitive.VerticalTab-  , (,) Caseless.FormFeed                CaseSensitive.FormFeed-  , (,) Caseless.CarriageReturn          CaseSensitive.CarriageReturn-  , (,) Caseless.ShiftOut                CaseSensitive.ShiftOut-  , (,) Caseless.ShiftIn                 CaseSensitive.ShiftIn-  , (,) Caseless.DataLinkEscape          CaseSensitive.DataLinkEscape-  , (,) Caseless.DeviceControl1          CaseSensitive.DeviceControl1-  , (,) Caseless.DeviceControl2          CaseSensitive.DeviceControl2-  , (,) Caseless.DeviceControl3          CaseSensitive.DeviceControl3-  , (,) Caseless.DeviceControl4          CaseSensitive.DeviceControl4-  , (,) Caseless.NegativeAcknowledgement CaseSensitive.NegativeAcknowledgement-  , (,) Caseless.SynchronousIdle         CaseSensitive.SynchronousIdle-  , (,) Caseless.EndOfTransmissionBlock  CaseSensitive.EndOfTransmissionBlock-  , (,) Caseless.Cancel                  CaseSensitive.Cancel-  , (,) Caseless.EndOfMedium             CaseSensitive.EndOfMedium-  , (,) Caseless.Substitute              CaseSensitive.Substitute-  , (,) Caseless.Escape                  CaseSensitive.Escape-  , (,) Caseless.FileSeparator           CaseSensitive.FileSeparator-  , (,) Caseless.GroupSeparator          CaseSensitive.GroupSeparator-  , (,) Caseless.RecordSeparator         CaseSensitive.RecordSeparator-  , (,) Caseless.UnitSeparator           CaseSensitive.UnitSeparator-  , (,) Caseless.Space                   CaseSensitive.Space-  , (,) Caseless.ExclamationMark         CaseSensitive.ExclamationMark-  , (,) Caseless.QuotationMark           CaseSensitive.QuotationMark-  , (,) Caseless.NumberSign              CaseSensitive.NumberSign-  , (,) Caseless.DollarSign              CaseSensitive.DollarSign-  , (,) Caseless.PercentSign             CaseSensitive.PercentSign-  , (,) Caseless.Ampersand               CaseSensitive.Ampersand-  , (,) Caseless.Apostrophe              CaseSensitive.Apostrophe-  , (,) Caseless.LeftParenthesis         CaseSensitive.LeftParenthesis-  , (,) Caseless.RightParenthesis        CaseSensitive.RightParenthesis-  , (,) Caseless.Asterisk                CaseSensitive.Asterisk-  , (,) Caseless.PlusSign                CaseSensitive.PlusSign-  , (,) Caseless.Comma                   CaseSensitive.Comma-  , (,) Caseless.HyphenMinus             CaseSensitive.HyphenMinus-  , (,) Caseless.FullStop                CaseSensitive.FullStop-  , (,) Caseless.Slash                   CaseSensitive.Slash-  , (,) Caseless.Digit0                  CaseSensitive.Digit0-  , (,) Caseless.Digit1                  CaseSensitive.Digit1-  , (,) Caseless.Digit2                  CaseSensitive.Digit2-  , (,) Caseless.Digit3                  CaseSensitive.Digit3-  , (,) Caseless.Digit4                  CaseSensitive.Digit4-  , (,) Caseless.Digit5                  CaseSensitive.Digit5-  , (,) Caseless.Digit6                  CaseSensitive.Digit6-  , (,) Caseless.Digit7                  CaseSensitive.Digit7-  , (,) Caseless.Digit8                  CaseSensitive.Digit8-  , (,) Caseless.Digit9                  CaseSensitive.Digit9-  , (,) Caseless.Colon                   CaseSensitive.Colon-  , (,) Caseless.Semicolon               CaseSensitive.Semicolon-  , (,) Caseless.LessThanSign            CaseSensitive.LessThanSign-  , (,) Caseless.EqualsSign              CaseSensitive.EqualsSign-  , (,) Caseless.GreaterThanSign         CaseSensitive.GreaterThanSign-  , (,) Caseless.QuestionMark            CaseSensitive.QuestionMark-  , (,) Caseless.AtSign                  CaseSensitive.AtSign-  , (,) Caseless.LeftSquareBracket       CaseSensitive.LeftSquareBracket-  , (,) Caseless.Backslash               CaseSensitive.Backslash-  , (,) Caseless.RightSquareBracket      CaseSensitive.RightSquareBracket-  , (,) Caseless.Caret                   CaseSensitive.Caret-  , (,) Caseless.Underscore              CaseSensitive.Underscore-  , (,) Caseless.GraveAccent             CaseSensitive.GraveAccent-  , (,) Caseless.LeftCurlyBracket        CaseSensitive.LeftCurlyBracket-  , (,) Caseless.VerticalLine            CaseSensitive.VerticalLine-  , (,) Caseless.RightCurlyBracket       CaseSensitive.RightCurlyBracket-  , (,) Caseless.Tilde                   CaseSensitive.Tilde-  , (,) Caseless.Delete                  CaseSensitive.Delete-  ]+nonLetters =+  (,)+    "non-letters"+    [ (,) Caseless.Null CaseSensitive.Null,+      (,) Caseless.StartOfHeading CaseSensitive.StartOfHeading,+      (,) Caseless.StartOfText CaseSensitive.StartOfText,+      (,) Caseless.EndOfText CaseSensitive.EndOfText,+      (,) Caseless.EndOfTransmission CaseSensitive.EndOfTransmission,+      (,) Caseless.Enquiry CaseSensitive.Enquiry,+      (,) Caseless.Acknowledgement CaseSensitive.Acknowledgement,+      (,) Caseless.Bell CaseSensitive.Bell,+      (,) Caseless.Backspace CaseSensitive.Backspace,+      (,) Caseless.HorizontalTab CaseSensitive.HorizontalTab,+      (,) Caseless.LineFeed CaseSensitive.LineFeed,+      (,) Caseless.VerticalTab CaseSensitive.VerticalTab,+      (,) Caseless.FormFeed CaseSensitive.FormFeed,+      (,) Caseless.CarriageReturn CaseSensitive.CarriageReturn,+      (,) Caseless.ShiftOut CaseSensitive.ShiftOut,+      (,) Caseless.ShiftIn CaseSensitive.ShiftIn,+      (,) Caseless.DataLinkEscape CaseSensitive.DataLinkEscape,+      (,) Caseless.DeviceControl1 CaseSensitive.DeviceControl1,+      (,) Caseless.DeviceControl2 CaseSensitive.DeviceControl2,+      (,) Caseless.DeviceControl3 CaseSensitive.DeviceControl3,+      (,) Caseless.DeviceControl4 CaseSensitive.DeviceControl4,+      (,) Caseless.NegativeAcknowledgement CaseSensitive.NegativeAcknowledgement,+      (,) Caseless.SynchronousIdle CaseSensitive.SynchronousIdle,+      (,) Caseless.EndOfTransmissionBlock CaseSensitive.EndOfTransmissionBlock,+      (,) Caseless.Cancel CaseSensitive.Cancel,+      (,) Caseless.EndOfMedium CaseSensitive.EndOfMedium,+      (,) Caseless.Substitute CaseSensitive.Substitute,+      (,) Caseless.Escape CaseSensitive.Escape,+      (,) Caseless.FileSeparator CaseSensitive.FileSeparator,+      (,) Caseless.GroupSeparator CaseSensitive.GroupSeparator,+      (,) Caseless.RecordSeparator CaseSensitive.RecordSeparator,+      (,) Caseless.UnitSeparator CaseSensitive.UnitSeparator,+      (,) Caseless.Space CaseSensitive.Space,+      (,) Caseless.ExclamationMark CaseSensitive.ExclamationMark,+      (,) Caseless.QuotationMark CaseSensitive.QuotationMark,+      (,) Caseless.NumberSign CaseSensitive.NumberSign,+      (,) Caseless.DollarSign CaseSensitive.DollarSign,+      (,) Caseless.PercentSign CaseSensitive.PercentSign,+      (,) Caseless.Ampersand CaseSensitive.Ampersand,+      (,) Caseless.Apostrophe CaseSensitive.Apostrophe,+      (,) Caseless.LeftParenthesis CaseSensitive.LeftParenthesis,+      (,) Caseless.RightParenthesis CaseSensitive.RightParenthesis,+      (,) Caseless.Asterisk CaseSensitive.Asterisk,+      (,) Caseless.PlusSign CaseSensitive.PlusSign,+      (,) Caseless.Comma CaseSensitive.Comma,+      (,) Caseless.HyphenMinus CaseSensitive.HyphenMinus,+      (,) Caseless.FullStop CaseSensitive.FullStop,+      (,) Caseless.Slash CaseSensitive.Slash,+      (,) Caseless.Digit0 CaseSensitive.Digit0,+      (,) Caseless.Digit1 CaseSensitive.Digit1,+      (,) Caseless.Digit2 CaseSensitive.Digit2,+      (,) Caseless.Digit3 CaseSensitive.Digit3,+      (,) Caseless.Digit4 CaseSensitive.Digit4,+      (,) Caseless.Digit5 CaseSensitive.Digit5,+      (,) Caseless.Digit6 CaseSensitive.Digit6,+      (,) Caseless.Digit7 CaseSensitive.Digit7,+      (,) Caseless.Digit8 CaseSensitive.Digit8,+      (,) Caseless.Digit9 CaseSensitive.Digit9,+      (,) Caseless.Colon CaseSensitive.Colon,+      (,) Caseless.Semicolon CaseSensitive.Semicolon,+      (,) Caseless.LessThanSign CaseSensitive.LessThanSign,+      (,) Caseless.EqualsSign CaseSensitive.EqualsSign,+      (,) Caseless.GreaterThanSign CaseSensitive.GreaterThanSign,+      (,) Caseless.QuestionMark CaseSensitive.QuestionMark,+      (,) Caseless.AtSign CaseSensitive.AtSign,+      (,) Caseless.LeftSquareBracket CaseSensitive.LeftSquareBracket,+      (,) Caseless.Backslash CaseSensitive.Backslash,+      (,) Caseless.RightSquareBracket CaseSensitive.RightSquareBracket,+      (,) Caseless.Caret CaseSensitive.Caret,+      (,) Caseless.Underscore CaseSensitive.Underscore,+      (,) Caseless.GraveAccent CaseSensitive.GraveAccent,+      (,) Caseless.LeftCurlyBracket CaseSensitive.LeftCurlyBracket,+      (,) Caseless.VerticalLine CaseSensitive.VerticalLine,+      (,) Caseless.RightCurlyBracket CaseSensitive.RightCurlyBracket,+      (,) Caseless.Tilde CaseSensitive.Tilde,+      (,) Caseless.Delete CaseSensitive.Delete+    ]