The American Standard Code for Information Interchange (ASCII) comprises a set of 128 characters, each represented by 7 bits. 33 of these characters are "control codes"; a few of these are still in use, but most are obsolete relics of the early days of computing. The other 95 are "printable characters" such as letters and numbers, mostly corresponding to the keys on an American English keyboard.
Nowadays instead of ASCII we typically work with text using an encoding such as UTF-8 that can represent the entire Unicode character set, which includes over a hundred thousand characters and is not limited to the symbols of any particular writing system or culture. However, ASCII is still relevant to network protocols; for example, we can see it in the specification of HTTP message headers.
There is a convenient relationship between ASCII and Unicode: the ASCII characters are the first 128 characters of the much larger Unicode character set. The C0 Controls and Basic Latin section of the Unicode standard contains a list of all the ASCII characters.
This repository contains several packages.
-
The main API is the
ASCII
module in theascii
package, which is an amalgamation of the other smaller packages. -
If you only need the ASCII
Char
type, you can use theascii-char
package, which is minimal so that it can be kept stable. -
The
ascii-group
package defines theGroup
type (Control
andPrintable
), and theascii-case
package defines theCase
type (UpperCase
andLowerCase
). These package are also small and stable. -
The
ascii-predicates
package provides additional ways of categorizing characters similar to what you can find in thebase
package. -
The
ascii-superset
package definesCharSuperset
andStringSuperset
classes to generalize types that represent characters and strings, respectively, in character sets larger than ASCII. It also defines theASCII
type constructor, which is used to indicate that a value from some ASCII superset is confined to ASCII. -
The
ascii-numbers
package provides utilities for working with numbers represented using ASCII digits 0-9, ASCII letters A-F to represent hexadecimal digits 10-15, and theHypenMinus
character for negation. -
The
ascii-th
package provides a quasi-quoter that allows one to safely and conveniently express ASCII string literals. The generated expressions are polymorphic and can take the form of any type belonging to theStringSuperset
class, including[ASCII.Char]
,String
,ByteString
, andText
.