Convenient template Haskell quasiquoters to format strings.
The str
quasiquoter retains newlines in the string when the line is split
across multiple lines. The unwords . lines
idiom can be used on the
resulting string to collapse it into a single line.
Setup
To execute the code examples provided in this module in ghci, please run the following commands first.
>>>
:m
>>>
:set -XQuasiQuotes
>>>
import Streamly.Internal.Unicode.String
str :: QuasiQuoter Source #
A QuasiQuoter that treats the input as a string literal:
>>>
[str|x|]
"x"
Any #{symbol}
is replaced by the value of the Haskell symbol symbol
which is in scope:
>>>
x = "hello"
>>>
[str|#{x} world!|]
"hello world!"
##
means a literal #
without the special meaning for referencing
haskell symbols:
>>>
[str|##{x} world!|]
"#{x} world!"
A #
at the end of line means the line continues to the next line without
introducing a newline character:
>>>
:{
[str|hello# world!|] :} "hello world!"
Bugs: because of a bug in parsers, a lone # at the end of input gets removed.