Přemysl Šťastný
Přemysl Šťastný

Reputation: 1832

Quasiquotes escaping

I would like to add my new language to Haskell using the Quasiquotes, but the language itself uses |] as a keyword.

Is there some way, how to:

a) Escape |], so it is passed to my language

b) Let the parser of my language decide, when the quasiquotation ends itself

Thanks.

Upvotes: 3

Views: 358

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476493

Short answer: slightly modify the embedded language.

The User's Guide on QuasiQuoters explains that no escaping can done for the |]:

The quoted ⟨string⟩ finishes at the first occurrence of the two-character sequence "|]". Absolutely no escaping is performed. If you want to embed that character sequence in the string, you must invent your own escape convention (such as, say, using the string "|~]" instead), and make your quoter function interpret "|~]" as "|]".

Your parser can not decide when the quasiquoters ends, because the substring is passed to the quasiquoter that started after the [quasiquoter|… part and before the …|] part.

You thus should slightly alter your language and thus for example work with a pre-processor that translate |~] (which is not considered the end of the quasiquoted string) to |] instead.

Upvotes: 4

Related Questions