
#15147: Type checker plugin receives Wanteds that are not completely unflattened -------------------------------------+------------------------------------- Reporter: nfrisby | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: 8.6.1 Component: Compiler (Type | Version: 8.4.1 checker) | Keywords: Resolution: | TypeCheckerPlugins Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by simonpj):
if I a programmer wrote x ~ F a, G x ~ G Int, then would un-flattening rewrite this to G (F a) ~ G Int or would it leave it as is?
If these were Wanteds, un-flattening would not rewrite to `G (F a) ~ G Int`. (Wanteds do not rewrite Wanteds.) But if they were Givens, which we don't un-unflatten, we'd end up with {{{ [G] F a ~ fsk1 CFunEqCan [G] G fsk1 ~ fsk2 CFunEqCan [G] G Int ~ fsk3 CFunEqCan [G] fsk2 ~ fsk3 CTyEqCan [G] x ~ fsk1 CTyEqCan }}} If we didn't unflatten Wanteds either, we'd get {{{ [W] F a ~ fuv1 CFunEqCan [W] G x ~ fuv2 CFunEqCan -- NB: not rewritten by [W] x~fuv1 [W] G Int ~ fsk3 CFunEqCan [W] x ~ fuv1 CTyEqCan [W] fuv2 ~ fuv3 CTyEqCan }}} -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15147#comment:19 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler