Skip to content
Snippets Groups Projects
Matthew Pickering's avatar
Matthew Pickering authored
* The difference between a normal splice, a quasiquoter and implicit
splice caused by lifting is stored in the AST after renaming.

* Information that the renamer learns about splices is stored in the
relevant splice extension points (XUntypedSpliceExpr, XQuasiQuote).

* Normal splices and quasi quotes record the flavour of splice
  (exp/pat/dec etc)

* Implicit lifting stores information about why the lift was attempted,
  so if it fails, that can be reported to the user.

* After renaming, the decision taken to attempt to implicitly lift a
variable is stored in the `XXUntypedSplice` extension field in the
`HsImplicitLiftSplice` constructor.

* Since all the information is stored in the AST, in `HsUntypedSplice`,
  the type of `PendingRnSplice` now just stores a `HsUntypedSplice`.

* Error messages since the original program can be easily
  printed, this is noticeable in the case of implicit lifting.
* The user-written syntax is directly type-checked. Before, some
  desugaring took place in the
* Fixes .hie files to work better with nested splices (nested splices
  are not indexed)
* The location of the quoter in a quasiquote is now located, so error
  messages will precisely point to it (and again, it is indexed by hie
  files)

In the future, the typechecked AST should also retain information about
the splices and the specific desugaring being left to the desugarer.

Also, `runRnSplice` should call `tcUntypedSplice`, otherwise the
typechecking logic is duplicated (see the `QQError` and `QQTopError`
tests for a difference caused by this).
1d02798e
History
Code owners
Assign users and groups as approvers for specific file changes. Learn more.