#13371: instance selection too eager -------------------------------------+------------------------------------- Reporter: aavogt | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler (Type | Version: 8.0.2 checker) | Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Changes (by RyanGlScott): * cc: niteria (added) Comment: I tried to figure out where in the 8.0.2 branch this regression was introduced. Unfortunately, I wasn't able to isolate an exact commit, because the range of commits in which it was introduced doesn't build. However, I know for sure it was introduced between: * cc02156b859159eff7d86043f67826c17f2bd170 (where the bug is not present): {{{ From cc02156b859159eff7d86043f67826c17f2bd170 Mon Sep 17 00:00:00 2001 From: Bartosz Nitka <niteria@gmail.com> Date: Mon, 18 Apr 2016 07:32:03 -0700 Subject: [PATCH] Make benign non-determinism in pretty-printing more obvious This change takes us one step closer to being able to remove `varSetElemsWellScoped`. The end goal is to make every source of non-determinism obvious at the source level, so that when we achieve determinism it doesn't get broken accidentally. Test Plan: compile GHC Reviewers: simonmar, goldfire, simonpj, austin, bgamari Reviewed By: simonpj Subscribers: thomie Differential Revision: https://phabricator.haskell.org/D2123 GHC Trac Issues: #4012 (cherry picked from commit 0f96686b10fd36d479a54c71a6e1753193e85347) }}} * ae94a31e7f162b4a3ef6b6f837bd6006a98f639a (where the bug is present): {{{ From ae94a31e7f162b4a3ef6b6f837bd6006a98f639a Mon Sep 17 00:00:00 2001 From: Simon Peyton Jones <simonpj@microsoft.com> Date: Fri, 22 Apr 2016 10:47:14 +0100 Subject: [PATCH] Refactor free tyvars on LHS of rules A RULE can have unbound meta-tyvars on the LHS. Consider data T a = C foo :: T a -> Int foo C = 1 {-# RULES "myrule" foo C = 1 #-} After type checking the LHS becomes (foo alpha (C alpah)) and we do not want to zap the unbound meta-tyvar 'alpha' to Any, because that limits the applicability of the rule. Instead, we want to quantify over it! Previously there was a rather clunky implementation of this quantification, buried in the zonker in TcHsSyn (zonkTvCollecting). This patch refactors it so that the zonker just turns the meta-tyvar into a skolem, and the desugarer adds the quantification. See DsBinds Note [Free tyvars on rule LHS]. As it happened, the desugarer was already doing something similar for dictionaries. See DsBinds Note [Free dictionaries on rule LHS] No change in functionality, but less cruft. (cherry picked from commit 6ad2b42f866fa718855cc5c850e3549bc1428b3c) }}} I doubt that ae94a31e7f162b4a3ef6b6f837bd6006a98f639a was responsible, since it seems to only touch rewrite RULES. Furthermore, niteria authored all commits between cc02156b859159eff7d86043f67826c17f2bd170 and that point. Do you have a hunch what might be happening here, niteria? -- Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13371#comment:2> GHC <http://www.haskell.org/ghc/> The Glasgow Haskell Compiler