diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2023, Oleg Grenrus
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Oleg Grenrus nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/character-ps.cabal b/character-ps.cabal
new file mode 100644
--- /dev/null
+++ b/character-ps.cabal
@@ -0,0 +1,59 @@
+cabal-version: 2.2
+name:          character-ps
+version:       0.1
+synopsis:      Pattern synonyms for ASCII characters for Word8, Word16 etc
+description:
+  Pattern synonyms for ASCII characters, e.g.
+  .
+  @
+  pattern SPACE :: Word8
+  pattern SPACE = 0x20
+  @
+
+homepage:      https://github.com/phadej/character-ps
+bug-reports:   https://github.com/phadej/character-ps/issues
+license:       BSD-3-Clause
+license-file:  LICENSE
+author:        Oleg Grenrus <oleg.grenrus@iki.fi>
+maintainer:    Oleg Grenrus <oleg.grenrus@iki.fi>
+category:      Data
+build-type:    Simple
+tested-with:
+  GHC ==8.0.2
+   || ==8.2.2
+   || ==8.4.4
+   || ==8.6.5
+   || ==8.8.4
+   || ==8.10.7
+   || ==9.0.2
+   || ==9.2.8
+   || ==9.4.7
+   || ==9.6.3
+   || ==9.8.1
+
+source-repository head
+  type:     git
+  location: https://github.com/phadej/character-ps.git
+
+common language
+  default-language:   Haskell2010
+  default-extensions: PatternSynonyms
+
+library
+  import:          language
+  hs-source-dirs:  src
+  exposed-modules:
+    Data.Char.Patterns
+    Data.Word16.Patterns
+    Data.Word8.Patterns
+
+  build-depends:   base >=4.9 && <5
+
+test-suite character-ps-tests
+  import:         language
+  hs-source-dirs: tests
+  main-is:        character-ps-tests.hs
+  type:           exitcode-stdio-1.0
+  build-depends:
+    , base
+    , character-ps
diff --git a/src/Data/Char/Patterns.hs b/src/Data/Char/Patterns.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Char/Patterns.hs
@@ -0,0 +1,560 @@
+-- | This module provides pattern synonyms for 'Char' in [Basic Latin block](https://compart.com/en/unicode/block/U+0000) (range @'\x00'-'\x7f'@).
+--
+-- The pattern names are inspired by Unicode (letter and digits) and PostScript names (symbols),
+-- e.g. @/@ is 'SLASH', not @SOLIDUS@.
+--
+-- This module is designed to be imported qualified
+--
+-- @
+-- import "Data.Char.Patterns" as C
+--
+-- hello = [C.'LOWER_H', C.'LOWER_E', C.'LOWER_L', C.'LOWER_L', C.'LOWER_O']
+-- @
+--
+-- but can also be used unqualified as well.
+--
+module Data.Char.Patterns where
+
+-------------------------------------------------------------------------------
+-- * Control characters, x00-x1f
+-------------------------------------------------------------------------------
+
+-- | Null character (NUL)
+pattern NUL :: Char
+pattern NUL = '\x00'
+
+-- | Start of Heading (SOH)
+pattern SOH :: Char
+pattern SOH = '\x01'
+
+-- | Start of Text (STX)
+pattern STX :: Char
+pattern STX = '\x02'
+
+-- | End of Text (ETX)
+pattern ETX :: Char
+pattern ETX = '\x03'
+
+-- | End of Transmission (EOT)
+pattern EOT :: Char
+pattern EOT = '\x04'
+
+-- | Enquiry (ENQ)
+pattern ENQ :: Char
+pattern ENQ = '\x05'
+
+-- | Acknowledge (ACK)
+pattern ACK :: Char
+pattern ACK = '\x06'
+
+-- | Alert (BEL)
+pattern BEL :: Char
+pattern BEL = '\x07'
+
+-- | Backspace (BS)
+pattern BS :: Char
+pattern BS = '\x08'
+
+-- | Character tabulation (TAB)
+pattern TAB :: Char
+pattern TAB = '\x09'
+
+-- | End of line, line feed (LF)
+pattern LF :: Char
+pattern LF = '\x0a'
+
+-- | Line tabulation, vertical tab (VT)
+pattern VT :: Char
+pattern VT = '\x0b'
+
+-- | Form feed (FF)
+pattern FF :: Char
+pattern FF = '\x0c'
+
+-- | Carriage Return (CR)
+pattern CR :: Char
+pattern CR = '\x0d'
+
+-- | Locking-Shift One, Shift Out (SO)
+pattern SO :: Char
+pattern SO = '\x0e'
+
+-- | Locking-Shift Zero, Shift In (SI)
+pattern SI :: Char
+pattern SI = '\x0f'
+
+-- | Data Link Escape (DLE)
+pattern DLE :: Char
+pattern DLE = '\x10'
+
+-- | Device Control One, XON (DC1)
+pattern DC1 :: Char
+pattern DC1 = '\x11'
+
+-- | Device Control Two (DC2)
+pattern DC2 :: Char
+pattern DC2 = '\x12'
+
+-- | Device Control Three, XOFF (DC3)
+pattern DC3 :: Char
+pattern DC3 = '\x13'
+
+-- | Device Control Four (DC4)
+pattern DC4 :: Char
+pattern DC4 = '\x14'
+
+-- | Negative Acknowledge (NAK)
+pattern NAK :: Char
+pattern NAK = '\x15'
+
+-- | Syncronous Idle (SYN)
+pattern SYN :: Char
+pattern SYN = '\x16'
+
+-- | End of Transmission Block (ETB)
+pattern ETB :: Char
+pattern ETB = '\x17'
+
+-- | Cancel (CAN)
+pattern CAN :: Char
+pattern CAN = '\x18'
+
+-- | End of Medium (EOM)
+pattern EOM :: Char
+pattern EOM = '\x19'
+
+-- | Substitute (SUB)
+pattern SUB :: Char
+pattern SUB = '\x1a'
+
+-- | Escape (ESC)
+pattern ESC :: Char
+pattern ESC = '\x1b'
+
+-- | File Separator (FS)
+pattern FS :: Char
+pattern FS = '\x1c'
+
+-- | Group Separator (GS)
+pattern GS :: Char
+pattern GS = '\x1d'
+
+-- | Information Separator One, Record Separator (RS)
+pattern RS :: Char
+pattern RS = '\x1e'
+
+-- | Information Separator Two, Unit Separator (US)
+pattern US :: Char
+pattern US = '\x1f'
+
+-------------------------------------------------------------------------------
+-- * Symbols 1, x20-x2f
+-------------------------------------------------------------------------------
+
+-- | Space (SP), @' '@.
+pattern SPACE :: Char
+pattern SPACE = '\x20'
+
+-- | Exclamation mark, @!@
+pattern EXCLAM :: Char
+pattern EXCLAM = '\x21'
+
+-- | Quotation mark, double quote, @"@
+pattern DOUBLE_QUOTE :: Char
+pattern DOUBLE_QUOTE = '\x22'
+
+-- | Number sign, @#@
+pattern NUMBER :: Char
+pattern NUMBER = '\x23'
+
+-- | Dollar sign, @$@
+pattern DOLLAR :: Char
+pattern DOLLAR = '\x24'
+
+-- | Percent sign, @%@
+pattern PERCENT :: Char
+pattern PERCENT = '\x25'
+
+-- | Ampersand, @&@
+pattern AMPERSAND :: Char
+pattern AMPERSAND = '\x26'
+
+-- | Apostrophe, single quote, @'@
+pattern SINGLE_QUOTE :: Char
+pattern SINGLE_QUOTE = '\x27'
+
+-- | Left parenthesis, @(@
+pattern LEFT_PAREN :: Char
+pattern LEFT_PAREN = '\x28'
+
+-- | Right parenthesis, @)@
+pattern RIGHT_PAREN :: Char
+pattern RIGHT_PAREN = '\x29'
+
+-- | Asterisk, @*@
+pattern ASTERISK :: Char
+pattern ASTERISK = '\x2a'
+
+-- | Plus sign, @+@
+pattern PLUS :: Char
+pattern PLUS = '\x2b'
+
+-- | Comma, @,@
+pattern COMMA :: Char
+pattern COMMA = '\x2c'
+
+-- | Hyphen-minus, @-@
+pattern HYPHEN :: Char
+pattern HYPHEN = '\x2d'
+
+-- | Full stop, period, @.@
+pattern PERIOD :: Char
+pattern PERIOD = '\x2e'
+
+-- | Solidus, slash, @/@
+pattern SLASH :: Char
+pattern SLASH = '\x2f'
+
+-------------------------------------------------------------------------------
+-- * Digits, x30-x39
+-------------------------------------------------------------------------------
+
+-- | Digit 0, @0@
+pattern DIGIT_0 :: Char
+pattern DIGIT_0 = '\x30'
+
+-- | Digit 1, @1@
+pattern DIGIT_1 :: Char
+pattern DIGIT_1 = '\x31'
+
+-- | Digit 2, @2@
+pattern DIGIT_2 :: Char
+pattern DIGIT_2 = '\x32'
+
+-- | Digit 3, @3@
+pattern DIGIT_3 :: Char
+pattern DIGIT_3 = '\x33'
+
+-- | Digit 4, @4@
+pattern DIGIT_4 :: Char
+pattern DIGIT_4 = '\x34'
+
+-- | Digit 5, @5@
+pattern DIGIT_5 :: Char
+pattern DIGIT_5 = '\x35'
+
+-- | Digit 6, @6@
+pattern DIGIT_6 :: Char
+pattern DIGIT_6 = '\x36'
+
+-- | Digit 7, @7@
+pattern DIGIT_7 :: Char
+pattern DIGIT_7 = '\x37'
+
+-- | Digit 8, @8@
+pattern DIGIT_8 :: Char
+pattern DIGIT_8 = '\x38'
+
+-- | Digit 9, @9@
+pattern DIGIT_9 :: Char
+pattern DIGIT_9 = '\x39'
+
+-------------------------------------------------------------------------------
+-- * Symbols 2, x3a-x40
+-------------------------------------------------------------------------------
+
+-- | Colon, @:@
+pattern COLON :: Char
+pattern COLON = '\x3a'
+
+-- | Semicolon, @;@
+pattern SEMICOLON :: Char
+pattern SEMICOLON = '\x3b'
+
+-- | Less-than sign, @<@
+pattern LESS :: Char
+pattern LESS = '\x3c'
+
+-- | Equals sign, @=@
+pattern EQUAL :: Char
+pattern EQUAL = '\x3d'
+
+-- | Greater-than sign, @>@
+pattern GREATER :: Char
+pattern GREATER = '\x3e'
+
+-- | Question mark, @?@
+pattern QUESTION :: Char
+pattern QUESTION = '\x3f'
+
+-- | Commercial At, @\@@
+pattern AT :: Char
+pattern AT = '\x40'
+
+-------------------------------------------------------------------------------
+-- * Upper case letters, x41-x5a
+-------------------------------------------------------------------------------
+
+-- | Latin small letter A, @A@
+pattern UPPER_A :: Char
+pattern UPPER_A = '\x41'
+
+-- | Latin small letter B, @B@
+pattern UPPER_B :: Char
+pattern UPPER_B = '\x42'
+
+-- | Latin small letter C, @C@
+pattern UPPER_C :: Char
+pattern UPPER_C = '\x43'
+
+-- | Latin small letter D, @D@
+pattern UPPER_D :: Char
+pattern UPPER_D = '\x44'
+
+-- | Latin small letter E, @E@
+pattern UPPER_E :: Char
+pattern UPPER_E = '\x45'
+
+-- | Latin small letter F, @F@
+pattern UPPER_F :: Char
+pattern UPPER_F = '\x46'
+
+-- | Latin small letter G, @G@
+pattern UPPER_G :: Char
+pattern UPPER_G = '\x47'
+
+-- | Latin small letter H, @H@
+pattern UPPER_H :: Char
+pattern UPPER_H = '\x48'
+
+-- | Latin small letter I, @I@
+pattern UPPER_I :: Char
+pattern UPPER_I = '\x49'
+
+-- | Latin small letter J, @J@
+pattern UPPER_J :: Char
+pattern UPPER_J = '\x4a'
+
+-- | Latin small letter K, @K@
+pattern UPPER_K :: Char
+pattern UPPER_K = '\x4b'
+
+-- | Latin small letter L, @L@
+pattern UPPER_L :: Char
+pattern UPPER_L = '\x4c'
+
+-- | Latin small letter M, @M@
+pattern UPPER_M :: Char
+pattern UPPER_M = '\x4d'
+
+-- | Latin small letter N, @N@
+pattern UPPER_N :: Char
+pattern UPPER_N = '\x4e'
+
+-- | Latin small letter O, @O@
+pattern UPPER_O :: Char
+pattern UPPER_O = '\x4f'
+
+-- | Latin small letter P, @P@
+pattern UPPER_P :: Char
+pattern UPPER_P = '\x50'
+
+-- | Latin small letter Q, @Q@
+pattern UPPER_Q :: Char
+pattern UPPER_Q = '\x51'
+
+-- | Latin small letter R, @R@
+pattern UPPER_R :: Char
+pattern UPPER_R = '\x52'
+
+-- | Latin small letter S, @S@
+pattern UPPER_S :: Char
+pattern UPPER_S = '\x53'
+
+-- | Latin small letter T, @T@
+pattern UPPER_T :: Char
+pattern UPPER_T = '\x54'
+
+-- | Latin small letter U, @U@
+pattern UPPER_U :: Char
+pattern UPPER_U = '\x55'
+
+-- | Latin small letter V, @V@
+pattern UPPER_V :: Char
+pattern UPPER_V = '\x56'
+
+-- | Latin small letter W, @W@
+pattern UPPER_W :: Char
+pattern UPPER_W = '\x57'
+
+-- | Latin small letter X, @X@
+pattern UPPER_X :: Char
+pattern UPPER_X = '\x58'
+
+-- | Latin small letter Y, @Y@
+pattern UPPER_Y :: Char
+pattern UPPER_Y = '\x59'
+
+-- | Latin small letter Z, @Z@
+pattern UPPER_Z :: Char
+pattern UPPER_Z = '\x5a'
+
+-------------------------------------------------------------------------------
+-- * Symbols 3, x5b-x60
+-------------------------------------------------------------------------------
+
+-- | Left square bracket, @[@
+pattern LEFT_SQUARE :: Char
+pattern LEFT_SQUARE = '\x5b'
+
+-- | Reverse solidus, backslash, @\\@
+pattern BACKSLASH :: Char
+pattern BACKSLASH = '\x5c'
+
+-- | Right square bracket, @]@
+pattern RIGHT_SQUARE :: Char
+pattern RIGHT_SQUARE = '\x5d'
+
+-- | Circumflex accent, @^@
+pattern CIRCUM :: Char
+pattern CIRCUM = '\x5e'
+
+-- | Low line, underscore, @_@
+pattern UNDERSCORE :: Char
+pattern UNDERSCORE = '\x5f'
+
+-- | Grave accent, @`@
+pattern GRAVE :: Char
+pattern GRAVE = '\x60'
+
+-------------------------------------------------------------------------------
+-- * Lower case letters, x61-x7a
+-------------------------------------------------------------------------------
+
+-- | Latin small letter A, @a@
+pattern LOWER_A :: Char
+pattern LOWER_A = '\x61'
+
+-- | Latin small letter B, @b@
+pattern LOWER_B :: Char
+pattern LOWER_B = '\x62'
+
+-- | Latin small letter C, @c@
+pattern LOWER_C :: Char
+pattern LOWER_C = '\x63'
+
+-- | Latin small letter D, @d@
+pattern LOWER_D :: Char
+pattern LOWER_D = '\x64'
+
+-- | Latin small letter E, @e@
+pattern LOWER_E :: Char
+pattern LOWER_E = '\x65'
+
+-- | Latin small letter F, @f@
+pattern LOWER_F :: Char
+pattern LOWER_F = '\x66'
+
+-- | Latin small letter G, @g@
+pattern LOWER_G :: Char
+pattern LOWER_G = '\x67'
+
+-- | Latin small letter H, @h@
+pattern LOWER_H :: Char
+pattern LOWER_H = '\x68'
+
+-- | Latin small letter I, @i@
+pattern LOWER_I :: Char
+pattern LOWER_I = '\x69'
+
+-- | Latin small letter J, @j@
+pattern LOWER_J :: Char
+pattern LOWER_J = '\x6a'
+
+-- | Latin small letter K, @k@
+pattern LOWER_K :: Char
+pattern LOWER_K = '\x6b'
+
+-- | Latin small letter L, @l@
+pattern LOWER_L :: Char
+pattern LOWER_L = '\x6c'
+
+-- | Latin small letter M, @m@
+pattern LOWER_M :: Char
+pattern LOWER_M = '\x6d'
+
+-- | Latin small letter N, @n@
+pattern LOWER_N :: Char
+pattern LOWER_N = '\x6e'
+
+-- | Latin small letter O, @o@
+pattern LOWER_O :: Char
+pattern LOWER_O = '\x6f'
+
+-- | Latin small letter P, @p@
+pattern LOWER_P :: Char
+pattern LOWER_P = '\x70'
+
+-- | Latin small letter Q, @q@
+pattern LOWER_Q :: Char
+pattern LOWER_Q = '\x71'
+
+-- | Latin small letter R, @r@
+pattern LOWER_R :: Char
+pattern LOWER_R = '\x72'
+
+-- | Latin small letter S, @s@
+pattern LOWER_S :: Char
+pattern LOWER_S = '\x73'
+
+-- | Latin small letter T, @t@
+pattern LOWER_T :: Char
+pattern LOWER_T = '\x74'
+
+-- | Latin small letter U, @u@
+pattern LOWER_U :: Char
+pattern LOWER_U = '\x75'
+
+-- | Latin small letter V, @v@
+pattern LOWER_V :: Char
+pattern LOWER_V = '\x76'
+
+-- | Latin small letter W, @w@
+pattern LOWER_W :: Char
+pattern LOWER_W = '\x77'
+
+-- | Latin small letter X, @x@
+pattern LOWER_X :: Char
+pattern LOWER_X = '\x78'
+
+-- | Latin small letter Y, @y@
+pattern LOWER_Y :: Char
+pattern LOWER_Y = '\x79'
+
+-- | Latin small letter Z, @z@
+pattern LOWER_Z :: Char
+pattern LOWER_Z = '\x7a'
+
+-------------------------------------------------------------------------------
+-- * Symbols 5, x7b-x7f
+-------------------------------------------------------------------------------
+
+-- | Left curly bracket, @{@
+pattern LEFT_CURLY :: Char
+pattern LEFT_CURLY = '\x7b'
+
+-- | Vertical line, vecrtical bar, @|@
+pattern BAR :: Char
+pattern BAR = '\x7c'
+
+-- | Right curly bracket, @}@
+pattern RIGHT_CURLY :: Char
+pattern RIGHT_CURLY = '\x7d'
+
+-- | Tilde, @~@
+pattern TILDE :: Char
+pattern TILDE = '\x7e'
+
+-- | Delete (DEL)
+pattern DEL :: Char
+pattern DEL = '\x7f'
diff --git a/src/Data/Word16/Patterns.hs b/src/Data/Word16/Patterns.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Word16/Patterns.hs
@@ -0,0 +1,562 @@
+-- | This module provides pattern synonyms for 'Word16' in [Basic Latin block](https://compart.com/en/unicode/block/U+0000) (range @0x00-0x7f@).
+--
+-- The pattern names are inspired by Unicode (letter and digits) and PostScript names (symbols),
+-- e.g. @/@ is 'SLASH', not @SOLIDUS@.
+--
+-- This module is designed to be imported qualified
+--
+-- @
+-- import "Data.Word16.Patterns" as W16
+--
+-- hello = [W16.'LOWER_H', W16.'LOWER_E', W16.'LOWER_L', W16.'LOWER_L', W16.'LOWER_O']
+-- @
+--
+-- but can also be used unqualified as well.
+--
+module Data.Word16.Patterns where
+
+import Data.Word (Word16)
+
+-------------------------------------------------------------------------------
+-- * Control characters, x00-x1f
+-------------------------------------------------------------------------------
+
+-- | Null character (NUL)
+pattern NUL :: Word16
+pattern NUL = 0x00
+
+-- | Start of Heading (SOH)
+pattern SOH :: Word16
+pattern SOH = 0x01
+
+-- | Start of Text (STX)
+pattern STX :: Word16
+pattern STX = 0x02
+
+-- | End of Text (ETX)
+pattern ETX :: Word16
+pattern ETX = 0x03
+
+-- | End of Transmission (EOT)
+pattern EOT :: Word16
+pattern EOT = 0x04
+
+-- | Enquiry (ENQ)
+pattern ENQ :: Word16
+pattern ENQ = 0x05
+
+-- | Acknowledge (ACK)
+pattern ACK :: Word16
+pattern ACK = 0x06
+
+-- | Alert (BEL)
+pattern BEL :: Word16
+pattern BEL = 0x07
+
+-- | Backspace (BS)
+pattern BS :: Word16
+pattern BS = 0x08
+
+-- | Character tabulation (TAB)
+pattern TAB :: Word16
+pattern TAB = 0x09
+
+-- | End of line, line feed (LF)
+pattern LF :: Word16
+pattern LF = 0x0a
+
+-- | Line tabulation, vertical tab (VT)
+pattern VT :: Word16
+pattern VT = 0x0b
+
+-- | Form feed (FF)
+pattern FF :: Word16
+pattern FF = 0x0c
+
+-- | Carriage Return (CR)
+pattern CR :: Word16
+pattern CR = 0x0d
+
+-- | Locking-Shift One, Shift Out (SO)
+pattern SO :: Word16
+pattern SO = 0x0e
+
+-- | Locking-Shift Zero, Shift In (SI)
+pattern SI :: Word16
+pattern SI = 0x0f
+
+-- | Data Link Escape (DLE)
+pattern DLE :: Word16
+pattern DLE = 0x10
+
+-- | Device Control One, XON (DC1)
+pattern DC1 :: Word16
+pattern DC1 = 0x11
+
+-- | Device Control Two (DC2)
+pattern DC2 :: Word16
+pattern DC2 = 0x12
+
+-- | Device Control Three, XOFF (DC3)
+pattern DC3 :: Word16
+pattern DC3 = 0x13
+
+-- | Device Control Four (DC4)
+pattern DC4 :: Word16
+pattern DC4 = 0x14
+
+-- | Negative Acknowledge (NAK)
+pattern NAK :: Word16
+pattern NAK = 0x15
+
+-- | Syncronous Idle (SYN)
+pattern SYN :: Word16
+pattern SYN = 0x16
+
+-- | End of Transmission Block (ETB)
+pattern ETB :: Word16
+pattern ETB = 0x17
+
+-- | Cancel (CAN)
+pattern CAN :: Word16
+pattern CAN = 0x18
+
+-- | End of Medium (EOM)
+pattern EOM :: Word16
+pattern EOM = 0x19
+
+-- | Substitute (SUB)
+pattern SUB :: Word16
+pattern SUB = 0x1a
+
+-- | Escape (ESC)
+pattern ESC :: Word16
+pattern ESC = 0x1b
+
+-- | File Separator (FS)
+pattern FS :: Word16
+pattern FS = 0x1c
+
+-- | Group Separator (GS)
+pattern GS :: Word16
+pattern GS = 0x1d
+
+-- | Information Separator One, Record Separator (RS)
+pattern RS :: Word16
+pattern RS = 0x1e
+
+-- | Information Separator Two, Unit Separator (US)
+pattern US :: Word16
+pattern US = 0x1f
+
+-------------------------------------------------------------------------------
+-- * Symbols 1, x20-x2f
+-------------------------------------------------------------------------------
+
+-- | Space (SP), @' '@.
+pattern SPACE :: Word16
+pattern SPACE = 0x20
+
+-- | Exclamation mark, @!@
+pattern EXCLAM :: Word16
+pattern EXCLAM = 0x21
+
+-- | Quotation mark, double quote, @"@
+pattern DOUBLE_QUOTE :: Word16
+pattern DOUBLE_QUOTE = 0x22
+
+-- | Number sign, @#@
+pattern NUMBER :: Word16
+pattern NUMBER = 0x23
+
+-- | Dollar sign, @$@
+pattern DOLLAR :: Word16
+pattern DOLLAR = 0x24
+
+-- | Percent sign, @%@
+pattern PERCENT :: Word16
+pattern PERCENT = 0x25
+
+-- | Ampersand, @&@
+pattern AMPERSAND :: Word16
+pattern AMPERSAND = 0x26
+
+-- | Apostrophe, single quote, @'@
+pattern SINGLE_QUOTE :: Word16
+pattern SINGLE_QUOTE = 0x27
+
+-- | Left parenthesis, @(@
+pattern LEFT_PAREN :: Word16
+pattern LEFT_PAREN = 0x28
+
+-- | Right parenthesis, @)@
+pattern RIGHT_PAREN :: Word16
+pattern RIGHT_PAREN = 0x29
+
+-- | Asterisk, @*@
+pattern ASTERISK :: Word16
+pattern ASTERISK = 0x2a
+
+-- | Plus sign, @+@
+pattern PLUS :: Word16
+pattern PLUS = 0x2b
+
+-- | Comma, @,@
+pattern COMMA :: Word16
+pattern COMMA = 0x2c
+
+-- | Hyphen-minus, @-@
+pattern HYPHEN :: Word16
+pattern HYPHEN = 0x2d
+
+-- | Full stop, period, @.@
+pattern PERIOD :: Word16
+pattern PERIOD = 0x2e
+
+-- | Solidus, slash, @/@
+pattern SLASH :: Word16
+pattern SLASH = 0x2f
+
+-------------------------------------------------------------------------------
+-- * Digits, x30-x39
+-------------------------------------------------------------------------------
+
+-- | Digit 0, @0@
+pattern DIGIT_0 :: Word16
+pattern DIGIT_0 = 0x30
+
+-- | Digit 1, @1@
+pattern DIGIT_1 :: Word16
+pattern DIGIT_1 = 0x31
+
+-- | Digit 2, @2@
+pattern DIGIT_2 :: Word16
+pattern DIGIT_2 = 0x32
+
+-- | Digit 3, @3@
+pattern DIGIT_3 :: Word16
+pattern DIGIT_3 = 0x33
+
+-- | Digit 4, @4@
+pattern DIGIT_4 :: Word16
+pattern DIGIT_4 = 0x34
+
+-- | Digit 5, @5@
+pattern DIGIT_5 :: Word16
+pattern DIGIT_5 = 0x35
+
+-- | Digit 6, @6@
+pattern DIGIT_6 :: Word16
+pattern DIGIT_6 = 0x36
+
+-- | Digit 7, @7@
+pattern DIGIT_7 :: Word16
+pattern DIGIT_7 = 0x37
+
+-- | Digit 8, @8@
+pattern DIGIT_8 :: Word16
+pattern DIGIT_8 = 0x38
+
+-- | Digit 9, @9@
+pattern DIGIT_9 :: Word16
+pattern DIGIT_9 = 0x39
+
+-------------------------------------------------------------------------------
+-- * Symbols 2, x3a-x40
+-------------------------------------------------------------------------------
+
+-- | Colon, @:@
+pattern COLON :: Word16
+pattern COLON = 0x3a
+
+-- | Semicolon, @;@
+pattern SEMICOLON :: Word16
+pattern SEMICOLON = 0x3b
+
+-- | Less-than sign, @<@
+pattern LESS :: Word16
+pattern LESS = 0x3c
+
+-- | Equals sign, @=@
+pattern EQUAL :: Word16
+pattern EQUAL = 0x3d
+
+-- | Greater-than sign, @>@
+pattern GREATER :: Word16
+pattern GREATER = 0x3e
+
+-- | Question mark, @?@
+pattern QUESTION :: Word16
+pattern QUESTION = 0x3f
+
+-- | Commercial At, @\@@
+pattern AT :: Word16
+pattern AT = 0x40
+
+-------------------------------------------------------------------------------
+-- * Upper case letters, x41-x5a
+-------------------------------------------------------------------------------
+
+-- | Latin small letter A, @A@
+pattern UPPER_A :: Word16
+pattern UPPER_A = 0x41
+
+-- | Latin small letter B, @B@
+pattern UPPER_B :: Word16
+pattern UPPER_B = 0x42
+
+-- | Latin small letter C, @C@
+pattern UPPER_C :: Word16
+pattern UPPER_C = 0x43
+
+-- | Latin small letter D, @D@
+pattern UPPER_D :: Word16
+pattern UPPER_D = 0x44
+
+-- | Latin small letter E, @E@
+pattern UPPER_E :: Word16
+pattern UPPER_E = 0x45
+
+-- | Latin small letter F, @F@
+pattern UPPER_F :: Word16
+pattern UPPER_F = 0x46
+
+-- | Latin small letter G, @G@
+pattern UPPER_G :: Word16
+pattern UPPER_G = 0x47
+
+-- | Latin small letter H, @H@
+pattern UPPER_H :: Word16
+pattern UPPER_H = 0x48
+
+-- | Latin small letter I, @I@
+pattern UPPER_I :: Word16
+pattern UPPER_I = 0x49
+
+-- | Latin small letter J, @J@
+pattern UPPER_J :: Word16
+pattern UPPER_J = 0x4a
+
+-- | Latin small letter K, @K@
+pattern UPPER_K :: Word16
+pattern UPPER_K = 0x4b
+
+-- | Latin small letter L, @L@
+pattern UPPER_L :: Word16
+pattern UPPER_L = 0x4c
+
+-- | Latin small letter M, @M@
+pattern UPPER_M :: Word16
+pattern UPPER_M = 0x4d
+
+-- | Latin small letter N, @N@
+pattern UPPER_N :: Word16
+pattern UPPER_N = 0x4e
+
+-- | Latin small letter O, @O@
+pattern UPPER_O :: Word16
+pattern UPPER_O = 0x4f
+
+-- | Latin small letter P, @P@
+pattern UPPER_P :: Word16
+pattern UPPER_P = 0x50
+
+-- | Latin small letter Q, @Q@
+pattern UPPER_Q :: Word16
+pattern UPPER_Q = 0x51
+
+-- | Latin small letter R, @R@
+pattern UPPER_R :: Word16
+pattern UPPER_R = 0x52
+
+-- | Latin small letter S, @S@
+pattern UPPER_S :: Word16
+pattern UPPER_S = 0x53
+
+-- | Latin small letter T, @T@
+pattern UPPER_T :: Word16
+pattern UPPER_T = 0x54
+
+-- | Latin small letter U, @U@
+pattern UPPER_U :: Word16
+pattern UPPER_U = 0x55
+
+-- | Latin small letter V, @V@
+pattern UPPER_V :: Word16
+pattern UPPER_V = 0x56
+
+-- | Latin small letter W, @W@
+pattern UPPER_W :: Word16
+pattern UPPER_W = 0x57
+
+-- | Latin small letter X, @X@
+pattern UPPER_X :: Word16
+pattern UPPER_X = 0x58
+
+-- | Latin small letter Y, @Y@
+pattern UPPER_Y :: Word16
+pattern UPPER_Y = 0x59
+
+-- | Latin small letter Z, @Z@
+pattern UPPER_Z :: Word16
+pattern UPPER_Z = 0x5a
+
+-------------------------------------------------------------------------------
+-- * Symbols 3, x5b-x60
+-------------------------------------------------------------------------------
+
+-- | Left square bracket, @[@
+pattern LEFT_SQUARE :: Word16
+pattern LEFT_SQUARE = 0x5b
+
+-- | Reverse solidus, backslash, @\\@
+pattern BACKSLASH :: Word16
+pattern BACKSLASH = 0x5c
+
+-- | Right square bracket, @]@
+pattern RIGHT_SQUARE :: Word16
+pattern RIGHT_SQUARE = 0x5d
+
+-- | Circumflex accent, @^@
+pattern CIRCUM :: Word16
+pattern CIRCUM = 0x5e
+
+-- | Low line, underscore, @_@
+pattern UNDERSCORE :: Word16
+pattern UNDERSCORE = 0x5f
+
+-- | Grave accent, @`@
+pattern GRAVE :: Word16
+pattern GRAVE = 0x60
+
+-------------------------------------------------------------------------------
+-- * Lower case letters, x61-x7a
+-------------------------------------------------------------------------------
+
+-- | Latin small letter A, @a@
+pattern LOWER_A :: Word16
+pattern LOWER_A = 0x61
+
+-- | Latin small letter B, @b@
+pattern LOWER_B :: Word16
+pattern LOWER_B = 0x62
+
+-- | Latin small letter C, @c@
+pattern LOWER_C :: Word16
+pattern LOWER_C = 0x63
+
+-- | Latin small letter D, @d@
+pattern LOWER_D :: Word16
+pattern LOWER_D = 0x64
+
+-- | Latin small letter E, @e@
+pattern LOWER_E :: Word16
+pattern LOWER_E = 0x65
+
+-- | Latin small letter F, @f@
+pattern LOWER_F :: Word16
+pattern LOWER_F = 0x66
+
+-- | Latin small letter G, @g@
+pattern LOWER_G :: Word16
+pattern LOWER_G = 0x67
+
+-- | Latin small letter H, @h@
+pattern LOWER_H :: Word16
+pattern LOWER_H = 0x68
+
+-- | Latin small letter I, @i@
+pattern LOWER_I :: Word16
+pattern LOWER_I = 0x69
+
+-- | Latin small letter J, @j@
+pattern LOWER_J :: Word16
+pattern LOWER_J = 0x6a
+
+-- | Latin small letter K, @k@
+pattern LOWER_K :: Word16
+pattern LOWER_K = 0x6b
+
+-- | Latin small letter L, @l@
+pattern LOWER_L :: Word16
+pattern LOWER_L = 0x6c
+
+-- | Latin small letter M, @m@
+pattern LOWER_M :: Word16
+pattern LOWER_M = 0x6d
+
+-- | Latin small letter N, @n@
+pattern LOWER_N :: Word16
+pattern LOWER_N = 0x6e
+
+-- | Latin small letter O, @o@
+pattern LOWER_O :: Word16
+pattern LOWER_O = 0x6f
+
+-- | Latin small letter P, @p@
+pattern LOWER_P :: Word16
+pattern LOWER_P = 0x70
+
+-- | Latin small letter Q, @q@
+pattern LOWER_Q :: Word16
+pattern LOWER_Q = 0x71
+
+-- | Latin small letter R, @r@
+pattern LOWER_R :: Word16
+pattern LOWER_R = 0x72
+
+-- | Latin small letter S, @s@
+pattern LOWER_S :: Word16
+pattern LOWER_S = 0x73
+
+-- | Latin small letter T, @t@
+pattern LOWER_T :: Word16
+pattern LOWER_T = 0x74
+
+-- | Latin small letter U, @u@
+pattern LOWER_U :: Word16
+pattern LOWER_U = 0x75
+
+-- | Latin small letter V, @v@
+pattern LOWER_V :: Word16
+pattern LOWER_V = 0x76
+
+-- | Latin small letter W, @w@
+pattern LOWER_W :: Word16
+pattern LOWER_W = 0x77
+
+-- | Latin small letter X, @x@
+pattern LOWER_X :: Word16
+pattern LOWER_X = 0x78
+
+-- | Latin small letter Y, @y@
+pattern LOWER_Y :: Word16
+pattern LOWER_Y = 0x79
+
+-- | Latin small letter Z, @z@
+pattern LOWER_Z :: Word16
+pattern LOWER_Z = 0x7a
+
+-------------------------------------------------------------------------------
+-- * Symbols 5, x7b-x7f
+-------------------------------------------------------------------------------
+
+-- | Left curly bracket, @{@
+pattern LEFT_CURLY :: Word16
+pattern LEFT_CURLY = 0x7b
+
+-- | Vertical line, vecrtical bar, @|@
+pattern BAR :: Word16
+pattern BAR = 0x7c
+
+-- | Right curly bracket, @}@
+pattern RIGHT_CURLY :: Word16
+pattern RIGHT_CURLY = 0x7d
+
+-- | Tilde, @~@
+pattern TILDE :: Word16
+pattern TILDE = 0x7e
+
+-- | Delete (DEL)
+pattern DEL :: Word16
+pattern DEL = 0x7f
diff --git a/src/Data/Word8/Patterns.hs b/src/Data/Word8/Patterns.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/Word8/Patterns.hs
@@ -0,0 +1,562 @@
+-- | This module provides pattern synonyms for 'Word8' in [Basic Latin block](https://compart.com/en/unicode/block/U+0000) (range @0x00-0x7f@).
+--
+-- The pattern names are inspired by Unicode (letter and digits) and PostScript names (symbols),
+-- e.g. @/@ is 'SLASH', not @SOLIDUS@.
+--
+-- This module is designed to be imported qualified
+--
+-- @
+-- import "Data.Word8.Patterns" as W8
+--
+-- hello = [W8.'LOWER_H', W8.'LOWER_E', W8.'LOWER_L', W8.'LOWER_L', W8.'LOWER_O']
+-- @
+--
+-- but can also be used unqualified as well.
+--
+module Data.Word8.Patterns where
+
+import Data.Word (Word8)
+
+-------------------------------------------------------------------------------
+-- * Control characters, x00-x1f
+-------------------------------------------------------------------------------
+
+-- | Null character (NUL)
+pattern NUL :: Word8
+pattern NUL = 0x00
+
+-- | Start of Heading (SOH)
+pattern SOH :: Word8
+pattern SOH = 0x01
+
+-- | Start of Text (STX)
+pattern STX :: Word8
+pattern STX = 0x02
+
+-- | End of Text (ETX)
+pattern ETX :: Word8
+pattern ETX = 0x03
+
+-- | End of Transmission (EOT)
+pattern EOT :: Word8
+pattern EOT = 0x04
+
+-- | Enquiry (ENQ)
+pattern ENQ :: Word8
+pattern ENQ = 0x05
+
+-- | Acknowledge (ACK)
+pattern ACK :: Word8
+pattern ACK = 0x06
+
+-- | Alert (BEL)
+pattern BEL :: Word8
+pattern BEL = 0x07
+
+-- | Backspace (BS)
+pattern BS :: Word8
+pattern BS = 0x08
+
+-- | Character tabulation (TAB)
+pattern TAB :: Word8
+pattern TAB = 0x09
+
+-- | End of line, line feed (LF)
+pattern LF :: Word8
+pattern LF = 0x0a
+
+-- | Line tabulation, vertical tab (VT)
+pattern VT :: Word8
+pattern VT = 0x0b
+
+-- | Form feed (FF)
+pattern FF :: Word8
+pattern FF = 0x0c
+
+-- | Carriage Return (CR)
+pattern CR :: Word8
+pattern CR = 0x0d
+
+-- | Locking-Shift One, Shift Out (SO)
+pattern SO :: Word8
+pattern SO = 0x0e
+
+-- | Locking-Shift Zero, Shift In (SI)
+pattern SI :: Word8
+pattern SI = 0x0f
+
+-- | Data Link Escape (DLE)
+pattern DLE :: Word8
+pattern DLE = 0x10
+
+-- | Device Control One, XON (DC1)
+pattern DC1 :: Word8
+pattern DC1 = 0x11
+
+-- | Device Control Two (DC2)
+pattern DC2 :: Word8
+pattern DC2 = 0x12
+
+-- | Device Control Three, XOFF (DC3)
+pattern DC3 :: Word8
+pattern DC3 = 0x13
+
+-- | Device Control Four (DC4)
+pattern DC4 :: Word8
+pattern DC4 = 0x14
+
+-- | Negative Acknowledge (NAK)
+pattern NAK :: Word8
+pattern NAK = 0x15
+
+-- | Syncronous Idle (SYN)
+pattern SYN :: Word8
+pattern SYN = 0x16
+
+-- | End of Transmission Block (ETB)
+pattern ETB :: Word8
+pattern ETB = 0x17
+
+-- | Cancel (CAN)
+pattern CAN :: Word8
+pattern CAN = 0x18
+
+-- | End of Medium (EOM)
+pattern EOM :: Word8
+pattern EOM = 0x19
+
+-- | Substitute (SUB)
+pattern SUB :: Word8
+pattern SUB = 0x1a
+
+-- | Escape (ESC)
+pattern ESC :: Word8
+pattern ESC = 0x1b
+
+-- | File Separator (FS)
+pattern FS :: Word8
+pattern FS = 0x1c
+
+-- | Group Separator (GS)
+pattern GS :: Word8
+pattern GS = 0x1d
+
+-- | Information Separator One, Record Separator (RS)
+pattern RS :: Word8
+pattern RS = 0x1e
+
+-- | Information Separator Two, Unit Separator (US)
+pattern US :: Word8
+pattern US = 0x1f
+
+-------------------------------------------------------------------------------
+-- * Symbols 1, x20-x2f
+-------------------------------------------------------------------------------
+
+-- | Space (SP), @' '@.
+pattern SPACE :: Word8
+pattern SPACE = 0x20
+
+-- | Exclamation mark, @!@
+pattern EXCLAM :: Word8
+pattern EXCLAM = 0x21
+
+-- | Quotation mark, double quote, @"@
+pattern DOUBLE_QUOTE :: Word8
+pattern DOUBLE_QUOTE = 0x22
+
+-- | Number sign, @#@
+pattern NUMBER :: Word8
+pattern NUMBER = 0x23
+
+-- | Dollar sign, @$@
+pattern DOLLAR :: Word8
+pattern DOLLAR = 0x24
+
+-- | Percent sign, @%@
+pattern PERCENT :: Word8
+pattern PERCENT = 0x25
+
+-- | Ampersand, @&@
+pattern AMPERSAND :: Word8
+pattern AMPERSAND = 0x26
+
+-- | Apostrophe, single quote, @'@
+pattern SINGLE_QUOTE :: Word8
+pattern SINGLE_QUOTE = 0x27
+
+-- | Left parenthesis, @(@
+pattern LEFT_PAREN :: Word8
+pattern LEFT_PAREN = 0x28
+
+-- | Right parenthesis, @)@
+pattern RIGHT_PAREN :: Word8
+pattern RIGHT_PAREN = 0x29
+
+-- | Asterisk, @*@
+pattern ASTERISK :: Word8
+pattern ASTERISK = 0x2a
+
+-- | Plus sign, @+@
+pattern PLUS :: Word8
+pattern PLUS = 0x2b
+
+-- | Comma, @,@
+pattern COMMA :: Word8
+pattern COMMA = 0x2c
+
+-- | Hyphen-minus, @-@
+pattern HYPHEN :: Word8
+pattern HYPHEN = 0x2d
+
+-- | Full stop, period, @.@
+pattern PERIOD :: Word8
+pattern PERIOD = 0x2e
+
+-- | Solidus, slash, @/@
+pattern SLASH :: Word8
+pattern SLASH = 0x2f
+
+-------------------------------------------------------------------------------
+-- * Digits, x30-x39
+-------------------------------------------------------------------------------
+
+-- | Digit 0, @0@
+pattern DIGIT_0 :: Word8
+pattern DIGIT_0 = 0x30
+
+-- | Digit 1, @1@
+pattern DIGIT_1 :: Word8
+pattern DIGIT_1 = 0x31
+
+-- | Digit 2, @2@
+pattern DIGIT_2 :: Word8
+pattern DIGIT_2 = 0x32
+
+-- | Digit 3, @3@
+pattern DIGIT_3 :: Word8
+pattern DIGIT_3 = 0x33
+
+-- | Digit 4, @4@
+pattern DIGIT_4 :: Word8
+pattern DIGIT_4 = 0x34
+
+-- | Digit 5, @5@
+pattern DIGIT_5 :: Word8
+pattern DIGIT_5 = 0x35
+
+-- | Digit 6, @6@
+pattern DIGIT_6 :: Word8
+pattern DIGIT_6 = 0x36
+
+-- | Digit 7, @7@
+pattern DIGIT_7 :: Word8
+pattern DIGIT_7 = 0x37
+
+-- | Digit 8, @8@
+pattern DIGIT_8 :: Word8
+pattern DIGIT_8 = 0x38
+
+-- | Digit 9, @9@
+pattern DIGIT_9 :: Word8
+pattern DIGIT_9 = 0x39
+
+-------------------------------------------------------------------------------
+-- * Symbols 2, x3a-x40
+-------------------------------------------------------------------------------
+
+-- | Colon, @:@
+pattern COLON :: Word8
+pattern COLON = 0x3a
+
+-- | Semicolon, @;@
+pattern SEMICOLON :: Word8
+pattern SEMICOLON = 0x3b
+
+-- | Less-than sign, @<@
+pattern LESS :: Word8
+pattern LESS = 0x3c
+
+-- | Equals sign, @=@
+pattern EQUAL :: Word8
+pattern EQUAL = 0x3d
+
+-- | Greater-than sign, @>@
+pattern GREATER :: Word8
+pattern GREATER = 0x3e
+
+-- | Question mark, @?@
+pattern QUESTION :: Word8
+pattern QUESTION = 0x3f
+
+-- | Commercial At, @\@@
+pattern AT :: Word8
+pattern AT = 0x40
+
+-------------------------------------------------------------------------------
+-- * Upper case letters, x41-x5a
+-------------------------------------------------------------------------------
+
+-- | Latin small letter A, @A@
+pattern UPPER_A :: Word8
+pattern UPPER_A = 0x41
+
+-- | Latin small letter B, @B@
+pattern UPPER_B :: Word8
+pattern UPPER_B = 0x42
+
+-- | Latin small letter C, @C@
+pattern UPPER_C :: Word8
+pattern UPPER_C = 0x43
+
+-- | Latin small letter D, @D@
+pattern UPPER_D :: Word8
+pattern UPPER_D = 0x44
+
+-- | Latin small letter E, @E@
+pattern UPPER_E :: Word8
+pattern UPPER_E = 0x45
+
+-- | Latin small letter F, @F@
+pattern UPPER_F :: Word8
+pattern UPPER_F = 0x46
+
+-- | Latin small letter G, @G@
+pattern UPPER_G :: Word8
+pattern UPPER_G = 0x47
+
+-- | Latin small letter H, @H@
+pattern UPPER_H :: Word8
+pattern UPPER_H = 0x48
+
+-- | Latin small letter I, @I@
+pattern UPPER_I :: Word8
+pattern UPPER_I = 0x49
+
+-- | Latin small letter J, @J@
+pattern UPPER_J :: Word8
+pattern UPPER_J = 0x4a
+
+-- | Latin small letter K, @K@
+pattern UPPER_K :: Word8
+pattern UPPER_K = 0x4b
+
+-- | Latin small letter L, @L@
+pattern UPPER_L :: Word8
+pattern UPPER_L = 0x4c
+
+-- | Latin small letter M, @M@
+pattern UPPER_M :: Word8
+pattern UPPER_M = 0x4d
+
+-- | Latin small letter N, @N@
+pattern UPPER_N :: Word8
+pattern UPPER_N = 0x4e
+
+-- | Latin small letter O, @O@
+pattern UPPER_O :: Word8
+pattern UPPER_O = 0x4f
+
+-- | Latin small letter P, @P@
+pattern UPPER_P :: Word8
+pattern UPPER_P = 0x50
+
+-- | Latin small letter Q, @Q@
+pattern UPPER_Q :: Word8
+pattern UPPER_Q = 0x51
+
+-- | Latin small letter R, @R@
+pattern UPPER_R :: Word8
+pattern UPPER_R = 0x52
+
+-- | Latin small letter S, @S@
+pattern UPPER_S :: Word8
+pattern UPPER_S = 0x53
+
+-- | Latin small letter T, @T@
+pattern UPPER_T :: Word8
+pattern UPPER_T = 0x54
+
+-- | Latin small letter U, @U@
+pattern UPPER_U :: Word8
+pattern UPPER_U = 0x55
+
+-- | Latin small letter V, @V@
+pattern UPPER_V :: Word8
+pattern UPPER_V = 0x56
+
+-- | Latin small letter W, @W@
+pattern UPPER_W :: Word8
+pattern UPPER_W = 0x57
+
+-- | Latin small letter X, @X@
+pattern UPPER_X :: Word8
+pattern UPPER_X = 0x58
+
+-- | Latin small letter Y, @Y@
+pattern UPPER_Y :: Word8
+pattern UPPER_Y = 0x59
+
+-- | Latin small letter Z, @Z@
+pattern UPPER_Z :: Word8
+pattern UPPER_Z = 0x5a
+
+-------------------------------------------------------------------------------
+-- * Symbols 3, x5b-x60
+-------------------------------------------------------------------------------
+
+-- | Left square bracket, @[@
+pattern LEFT_SQUARE :: Word8
+pattern LEFT_SQUARE = 0x5b
+
+-- | Reverse solidus, backslash, @\\@
+pattern BACKSLASH :: Word8
+pattern BACKSLASH = 0x5c
+
+-- | Right square bracket, @]@
+pattern RIGHT_SQUARE :: Word8
+pattern RIGHT_SQUARE = 0x5d
+
+-- | Circumflex accent, @^@
+pattern CIRCUM :: Word8
+pattern CIRCUM = 0x5e
+
+-- | Low line, underscore, @_@
+pattern UNDERSCORE :: Word8
+pattern UNDERSCORE = 0x5f
+
+-- | Grave accent, @`@
+pattern GRAVE :: Word8
+pattern GRAVE = 0x60
+
+-------------------------------------------------------------------------------
+-- * Lower case letters, x61-x7a
+-------------------------------------------------------------------------------
+
+-- | Latin small letter A, @a@
+pattern LOWER_A :: Word8
+pattern LOWER_A = 0x61
+
+-- | Latin small letter B, @b@
+pattern LOWER_B :: Word8
+pattern LOWER_B = 0x62
+
+-- | Latin small letter C, @c@
+pattern LOWER_C :: Word8
+pattern LOWER_C = 0x63
+
+-- | Latin small letter D, @d@
+pattern LOWER_D :: Word8
+pattern LOWER_D = 0x64
+
+-- | Latin small letter E, @e@
+pattern LOWER_E :: Word8
+pattern LOWER_E = 0x65
+
+-- | Latin small letter F, @f@
+pattern LOWER_F :: Word8
+pattern LOWER_F = 0x66
+
+-- | Latin small letter G, @g@
+pattern LOWER_G :: Word8
+pattern LOWER_G = 0x67
+
+-- | Latin small letter H, @h@
+pattern LOWER_H :: Word8
+pattern LOWER_H = 0x68
+
+-- | Latin small letter I, @i@
+pattern LOWER_I :: Word8
+pattern LOWER_I = 0x69
+
+-- | Latin small letter J, @j@
+pattern LOWER_J :: Word8
+pattern LOWER_J = 0x6a
+
+-- | Latin small letter K, @k@
+pattern LOWER_K :: Word8
+pattern LOWER_K = 0x6b
+
+-- | Latin small letter L, @l@
+pattern LOWER_L :: Word8
+pattern LOWER_L = 0x6c
+
+-- | Latin small letter M, @m@
+pattern LOWER_M :: Word8
+pattern LOWER_M = 0x6d
+
+-- | Latin small letter N, @n@
+pattern LOWER_N :: Word8
+pattern LOWER_N = 0x6e
+
+-- | Latin small letter O, @o@
+pattern LOWER_O :: Word8
+pattern LOWER_O = 0x6f
+
+-- | Latin small letter P, @p@
+pattern LOWER_P :: Word8
+pattern LOWER_P = 0x70
+
+-- | Latin small letter Q, @q@
+pattern LOWER_Q :: Word8
+pattern LOWER_Q = 0x71
+
+-- | Latin small letter R, @r@
+pattern LOWER_R :: Word8
+pattern LOWER_R = 0x72
+
+-- | Latin small letter S, @s@
+pattern LOWER_S :: Word8
+pattern LOWER_S = 0x73
+
+-- | Latin small letter T, @t@
+pattern LOWER_T :: Word8
+pattern LOWER_T = 0x74
+
+-- | Latin small letter U, @u@
+pattern LOWER_U :: Word8
+pattern LOWER_U = 0x75
+
+-- | Latin small letter V, @v@
+pattern LOWER_V :: Word8
+pattern LOWER_V = 0x76
+
+-- | Latin small letter W, @w@
+pattern LOWER_W :: Word8
+pattern LOWER_W = 0x77
+
+-- | Latin small letter X, @x@
+pattern LOWER_X :: Word8
+pattern LOWER_X = 0x78
+
+-- | Latin small letter Y, @y@
+pattern LOWER_Y :: Word8
+pattern LOWER_Y = 0x79
+
+-- | Latin small letter Z, @z@
+pattern LOWER_Z :: Word8
+pattern LOWER_Z = 0x7a
+
+-------------------------------------------------------------------------------
+-- * Symbols 5, x7b-x7f
+-------------------------------------------------------------------------------
+
+-- | Left curly bracket, @{@
+pattern LEFT_CURLY :: Word8
+pattern LEFT_CURLY = 0x7b
+
+-- | Vertical line, vecrtical bar, @|@
+pattern BAR :: Word8
+pattern BAR = 0x7c
+
+-- | Right curly bracket, @}@
+pattern RIGHT_CURLY :: Word8
+pattern RIGHT_CURLY = 0x7d
+
+-- | Tilde, @~@
+pattern TILDE :: Word8
+pattern TILDE = 0x7e
+
+-- | Delete (DEL)
+pattern DEL :: Word8
+pattern DEL = 0x7f
diff --git a/tests/character-ps-tests.hs b/tests/character-ps-tests.hs
new file mode 100644
--- /dev/null
+++ b/tests/character-ps-tests.hs
@@ -0,0 +1,414 @@
+module Main (main) where
+
+import Control.Monad (unless)
+import Data.Word (Word8, Word16)
+import qualified Data.Char.Patterns as C
+import qualified Data.Word8.Patterns as W8
+import qualified Data.Word16.Patterns as W16
+
+main :: IO ()
+main = do
+    print word8s
+    unless (word8s == [0..127]) $ fail "something wrong"
+
+    print word16s
+    unless (word16s == [0..127]) $ fail "something wrong"
+
+    print chars
+    unless (chars == ['\NUL'..'\DEL']) $ fail "something wrong"
+
+word8s :: [Word8]
+word8s =
+    [ W8.NUL
+    , W8.SOH
+    , W8.STX
+    , W8.ETX
+    , W8.EOT
+    , W8.ENQ
+    , W8.ACK
+    , W8.BEL
+    , W8.BS
+    , W8.TAB
+    , W8.LF
+    , W8.VT
+    , W8.FF
+    , W8.CR
+    , W8.SO
+    , W8.SI
+    , W8.DLE
+    , W8.DC1
+    , W8.DC2
+    , W8.DC3
+    , W8.DC4
+    , W8.NAK
+    , W8.SYN
+    , W8.ETB
+    , W8.CAN
+    , W8.EOM
+    , W8.SUB
+    , W8.ESC
+    , W8.FS
+    , W8.GS
+    , W8.RS
+    , W8.US
+    , W8.SPACE
+    , W8.EXCLAM
+    , W8.DOUBLE_QUOTE
+    , W8.NUMBER
+    , W8.DOLLAR
+    , W8.PERCENT
+    , W8.AMPERSAND
+    , W8.SINGLE_QUOTE
+    , W8.LEFT_PAREN
+    , W8.RIGHT_PAREN
+    , W8.ASTERISK
+    , W8.PLUS
+    , W8.COMMA
+    , W8.HYPHEN
+    , W8.PERIOD
+    , W8.SLASH
+    , W8.DIGIT_0
+    , W8.DIGIT_1
+    , W8.DIGIT_2
+    , W8.DIGIT_3
+    , W8.DIGIT_4
+    , W8.DIGIT_5
+    , W8.DIGIT_6
+    , W8.DIGIT_7
+    , W8.DIGIT_8
+    , W8.DIGIT_9
+    , W8.COLON
+    , W8.SEMICOLON
+    , W8.LESS
+    , W8.EQUAL
+    , W8.GREATER
+    , W8.QUESTION
+    , W8.AT
+    , W8.UPPER_A
+    , W8.UPPER_B
+    , W8.UPPER_C
+    , W8.UPPER_D
+    , W8.UPPER_E
+    , W8.UPPER_F
+    , W8.UPPER_G
+    , W8.UPPER_H
+    , W8.UPPER_I
+    , W8.UPPER_J
+    , W8.UPPER_K
+    , W8.UPPER_L
+    , W8.UPPER_M
+    , W8.UPPER_N
+    , W8.UPPER_O
+    , W8.UPPER_P
+    , W8.UPPER_Q
+    , W8.UPPER_R
+    , W8.UPPER_S
+    , W8.UPPER_T
+    , W8.UPPER_U
+    , W8.UPPER_V
+    , W8.UPPER_W
+    , W8.UPPER_X
+    , W8.UPPER_Y
+    , W8.UPPER_Z
+    , W8.LEFT_SQUARE
+    , W8.BACKSLASH
+    , W8.RIGHT_SQUARE
+    , W8.CIRCUM
+    , W8.UNDERSCORE
+    , W8.GRAVE
+    , W8.LOWER_A
+    , W8.LOWER_B
+    , W8.LOWER_C
+    , W8.LOWER_D
+    , W8.LOWER_E
+    , W8.LOWER_F
+    , W8.LOWER_G
+    , W8.LOWER_H
+    , W8.LOWER_I
+    , W8.LOWER_J
+    , W8.LOWER_K
+    , W8.LOWER_L
+    , W8.LOWER_M
+    , W8.LOWER_N
+    , W8.LOWER_O
+    , W8.LOWER_P
+    , W8.LOWER_Q
+    , W8.LOWER_R
+    , W8.LOWER_S
+    , W8.LOWER_T
+    , W8.LOWER_U
+    , W8.LOWER_V
+    , W8.LOWER_W
+    , W8.LOWER_X
+    , W8.LOWER_Y
+    , W8.LOWER_Z
+    , W8.LEFT_CURLY
+    , W8.BAR
+    , W8.RIGHT_CURLY
+    , W8.TILDE
+    , W8.DEL
+    ]
+
+word16s :: [Word16]
+word16s =
+    [ W16.NUL
+    , W16.SOH
+    , W16.STX
+    , W16.ETX
+    , W16.EOT
+    , W16.ENQ
+    , W16.ACK
+    , W16.BEL
+    , W16.BS
+    , W16.TAB
+    , W16.LF
+    , W16.VT
+    , W16.FF
+    , W16.CR
+    , W16.SO
+    , W16.SI
+    , W16.DLE
+    , W16.DC1
+    , W16.DC2
+    , W16.DC3
+    , W16.DC4
+    , W16.NAK
+    , W16.SYN
+    , W16.ETB
+    , W16.CAN
+    , W16.EOM
+    , W16.SUB
+    , W16.ESC
+    , W16.FS
+    , W16.GS
+    , W16.RS
+    , W16.US
+    , W16.SPACE
+    , W16.EXCLAM
+    , W16.DOUBLE_QUOTE
+    , W16.NUMBER
+    , W16.DOLLAR
+    , W16.PERCENT
+    , W16.AMPERSAND
+    , W16.SINGLE_QUOTE
+    , W16.LEFT_PAREN
+    , W16.RIGHT_PAREN
+    , W16.ASTERISK
+    , W16.PLUS
+    , W16.COMMA
+    , W16.HYPHEN
+    , W16.PERIOD
+    , W16.SLASH
+    , W16.DIGIT_0
+    , W16.DIGIT_1
+    , W16.DIGIT_2
+    , W16.DIGIT_3
+    , W16.DIGIT_4
+    , W16.DIGIT_5
+    , W16.DIGIT_6
+    , W16.DIGIT_7
+    , W16.DIGIT_8
+    , W16.DIGIT_9
+    , W16.COLON
+    , W16.SEMICOLON
+    , W16.LESS
+    , W16.EQUAL
+    , W16.GREATER
+    , W16.QUESTION
+    , W16.AT
+    , W16.UPPER_A
+    , W16.UPPER_B
+    , W16.UPPER_C
+    , W16.UPPER_D
+    , W16.UPPER_E
+    , W16.UPPER_F
+    , W16.UPPER_G
+    , W16.UPPER_H
+    , W16.UPPER_I
+    , W16.UPPER_J
+    , W16.UPPER_K
+    , W16.UPPER_L
+    , W16.UPPER_M
+    , W16.UPPER_N
+    , W16.UPPER_O
+    , W16.UPPER_P
+    , W16.UPPER_Q
+    , W16.UPPER_R
+    , W16.UPPER_S
+    , W16.UPPER_T
+    , W16.UPPER_U
+    , W16.UPPER_V
+    , W16.UPPER_W
+    , W16.UPPER_X
+    , W16.UPPER_Y
+    , W16.UPPER_Z
+    , W16.LEFT_SQUARE
+    , W16.BACKSLASH
+    , W16.RIGHT_SQUARE
+    , W16.CIRCUM
+    , W16.UNDERSCORE
+    , W16.GRAVE
+    , W16.LOWER_A
+    , W16.LOWER_B
+    , W16.LOWER_C
+    , W16.LOWER_D
+    , W16.LOWER_E
+    , W16.LOWER_F
+    , W16.LOWER_G
+    , W16.LOWER_H
+    , W16.LOWER_I
+    , W16.LOWER_J
+    , W16.LOWER_K
+    , W16.LOWER_L
+    , W16.LOWER_M
+    , W16.LOWER_N
+    , W16.LOWER_O
+    , W16.LOWER_P
+    , W16.LOWER_Q
+    , W16.LOWER_R
+    , W16.LOWER_S
+    , W16.LOWER_T
+    , W16.LOWER_U
+    , W16.LOWER_V
+    , W16.LOWER_W
+    , W16.LOWER_X
+    , W16.LOWER_Y
+    , W16.LOWER_Z
+    , W16.LEFT_CURLY
+    , W16.BAR
+    , W16.RIGHT_CURLY
+    , W16.TILDE
+    , W16.DEL
+    ]
+
+chars :: [Char]
+chars =
+    [ C.NUL
+    , C.SOH
+    , C.STX
+    , C.ETX
+    , C.EOT
+    , C.ENQ
+    , C.ACK
+    , C.BEL
+    , C.BS
+    , C.TAB
+    , C.LF
+    , C.VT
+    , C.FF
+    , C.CR
+    , C.SO
+    , C.SI
+    , C.DLE
+    , C.DC1
+    , C.DC2
+    , C.DC3
+    , C.DC4
+    , C.NAK
+    , C.SYN
+    , C.ETB
+    , C.CAN
+    , C.EOM
+    , C.SUB
+    , C.ESC
+    , C.FS
+    , C.GS
+    , C.RS
+    , C.US
+    , C.SPACE
+    , C.EXCLAM
+    , C.DOUBLE_QUOTE
+    , C.NUMBER
+    , C.DOLLAR
+    , C.PERCENT
+    , C.AMPERSAND
+    , C.SINGLE_QUOTE
+    , C.LEFT_PAREN
+    , C.RIGHT_PAREN
+    , C.ASTERISK
+    , C.PLUS
+    , C.COMMA
+    , C.HYPHEN
+    , C.PERIOD
+    , C.SLASH
+    , C.DIGIT_0
+    , C.DIGIT_1
+    , C.DIGIT_2
+    , C.DIGIT_3
+    , C.DIGIT_4
+    , C.DIGIT_5
+    , C.DIGIT_6
+    , C.DIGIT_7
+    , C.DIGIT_8
+    , C.DIGIT_9
+    , C.COLON
+    , C.SEMICOLON
+    , C.LESS
+    , C.EQUAL
+    , C.GREATER
+    , C.QUESTION
+    , C.AT
+    , C.UPPER_A
+    , C.UPPER_B
+    , C.UPPER_C
+    , C.UPPER_D
+    , C.UPPER_E
+    , C.UPPER_F
+    , C.UPPER_G
+    , C.UPPER_H
+    , C.UPPER_I
+    , C.UPPER_J
+    , C.UPPER_K
+    , C.UPPER_L
+    , C.UPPER_M
+    , C.UPPER_N
+    , C.UPPER_O
+    , C.UPPER_P
+    , C.UPPER_Q
+    , C.UPPER_R
+    , C.UPPER_S
+    , C.UPPER_T
+    , C.UPPER_U
+    , C.UPPER_V
+    , C.UPPER_W
+    , C.UPPER_X
+    , C.UPPER_Y
+    , C.UPPER_Z
+    , C.LEFT_SQUARE
+    , C.BACKSLASH
+    , C.RIGHT_SQUARE
+    , C.CIRCUM
+    , C.UNDERSCORE
+    , C.GRAVE
+    , C.LOWER_A
+    , C.LOWER_B
+    , C.LOWER_C
+    , C.LOWER_D
+    , C.LOWER_E
+    , C.LOWER_F
+    , C.LOWER_G
+    , C.LOWER_H
+    , C.LOWER_I
+    , C.LOWER_J
+    , C.LOWER_K
+    , C.LOWER_L
+    , C.LOWER_M
+    , C.LOWER_N
+    , C.LOWER_O
+    , C.LOWER_P
+    , C.LOWER_Q
+    , C.LOWER_R
+    , C.LOWER_S
+    , C.LOWER_T
+    , C.LOWER_U
+    , C.LOWER_V
+    , C.LOWER_W
+    , C.LOWER_X
+    , C.LOWER_Y
+    , C.LOWER_Z
+    , C.LEFT_CURLY
+    , C.BAR
+    , C.RIGHT_CURLY
+    , C.TILDE
+    , C.DEL
+    ]
