Quoting a quasi-quote
Simon Peyton-Jones
simonpj at microsoft.com
Wed Jul 27 08:56:19 CEST 2011
Dear Template Haskell users
There was a little exchange about TH quasiquotes a few weeks back (see below). I've made a ticket and some concrete proposals here
http://hackage.haskell.org/trac/ghc/ticket/5348
Do take a look, if you care about TH quasiquotes.
Simon
| -----Original Message-----
| From: glasgow-haskell-users-bounces at haskell.org [mailto:glasgow-haskell-users-
| bounces at haskell.org] On Behalf Of Simon Marlow
| Sent: 11 July 2011 13:43
| To: gale at sefer.org
| Cc: GHC users; Ben Millwood
| Subject: Re: Quoting a quasi-quote
|
| On 30/06/2011 14:52, Yitzchak Gale wrote:
| > It was pointed out by Ben Millwood on the Cafe
| > that there is an undocumented way to escape the
| > closing oxford bracket of a quasi-quote using
| > a backslash:
| >
| > [s|This quasi-quote contains this, \|], an escaped
| > closing oxford bracket.|]
| >
| > The backslash itself cannot be escaped in this
| > way:
| >
| > [s|Also contains an escaped bracket \\|] |]
| >
| > Thus there is a fairly strong limitation on the
| > contents of a quasi-quote: it can never end
| > in a backslash.
| >
| > This behavior is not mentioned in the GHC docs.
| > Is it a mistake, or is it meant to be a supported
| > feature?
| >
| > This behavior is a bit surprising to me. Since the
| > whole point of a quasi-quoter is to allow the user
| > to define syntax, you would think that the syntax
| > for the quasi-quote itself would be as quiet as
| > possible and stay out of the way. People who
| > need to be able to escape the closing bracket
| > can easily define their own syntax to do so.
| >
| > In any case, if this is indeed a feature, it certainly
| > should be documented.
|
| It looks intentional to me:
|
| lex_quasiquote :: String -> P String
| lex_quasiquote s = do
| i <- getInput
| case alexGetChar' i of
| Nothing -> lit_error i
|
| Just ('\\',i)
| | Just ('|',i) <- next -> do
| setInput i; lex_quasiquote ('|' : s)
| | Just (']',i) <- next -> do
| setInput i; lex_quasiquote (']' : s)
| where next = alexGetChar' i
|
| Just ('|',i)
| | Just (']',i) <- next -> do
| setInput i; return s
| where next = alexGetChar' i
|
| Just (c, i) -> do
| setInput i; lex_quasiquote (c : s)
|
|
| Indeed, it also seems strange that "\\]" is interpreted as "]".
|
| That's all I know. I agree we should either document or remove the feature.
|
| Cheers,
| Simon
|
|
| _______________________________________________
| Glasgow-haskell-users mailing list
| Glasgow-haskell-users at haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
More information about the Glasgow-haskell-users
mailing list