#5348: Template Haskell quasiquote escapes
---------------------------------+------------------------------------------
Reporter: simonpj | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.0.3
Keywords: | Testcase:
Blockedby: | Difficulty:
Os: Unknown/Multiple | Blocking:
Architecture: Unknown/Multiple | Failure: None/Unknown
---------------------------------+------------------------------------------
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) string
`blah\|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
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5348>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs