Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Register
  • Sign in
  • GHC GHC
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
    • Locked files
  • Issues 5.5k
    • Issues 5.5k
    • List
    • Boards
    • Service Desk
    • Milestones
    • Iterations
  • Merge requests 634
    • Merge requests 634
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Artifacts
    • Schedules
    • Test cases
  • Deployments
    • Deployments
    • Releases
  • Packages and registries
    • Packages and registries
    • Model experiments
  • Analytics
    • Analytics
    • CI/CD
    • Code review
    • Insights
    • Issue
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Glasgow Haskell CompilerGlasgow Haskell Compiler
  • GHCGHC
  • Issues
  • #5348

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) 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
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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking