Simplify syntax for quasi-quotation
authorsimonpj@microsoft.com <unknown>
Wed, 10 Feb 2010 09:44:19 +0000 (09:44 +0000)
committersimonpj@microsoft.com <unknown>
Wed, 10 Feb 2010 09:44:19 +0000 (09:44 +0000)
After some discussion we decided to make a quasi-quote look like

   [pads| ...blah... |]

rather than

   [$pads| ...blah... |]

as before. The new syntax is quieter, although it does not signal
quite as clearly that there is a splice going on.

compiler/parser/Lexer.x

index 51aa2f3..6651333 100644 (file)
@@ -307,7 +307,7 @@ $tab+         { warn Opt_WarnTabs (text "Tab character") }
   \$ @varid / { ifExtension thEnabled }        { skip_one_varid ITidEscape }
   "$("     / { ifExtension thEnabled } { token ITparenEscape }
 
-  "[$" @varid "|"  / { ifExtension qqEnabled }
+  "[" @varid "|"  / { ifExtension qqEnabled }
                      { lex_quasiquote_tok }
 }
 
@@ -1412,8 +1412,9 @@ getCharOrFail i =  do
 
 lex_quasiquote_tok :: Action
 lex_quasiquote_tok span buf len = do
-  let quoter = reverse $ takeWhile (/= '$')
-               $ reverse $ lexemeToString buf (len - 1)
+  let quoter = tail (lexemeToString buf (len - 1))
+               -- 'tail' drops the initial '[', 
+               -- while the -1 drops the trailing '|'
   quoteStart <- getSrcLoc              
   quote <- lex_quasiquote ""
   end <- getSrcLoc