Char and String Types¶
Char¶
The Char
type is written in single quotes. We can also use Unicode code points in hexadecimal to create a char. Note the \x...
escape sequence.
charZ :: Char
charZ = 'Z'
check :: Char
check = '\x2714'
-- → ✔
String¶
The String
type is written with double quotes.
Unlike in some other languages, line continuation requires not one escape, but two.
hello :: String
hello = "Hello, world!"
withNl :: String
withNl = "Contains a\nnewline."
Multi-line:
multi :: String
multi = "This string\
\ spawns over\
\ multiple lines, but spaces\
\ to the \
\ left of the ‘\\’ are ignored.\
\\n\
\ Oh, and Unicode code points\
\ work too \x2714! 💖"
> log multi
This string spawns over multiple lines, but spaces to the left of the ‘\’ are ignored.
Oh, and Unicode code points work too ✔! 💖
Spaces before the trailing \
concatenate with spaces after the leading \
.
Unicode¶
We can use \x
escapes with hexadecimal numbers to denote a Unicode code point.
Char¶
For Char
, as of PureScript 0.15, it seems we can use up to 4 bytes:
> '\x2714'
'✔'
> '\x2717'
'✗'
> '\x03bb'
'λ'
> '\x203d'
'‽'
> '\x0001f4a9'
Unexpected a at line 1, column 10
> '\x1f4a9'
Illegal astral code point in character literal at line 1, column 9
String¶
For String
, we can use up to 6 bytes (which as of 2022, is enough every Unicode code point without using surrogates, since as of this day, Unicode goes up to 10FFFF).
> "\x2714"
"✔"
> "\x1f4a9"
"💩"
> "\x01f4a9"
"💩"
> "\x0001f4a9"
"Ǵa9"
Surrogates work with String
, but not with Char
:
> "\xD83d\xDCA9"
"💩"
> '\xD83d\xDCA9'
Unexpected \ at line 1, column 8
See this discussion on the PureScript Discord server about this topic and this issue on the PureScript repo.