Unicode.Char.Case
Case and case mapping related functions.
This module provides full predicates and mappings that are not compatible with those in Data.Char, which rely on simple properties. See Unicode.Char.Case.Compat for a drop-in replacement of the functions in Data.Char.
Predicates
isLowerCase :: Char -> Bool Source #
isUpperCase :: Char -> Bool Source #
Returns True
for upper-case characters.
It uses the character property Uppercase.
Note: it does not match title-cased letters. Those are matched using:
.generalCategory
c ==
TitlecaseLetter
See: isUpper
for the legacy predicate.
Since: 0.3.0
Case mappings
Correct case conversion rules may map one input character to two or three
output characters. For examples, see the documentation of toCaseFoldString
,
toLowerString
, toTitleString
and toUpperString
.
Note: In some languages, case conversion is a locale- and context-dependent operation. The case conversion functions in this module are not locale nor context sensitive.
Case folding mapping
caseFoldMapping :: Unfold Char Char Source #
Returns the full folded case mapping of a character if the character is changed, else nothing.
It uses the character property Case_Folding
.
Since: 0.3.1
toCaseFoldString :: Char -> String Source #
Convert a character to full folded case if defined, else to itself.
This function is mainly useful for performing caseless (also known as case insensitive) string comparisons.
A string x
is a caseless match for a string y
if and only if:
foldMap toCaseFoldString x == foldMap toCaseFoldString y
The result string may have more than one character, and may
differ from applying toLowerString
to the input string. For instance,
“ﬓ” (U+FB13
Armenian small ligature men now) is case
folded to the sequence “մ” (U+0574
Armenian small letter men)
followed by “ն” (U+0576
Armenian small letter now), while
“µ” (U+00B5
micro sign) is case folded to
“μ” (U+03BC
Greek small letter mu) instead of itself.
It uses the character property Case_Folding
.
toCaseFoldString c == foldMap toCaseFoldString (toCaseFoldString c)
Since: 0.3.1
Lower case mapping
lowerCaseMapping :: Unfold Char Char Source #
Returns the full lower case mapping of a character if the character is changed, else nothing.
It uses the character property Lowercase_Mapping
.
Since: 0.3.1
toLowerString :: Char -> String Source #
Convert a character to full lower case if defined, else to itself.
The result string may have more than one character. For instance,
“İ” (U+0130
Latin capital letter I with dot above) maps
to the sequence: “i” (U+0069
Latin small letter I)
followed by “ ̇” (U+0307
combining dot above).
It uses the character property Lowercase_Mapping
.
See: toLower
for simple lower case conversion.
toLowerString c == foldMap toLowerString (toLowerString c)
Since: 0.3.1
Title case mapping
titleCaseMapping :: Unfold Char Char Source #
Returns the full title case mapping of a character if the character is changed, else nothing.
It uses the character property Titlecase_Mapping
.
Since: 0.3.1
toTitleString :: Char -> String Source #
Convert a character to full title case if defined, else to itself.
The result string may have more than one character. For instance,
“fl” (U+FB02
Latin small ligature FL) is converted to the
sequence: “F” (U+0046
Latin capital letter F) followed by
“l” (U+006C
Latin small letter L).
It uses the character property Titlecase_Mapping
.
See: toTitle
for simple title case conversion.
Since: 0.3.1
Upper case mapping
upperCaseMapping :: Unfold Char Char Source #
Returns the full upper case mapping of a character if the character is changed, else nothing.
It uses the character property Uppercase_Mapping
.
Since: 0.3.1
toUpperString :: Char -> String Source #
Convert a character to full upper case if defined, else to itself.
The result string may have more than one character. For instance,
the German “ß” (U+00DF
Eszett) maps to the
two-letter sequence “SS”.
It uses the character property Uppercase_Mapping
.
See: toUpper
for simple upper case conversion.
toUpperString c == foldMap toUpperString (toUpperString c)
Since: 0.3.1
Unfold
An Unfold a b
is a generator of a stream of values of type b
from a
seed of type a
.
Since: 0.3.1