Be mindful of GADT tyvar order when desugaring record updates
authorRyan Scott <ryan.gl.scott@gmail.com>
Fri, 17 Aug 2018 14:31:27 +0000 (16:31 +0200)
committerKrzysztof Gogolewski <krz.gogolewski@gmail.com>
Fri, 17 Aug 2018 14:31:27 +0000 (16:31 +0200)
commit63b6a1d44849c479d2a7cb59211f5c64d133bc62
tree6a4b636308455740586cd098fae086d764d57648
parent23f6f31dd66d7c370cb8beec3f1d96a0cb577393
Be mindful of GADT tyvar order when desugaring record updates

Summary:
After commit ef26182e2014b0a2a029ae466a4b121bf235e4e4,
the type variable binders in GADT constructor type signatures
are now quantified in toposorted order, instead of always having
all the universals before all the existentials. Unfortunately, that
commit forgot to update some code (which was assuming the latter
scenario) in `DsExpr` which desugars record updates. This wound
up being the cause of #15499.

This patch makes up for lost time by desugaring record updates in
a way such that the desugared expression applies type arguments to
the right-hand side constructor in the correct order—that is, the
order in which they were quantified by the user.

Test Plan: make test TEST=T15499

Reviewers: simonpj, bgamari

Reviewed By: simonpj

Subscribers: rwbarton, carter

GHC Trac Issues: #15499

Differential Revision: https://phabricator.haskell.org/D5060
compiler/deSugar/DsExpr.hs
testsuite/tests/typecheck/should_compile/T15499.hs [new file with mode: 0644]
testsuite/tests/typecheck/should_compile/all.T