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"
"💩"
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.