id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	os	architecture	failure	difficulty	testcase	blockedby	blocking	related
5348	Template Haskell quasiquote escapes	simonpj		"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"	feature request	closed	normal		Compiler	7.0.3	fixed		gale@… mainland@… kfisher@… michael@… jonas.duregard@… gershomb@… haskell@…	Unknown/Multiple	Unknown/Multiple	None/Unknown					
