57 lines
1.6 KiB
Text
57 lines
1.6 KiB
Text
|
{-|
|
||
|
Lowercase all ASCII characters
|
||
|
|
||
|
Note that this will also lowercase decomposed Unicode characters that contain
|
||
|
codepoints in the ASCII range
|
||
|
-}
|
||
|
let lowerASCII
|
||
|
: Text → Text
|
||
|
= List/fold
|
||
|
(Text → Text)
|
||
|
[ Text/replace "A" "a"
|
||
|
, Text/replace "B" "b"
|
||
|
, Text/replace "C" "c"
|
||
|
, Text/replace "D" "d"
|
||
|
, Text/replace "E" "e"
|
||
|
, Text/replace "F" "f"
|
||
|
, Text/replace "G" "g"
|
||
|
, Text/replace "H" "h"
|
||
|
, Text/replace "I" "i"
|
||
|
, Text/replace "J" "j"
|
||
|
, Text/replace "K" "k"
|
||
|
, Text/replace "L" "l"
|
||
|
, Text/replace "M" "m"
|
||
|
, Text/replace "N" "n"
|
||
|
, Text/replace "O" "o"
|
||
|
, Text/replace "P" "p"
|
||
|
, Text/replace "Q" "q"
|
||
|
, Text/replace "R" "r"
|
||
|
, Text/replace "S" "s"
|
||
|
, Text/replace "T" "t"
|
||
|
, Text/replace "U" "u"
|
||
|
, Text/replace "V" "v"
|
||
|
, Text/replace "W" "w"
|
||
|
, Text/replace "X" "x"
|
||
|
, Text/replace "Y" "y"
|
||
|
, Text/replace "Z" "z"
|
||
|
]
|
||
|
Text
|
||
|
(λ(replacement : Text → Text) → replacement)
|
||
|
|
||
|
let example0 = assert : lowerASCII "ABCdef" ≡ "abcdef"
|
||
|
|
||
|
let -- This does not lowercase precomposed Unicode characters
|
||
|
--
|
||
|
-- • The `Á` in the following example is U+00C1
|
||
|
example1 =
|
||
|
assert : lowerASCII "Á" ≡ "Á"
|
||
|
|
||
|
let -- … but this does lowercase decomposed Unicode characters
|
||
|
--
|
||
|
-- • The `Á` in the following example is U+0041 U+0301
|
||
|
-- • The `á` in the following example is U+0061 U+0301
|
||
|
example1 =
|
||
|
assert : lowerASCII "Á" ≡ "á"
|
||
|
|
||
|
in lowerASCII
|