Char

The Char type represents a single Unicode character (code point). Create character values from one-character strings or Unicode code points.

Literals

Creating Characters
Char
Create character values from one-character strings or Unicode code points.
letter = Char.from-string "a" |> Option.unwrap
digit = Char.from-string "5" |> Option.unwrap
symbol = Char.from-code-point 42 |> Option.unwrap

println letter
# => 'a'

Conversions

Char.from-code-point
Int -> Option Char
Creates a character from a Unicode code point. Returns None for invalid code points.
println (Char.from-code-point 65)
# => Some('A')

println (Char.from-code-point 128054)
# => Some('🐶')

println (Char.from-code-point -1)
# => None
Char.to-code-point
Char -> Int
Returns the Unicode code point of a character.
letter = Char.from-string "A" |> Option.unwrap
dog = Char.from-code-point 128054 |> Option.unwrap

println (Char.to-code-point letter)
# => 65

println (Char.to-code-point dog)
# => 128054
Char.from-string
String -> Option Char
Converts a single-character string to a Char. Returns None if the string is empty or has multiple characters.
println (Char.from-string "a")
# => Some('a')

println (Char.from-string "ab")
# => None

println (Char.from-string "")
# => None
Char.to-string
Char -> String
Converts a character to a single-character string.
letter = Char.from-string "a" |> Option.unwrap
symbol = Char.from-code-point 9733 |> Option.unwrap

println (Char.to-string letter)
# => "a"

println (Char.to-string symbol)
# => "*"

Predicates

Char.is-alpha?
Char -> Bool
Returns true if the character is an alphabetic letter (a-z, A-Z).
a = Char.from-string "a" |> Option.unwrap
z = Char.from-string "Z" |> Option.unwrap
five = Char.from-string "5" |> Option.unwrap

println (Char.is-alpha? a)    # => true
println (Char.is-alpha? z)    # => true
println (Char.is-alpha? five) # => false
Char.is-digit?
Char -> Bool
Returns true if the character is a decimal digit (0-9).
five = Char.from-string "5" |> Option.unwrap
a = Char.from-string "a" |> Option.unwrap

println (Char.is-digit? five) # => true
println (Char.is-digit? a)    # => false
Char.is-alphanumeric?
Char -> Bool
Returns true if the character is alphabetic or a digit.
a = Char.from-string "a" |> Option.unwrap
five = Char.from-string "5" |> Option.unwrap
bang = Char.from-string "!" |> Option.unwrap

println (Char.is-alphanumeric? a)    # => true
println (Char.is-alphanumeric? five) # => true
println (Char.is-alphanumeric? bang) # => false
Char.is-whitespace?
Char -> Bool
Returns true if the character is whitespace (space, tab, newline, etc.).
space = Char.from-string " " |> Option.unwrap
newline = Char.from-code-point 10 |> Option.unwrap
a = Char.from-string "a" |> Option.unwrap

println (Char.is-whitespace? space)   # => true
println (Char.is-whitespace? newline) # => true
println (Char.is-whitespace? a)       # => false
Char.is-uppercase?
Char -> Bool
Returns true if the character is an uppercase letter.
upper = Char.from-string "A" |> Option.unwrap
lower = Char.from-string "a" |> Option.unwrap

println (Char.is-uppercase? upper) # => true
println (Char.is-uppercase? lower) # => false
Char.is-lowercase?
Char -> Bool
Returns true if the character is a lowercase letter.
lower = Char.from-string "a" |> Option.unwrap
upper = Char.from-string "A" |> Option.unwrap

println (Char.is-lowercase? lower) # => true
println (Char.is-lowercase? upper) # => false
Char.is-ascii?
Char -> Bool
Returns true if the character is in the ASCII range (0-127).
a = Char.from-string "a" |> Option.unwrap
dog = Char.from-code-point 128054 |> Option.unwrap

println (Char.is-ascii? a)   # => true
println (Char.is-ascii? dog) # => false
Char.is-control?
Char -> Bool
Returns true if the character is a control character.
newline = Char.from-code-point 10 |> Option.unwrap
a = Char.from-string "a" |> Option.unwrap

println (Char.is-control? newline) # => true
println (Char.is-control? a)       # => false
Char.is-punctuation?
Char -> Bool
Returns true if the character is a punctuation character.
dot = Char.from-string "." |> Option.unwrap
bang = Char.from-string "!" |> Option.unwrap
a = Char.from-string "a" |> Option.unwrap

println (Char.is-punctuation? dot)  # => true
println (Char.is-punctuation? bang) # => true
println (Char.is-punctuation? a)    # => false
Char.is-hex-digit?
Char -> Bool
Returns true if the character is a hexadecimal digit (0-9, a-f, A-F).
a = Char.from-string "a" |> Option.unwrap
f = Char.from-string "F" |> Option.unwrap
g = Char.from-string "g" |> Option.unwrap

println (Char.is-hex-digit? a) # => true
println (Char.is-hex-digit? f) # => true
println (Char.is-hex-digit? g) # => false
Char.is-printable?
Char -> Bool
Returns true if the character is printable (visible when rendered).
a = Char.from-string "a" |> Option.unwrap
space = Char.from-string " " |> Option.unwrap
newline = Char.from-code-point 10 |> Option.unwrap

println (Char.is-printable? a)       # => true
println (Char.is-printable? space)   # => true
println (Char.is-printable? newline) # => false

Case Conversion

Char.to-uppercase
Char -> Char
Converts a character to uppercase. Non-letter characters are returned unchanged.
lower = Char.from-string "a" |> Option.unwrap
upper = Char.from-string "A" |> Option.unwrap
five = Char.from-string "5" |> Option.unwrap

println (Char.to-uppercase lower) # => 'A'
println (Char.to-uppercase upper) # => 'A'
println (Char.to-uppercase five)  # => '5'
Char.to-lowercase
Char -> Char
Converts a character to lowercase. Non-letter characters are returned unchanged.
upper = Char.from-string "A" |> Option.unwrap
lower = Char.from-string "a" |> Option.unwrap
five = Char.from-string "5" |> Option.unwrap

println (Char.to-lowercase upper) # => 'a'
println (Char.to-lowercase lower) # => 'a'
println (Char.to-lowercase five)  # => '5'

Comparison

Char.compare
Char -> Char -> Ordering
Compares two characters by their code points. Returns Less, Equal, or Greater.
a = Char.from-string "a" |> Option.unwrap
b = Char.from-string "b" |> Option.unwrap
c = Char.from-string "c" |> Option.unwrap

println (Char.compare a b) # => Less
println (Char.compare b b) # => Equal
println (Char.compare c a) # => Greater
Working with Strings

Use String.chars to convert a string to a list of characters, and String.from-chars to convert back.

chars = String.chars "hello"
# => ['h', 'e', 'l', 'l', 'o']

upper = chars |>> map Char.to-uppercase |> String.from-chars
# => "HELLO"