Template Haskell quasiquote escapes
This ticket arises from a brief email thread http://www.haskell.org/pipermail/glasgow-haskell-users/2011-June/020550.html and http://www.haskell.org/pipermail/glasgow-haskell-users/2011-July/020564.html
In a Template Haskell quasiquote, what would you expect this to do?
[myparser|blah\1blah|]
That is, what String
would you expect to be passed to the parser myparser
? Currently you get exactly the 10-character string
blah\1blah
The backslash is passed on literally. The principle is to do as little meddling as possible, leaving it up to myparser
to do what it wants. However, backslash does initiate some limited escape behaviour
[myparser|blah\|blah|] -- gives "blah|blah" (9 chars)
[myparser|blah\|]blah|] -- gives "blah|]blah" (10 chars)
[myparser|blah\]blah|] -- gives "blah]blah" (9 chars)
The motivation here is that you might want the sequence "|]" in your quoted string, and to do so you have to escape it.
However:
- Currently "
\]
" is an escape sequence, but it does not need to be. - Currently "
\|
" is an escape sequence, whereas it could be "\|]
". Then[myparser|blah\|blah|]
would yield the (10-char) stringblah\|blah
. - There is no way to have a quote that ends in a backslash, thus
[myparser|\blahblah\|]
. This could be fixed by adding "\\
" as an escape sequence for backslash.
An alterntive would be to support no escapes at all, but instead ask myparser
itself to determine where the quotation ended. Instead of String -> Q Exp
the parser would have type String -> Q (String,Exp)
. This seems to me to be a bridge too far. Better to get GHC to determine where the quote ends.
Proposal:
- Get rid of "
\]
" as an escape sequence - Replace "
\]
" as an escape sequence by "\|]
" - Add "
\\
" as an escape sequence
Trac metadata
Trac field | Value |
---|---|
Version | 7.0.3 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | gale@sefer.org;mainland@eecs.harvard.edu; kfisher@eecs.tufts.edu |
Operating system | |
Architecture |