
On Sun, 18 Dec 2022 at 03:54, Richard Eisenberg
On Dec 14, 2022, at 6:05 AM, Simon Marlow
wrote: It's clear that CPP needs to remain as a flag because it does bad things to the syntax like breaking multiline strings and doing strange things to `##`. But it's less clear to me that TemplateHaskell is in this category. Isn't it just an extension that enables new syntax? Yes there are *practical* reasons why we might not want it on by default, because it makes compilation slower and whatnot, but isn't that all it is?
I somehow missed this, and more surprisingly just now found it.
TemplateHaskell isn't just for new syntax primarily because it has important interactions around cross-compilation. If/when GHC has a comprehensive story around cross-compilation, TH will change the way the pipeline works. It was this concern that suggested it should be lumped with CPP. (TemplateHaskellQuotes are a different story -- that's just syntax.)
I think of cross-compilation as just a tooling issue that affects how you actually *implement* TH, but not something that changes what it means. Or perhaps I'm wrong? Is there a way in which enabling TH will change the meaning of a program that doesn't use any TH? Cheers Simon