summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* WIP: Add likelyhood to alternatives from stg onwardswip/D4327Andreas Klebinger2018-03-1327-286/+635
| | | | | | | | | | | | | | | | | | | | | | | Summary: Adds a Freq value to Stg/Cmm cases/switches/conditionals. Currently only generates these values by checking alternatives for bottom expressions. They are passed along to the backend where they affect conditional generation slightly. As it stands runtime improvements seem to be less than expected. This might only be worth merging once we have more branch weights available. Reviewers: hvr, goldfire, bgamari, simonmar, simonpj, erikd Reviewed By: simonpj Subscribers: simonpj, rwbarton, thomie, carter GHC Trac Issues: #14672 Differential Revision: https://phabricator.haskell.org/D4327
* Revert "Move `iserv` into `utils` and change package nameBen Gamari2018-02-2021-619/+108
| | | | | | See Phab:D4377 for the rationale. We will try this again. This reverts commit 7c173b9043f7a9a5da46c5b0cc5fc3b38d1a7019.
* Slight refactor of stock deriving internalsRyan Scott2018-02-202-17/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Before, the `hasStockDeriving` function, which determines how derived bindings should be generated for stock classes, was awkwardly separated from the `checkSideConditions` function, which checks invariants of the same classes that `hasStockDeriving` does. As a result, there was a fair deal of hoopla needed to actually use `hasStockDeriving`. But this hoopla really isn't required—we should be using `hasStockDeriving` from within `checkSideConditions`, since they're looking up information about the same classes! By doing this, we can eliminate some kludgy code in the form of `mk_eqn_stock'`, which had an unreachable `pprPanic` that was stinking up the place. Reviewers: bgamari, dfeuer Reviewed By: bgamari Subscribers: dfeuer, rwbarton, thomie, carter GHC Trac Issues: #13154 Differential Revision: https://phabricator.haskell.org/D4370
* Add ghc-prim.buildinfo to .gitignoreRyan Scott2018-02-201-1/+2
|
* circleci: Skip performance testsBen Gamari2018-02-201-2/+2
| | | | Once we finally get the automation for #12758 we can re-enable these.
* Document missing dataToTag# . tagToEnum# ruleDavid Feuer2018-02-191-0/+13
| | | | | | | | | | | | | | | | | Explain why we don't have a rule to optimize `dataToTag# (tagToEnum# x)` to `x`. [skip ci] Reviewers: bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, carter GHC Trac Issues: #14282 Differential Revision: https://phabricator.haskell.org/D4375
* Change how includes for input file directory worksTamar Christina2018-02-196-16/+63
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | GHC Used to only allow for one include mode, namely `-I`. The problem with `-I` includes is that it supercedes all other includes, including the system include paths. This is not a problem for paths requested by the user, but it is a problem for the ones we implicitly derive and add. In particular we add the source directory of the input file to the include path. This is problematic because it causes any file with the name of a system include, to inadvertently loop as the wrong file gets included. Since this is an implicitly include, and as far as I can tell, only done so local includes are found (as the sources given to GCC reside in a temp folder) then switch from `-I` to `-iquote`. This requires a submodule update for haddock Test Plan: ./validate Reviewers: austin, bgamari, hvr Reviewed By: bgamari Subscribers: carter, rwbarton, thomie GHC Trac Issues: #14312 Differential Revision: https://phabricator.haskell.org/D4080
* testsuite: Bump allocations for T1969 and T5837Ben Gamari2018-02-191-2/+4
| | | | | | | | Sadly it's not immediately obvious where this regression came from: * T5837 started failing on OS X with 0c2350c293b82e4cb24a66e00b904933bdb1c8f3 * It's not clear when T1969 started failing due to the recent out of memory issues on Harbormaster
* Bump text submodule to 1.2.3.0Ben Gamari2018-02-191-0/+0
|
* Bump haskeline submodule to 0.7.4.2Ben Gamari2018-02-191-0/+0
|
* Bump parsec submodule to 0.3.13.0Ben Gamari2018-02-192-1/+1
|
* Bump primitive submodule to 0.6.3.0Ben Gamari2018-02-191-0/+0
|
* Bump stm submodule to 2.4.5.0Ben Gamari2018-02-191-0/+0
|
* Bump pretty submoduleBen Gamari2018-02-191-0/+0
|
* Bump filepath submoduleBen Gamari2018-02-191-0/+0
|
* Bump process submoduleBen Gamari2018-02-191-0/+0
|
* Bump haddock submodule againBen Gamari2018-02-191-0/+0
|
* Increase the amount of parallelism in circleci.Facundo Domínguez2018-02-191-1/+1
| | | | | | | | | | | | Summary: Set THREADS=CPUS+1 in circleci. Reviewers: bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4415
* Rename the types in a GADT constructor in toposorted orderRyan Scott2018-02-184-3/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | Previously, we were extracting the free variables from a GADT constructor in an incorrect order, which caused the type variables for the constructor's type signature to end up in non-toposorted order. Thankfully, rearranging the order of types during renaming makes swift work of this bug. This fixes a regression introduced in commit fa29df02a1b0b926afb2525a258172dcbf0ea460. For whatever reason, that commit also commented out a significant portion of the `T13123` test. This code appears to work, so I've opted to uncomment it. Test Plan: make test TEST=T14808 Reviewers: simonpj, bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, carter GHC Trac Issues: #14808 Differential Revision: https://phabricator.haskell.org/D4413
* StgLint overhaulÖmer Sinan Ağacan2018-02-185-338/+196
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Remove all type checks - Check two STG invariants (no unboxed let bindings, variables defined before used) and post-unarisation invariants. See the module header and #14787. This version validates with `-dstg-lint` added to `GhcStage2HcOpts` and `GhcLibHcOpts` and `EXTRA_HC_OPTS`. Unarise changes: - `unariseConArgBinder` and `unariseFunArgBinder` functions were almost the same; only difference was when unarising fun args we keep void args while in con args we drop them. A new function `unariseArgBinder` added with a `Bool` argument for whether we're unarising a con arg. `unariseConArgBinder` and `unariseFunArgBinder` are now defined as unariseConArgBinder = unarsieArgBinder True -- data con unariseFunArgBinder = unariseArgBinder False -- not data con - A bug in `unariseConArgBinder` and `unariseFunArgBinder` (which are just calls to `unariseArgBinder` now) that invalidated the post-unarise invariants when the argument has single type rep (i.e. `length (typePrimRep x) == 1`) fixed. This isn't a correctness issue (it's fine not to unarise if a variable is already represented as single value), but it triggers StgLint. Test Plan: - Pass testsuite with `-dstg-lint` [done] - Boot stage2 (including libraries) with `-dstg-lint` [done] Reviewers: simonpj, bgamari Reviewed By: bgamari Subscribers: duog, rwbarton, thomie, carter GHC Trac Issues: #14787 Differential Revision: https://phabricator.haskell.org/D4404
* Improve error message for UNPACK/strictness annotations.HE, Tao2018-02-187-3/+35
| | | | | | | | | | | | | | | | | | | Print different error message for improper UNPACK and strictness annotations. Fix Trac #14761. Signed-off-by: HE, Tao <sighingnow@gmail.com> Test Plan: make test TEST="T7210 T14761a T14761b" Reviewers: goldfire, bgamari, RyanGlScott, simonpj Reviewed By: RyanGlScott, simonpj Subscribers: simonpj, goldfire, rwbarton, thomie, carter GHC Trac Issues: #14761 Differential Revision: https://phabricator.haskell.org/D4397
* testsuite: Add newline to test outputDouglas Wilson2018-02-181-2/+2
| | | | | | | | | | Reviewers: bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4389
* CBE: re-introduce bgamari's fixesMichal Terepeta2018-02-181-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | During some recent work on CBE we discovered that `zipWith` is used to check for equality, but that doesn't quite work if lists are of different lengths! This was fixed by bgamari, but unfortunately the fix had to be rolled back due to other changes in CBE in 50adbd7c5fe5894d3e6e2a58b353ed07e5f8949d. Since I wanted to have another look at CBE anyway, we agreed that the first thing to do would be to re-introduce the fix. Sadly I don't have any actual test case that would exercise this. Signed-off-by: Michal Terepeta <michal.terepeta@gmail.com> Test Plan: ./validate Reviewers: bgamari, simonmar Reviewed By: bgamari Subscribers: rwbarton, thomie, carter GHC Trac Issues: #14226 Differential Revision: https://phabricator.haskell.org/D4387
* myThreadId# is trivial; make it an inline primopSimon Marlow2018-02-184-7/+3
| | | | | | | | | | | | | | | The pattern `threadCapability =<< myThreadId` is used a lot in code that uses `hs_try_putmvar`, I want to make it cheaper. Test Plan: validate Reviewers: bgamari, erikd Reviewed By: bgamari Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4381
* Tidy up and consolidate canned CmmReg and CmmGlobalsSimon Marlow2018-02-1813-77/+83
| | | | | | | | | | | | Test Plan: validate Reviewers: bgamari, erikd Reviewed By: bgamari Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4380
* Remove doubled wordsAdam Sandberg Eriksson2018-02-182-4/+3
| | | | | | | | | | Reviewers: bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4368
* Build Haddocks with --quickjumpBen Gamari2018-02-182-0/+1
| | | | | | | | | | | | | | | By request of @alexbiehl. CCing @snowleopard and @alpmestan as the same should be done in Hadrian. Bumps haddock submodule. Reviewers: alexbiehl Reviewed By: alexbiehl Subscribers: rwbarton, thomie, carter, snowleopard, alpmestan, alexbiehl Differential Revision: https://phabricator.haskell.org/D4365
* Add valid refinement substitution suggestions for typed holesMatthías Páll Gissurarson2018-02-189-79/+857
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This adds valid refinement substitution suggestions for typed holes and documentation thereof. Inspired by Agda's refinement facilities, this extends the typed holes feature to be able to search for valid refinement substitutions, which are substitutions that have one or more holes in them. When the flag `-frefinement-level-substitutions=n` where `n > 0` is passed, we also look for valid refinement substitutions, i.e. substitutions that are valid, but adds more holes. Consider the following: f :: [Integer] -> Integer f = _ Here the valid substitutions suggested will be (with the new `-funclutter-valid-substitutions` flag for less verbosity set): ``` Valid substitutions include f :: [Integer] -> Integer product :: forall (t :: * -> *). Foldable t => forall a. Num a => t a -> a sum :: forall (t :: * -> *). Foldable t => forall a. Num a => t a -> a maximum :: forall (t :: * -> *). Foldable t => forall a. Ord a => t a -> a minimum :: forall (t :: * -> *). Foldable t => forall a. Ord a => t a -> a head :: forall a. [a] -> a (Some substitutions suppressed; use -fmax-valid-substitutions=N or -fno-max-valid-substitutions) ``` When the `-frefinement-level-substitutions=1` flag is given, we additionally compute and report valid refinement substitutions: ``` Valid refinement substitutions include foldl1 _ :: forall (t :: * -> *). Foldable t => forall a. (a -> a -> a) -> t a -> a foldr1 _ :: forall (t :: * -> *). Foldable t => forall a. (a -> a -> a) -> t a -> a head _ :: forall a. [a] -> a last _ :: forall a. [a] -> a error _ :: forall (a :: TYPE r). GHC.Stack.Types.HasCallStack => [Char] -> a errorWithoutStackTrace _ :: forall (a :: TYPE r). [Char] -> a (Some refinement substitutions suppressed; use -fmax-refinement-substitutions=N or -fno-max-refinement-substitutions) ``` Which are substitutions with holes in them. This allows e.g. beginners to discover the fold functions and similar. We find these refinement suggestions by considering substitutions that don't fit the type of the hole, but ones that would fit if given an additional argument. We do this by creating a new type variable with newOpenFlexiTyVarTy (e.g. `t_a1/m[tau:1]`), and then considering substitutions of the type `t_a1/m[tau:1] -> v` where `v` is the type of the hole. Since the simplifier is free to unify this new type variable with any type (and it is cloned before each check to avoid side-effects), we can now discover any identifiers that would fit if given another identifier of a suitable type. This is then generalized so that we can consider any number of additional arguments by setting the `-frefinement-level-substitutions` flag to any number, and then considering substitutions like e.g. `foldl _ _` with two additional arguments. This can e.g. help beginners discover the `fold` functions. This could also help more advanced users figure out which morphisms they can use when arrow chasing. Then you could write `m = _ . m2 . m3` where `m2` and `m3` are some morphisms, and not only get exact fits, but also help in finding morphisms that might get you a little bit closer to where you want to go in the diagram. Reviewers: bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4357
* Implement stopgap solution for #14728Ryan Scott2018-02-186-3/+92
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | It turns out that one can produce ill-formed Core by combining `GeneralizedNewtypeDeriving`, `TypeInType`, and `TypeFamilies`, as demonstrated in #14728. The root of the problem is allowing the last parameter of a class to appear in a //kind// of an associated type family, as our current approach to deriving associated type family instances simply doesn't work well for that situation. Although it might be possible to properly implement this feature today (see https://ghc.haskell.org/trac/ghc/ticket/14728#comment:3 for a sketch of how this might work), there does not currently exist a performant implementation of the algorithm needed to accomplish this. Until such an implementation surfaces, we will make this corner case of `GeneralizedNewtypeDeriving` an error. Test Plan: make test TEST="T14728a T14728b" Reviewers: bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, carter GHC Trac Issues: #14728 Differential Revision: https://phabricator.haskell.org/D4402
* base: Fix changelog entry for openTempFileBen Gamari2018-02-181-3/+2
| | | | This change is present in 4.11.0.0.
* circleci: Add nightly build using devel2 flavourBen Gamari2018-02-181-0/+19
|
* Fix #14811 by wiring in $tcUnit#Ryan Scott2018-02-163-3/+8
| | | | | | | | | | | | | | | | | Previously, we were skipping over `$tcUnit#` entirely when wiring in `Typeable` tycons, resulting in #14811. Easily fixed. Test Plan: make test TEST=T14811 Reviewers: bgamari, dfeuer Reviewed By: dfeuer Subscribers: dfeuer, rwbarton, thomie, carter GHC Trac Issues: #14811 Differential Revision: https://phabricator.haskell.org/D4414
* Move `iserv` into `utils` and change package name from `iserv-bin` to `iserv`Moritz Angermann2018-02-1521-108/+619
| | | | | | | | | | | | | | | | This is done for consistency. We usually call the package file the same name the folder has. The move into `utils` is done so that we can move the library into `libraries/iserv` and the proxy into `utils/iserv-proxy` and then break the `iserv.cabal` apart. This will make building the cross compiler with TH simpler, because we can build the library and proxy as separate packages. Reviewers: bgamari, simonmar, goldfire, erikd Reviewed By: simonmar Subscribers: tdammers, rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4377
* Get eqTypeRep to inlineDavid Feuer2018-02-151-3/+11
| | | | | | | | | | | | | | | | | | | | GHC didn't inline `eqTypeRep`, presumably because it ended up being too big. This was unfortunate because it produces a `Maybe`, which will almost always be scrutinized immediately. Split `eqTypeRep` into a worker and a tiny wrapper, and mark the wrapper `INLINABLE`. This change actually seems to reduce Core size, at least in a small test. Reviewers: hvr, bgamari, mpickering Reviewed By: mpickering Subscribers: mpickering, rwbarton, thomie, carter GHC Trac Issues: #14790 Differential Revision: https://phabricator.haskell.org/D4405
* rts.cabal.in: advertise profiling flavours of libraries, behind a flagAlp Mestanogullari2018-02-151-1/+12
| | | | | | | | | | | | | | | | | | | | | | The make build system appears to be doing a bit of magic in order to supply the profiled flavours of libHSrts and libCffi, as they're not advertised in the 'extra-library-flavours' field of rts.cabal.in. This patch explicitly advertises _p and _thr_p flavours of the RTS library and libCffi, but only when the RTS is configured with the (newly introduced) 'profiling' flag. This is necessary for Hadrian, as a branch (soon to be merged) does away with ghc-cabal and relies just on Cabal to get package information. Without this patch, Cabal can never inform us that _p and _thr_p flavours should be built (and registered in the package db) as well, which obviously prevents us from building a profiled GHC. Reviewers: bgamari, erikd, simonmar Reviewed By: bgamari Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4409
* Update .cabal files for Cabal 2.1Moritz Angermann2018-02-154-9/+9
| | | | | | | | | | | | | | | cabal introduces SPDX identifier, and as such we need to change the BSD3 license name. Also the >= qualifier is no longer prefered. Test Plan: ./validate Reviewers: bgamari, erikd, simonmar Reviewed By: bgamari Subscribers: alpmestan, rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4406
* Adds `smp` flag to rts.cabal.Moritz Angermann2018-02-151-0/+4
| | | | | | | | | | Reviewers: bgamari, erikd, simonmar Reviewed By: simonmar Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4393
* adds -latomic to. ghc-primMoritz Angermann2018-02-156-24/+38
| | | | | | | | | | Reviewers: bgamari, hvr Reviewed By: bgamari Subscribers: erikd, hvr, rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4378
* Various documentation improvementsSergey Vinokurov2018-02-144-6/+6
| | | | | | | | | | | | | | | * Fix missing code example in changelog for 8.4.1 * List 'setEnv' as opposite of 'getEnv' It seems best to direct users to use 'System.Environment.setEnv' rather than 'System.Posix.Env.putEnv'. This is due to 'setEnv' being located in the same module as 'getEnv' and my virtue of working on Windows platform, whereas 'putEnv' does not have that quality because it's part of the 'unix' package. * Reflect in docs the fact that 'readMVar' is not a composition of 'takeMVVar' and 'putMVar' any more
* Raise parse error for `data T where`.HE, Tao2018-02-1310-10/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | Empty GADTs data declarations can't be identified in type checker. This patch adds additional checks in parser and raise a parse error when encounter empty GADTs declarations but extension `GADTs` is not enabled. Only empty declarations are checked in parser to avoid affecting existing error messages related to missing GADTs extension. This patch should fix issue 8258. Signed-off-by: HE, Tao <sighingnow@gmail.com> Test Plan: make test TEST="T8258 T8258NoGADTs" Reviewers: bgamari, mpickering, alanz, RyanGlScott Reviewed By: bgamari, RyanGlScott Subscribers: adamse, RyanGlScott, rwbarton, thomie, mpickering, carter GHC Trac Issues: #8258 Differential Revision: https://phabricator.haskell.org/D4350
* Fix tests broken by c9a88db3ac4f1c3e97e3492ebe076f2df6463540Ben Gamari2018-02-133-7/+10
|
* Collect CCs in CorePrep, including CCs in unfoldingsÖmer Sinan Ağacan2018-02-1310-429/+258
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch includes two changes: 1. Move cost centre collection from `SCCfinal` to `CorePrep`, to be able to collect cost centres in unfoldings. `CorePrep` drops unfoldings, so that's the latest stage in the compilation pipeline for this. After this change `SCCfinal` no longer collects all cost centres, but it still generates & collects CAF cost centres + updates cost centre stacks of `StgRhsClosure` and `StgRhsCon`s. This fixes #5889. 2. Initialize cost centre stack fields of `StgRhs` in `coreToStg`. With this we no longer need to update cost centre stack fields in `SCCfinal`, so that module is removed. Cost centre initialization explained in Note [Cost-centre initialization plan]. Because with -fcaf-all we need to attach a new cost-centre to each CAF, `coreTopBindToStg` now returns `CollectedCCs`. Test Plan: validate Reviewers: simonpj, bgamari, simonmar Reviewed By: simonpj, bgamari Subscribers: rwbarton, thomie, carter GHC Trac Issues: #5889 Differential Revision: https://phabricator.haskell.org/D4325
* Make ($!) representation-polymorphicDavid Feuer2018-02-123-2/+8
| | | | | | | | | | | | | Now that `($)` is representation-polymorphic, `($!)` should surely follow suit. Reviewers: hvr, bgamari, simonpj Reviewed By: bgamari, simonpj Subscribers: simonpj, rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4382
* Evac.c: remove unused CPP guardÖmer Sinan Ağacan2018-02-121-3/+0
| | | | `NO_PROMOTE_THUNKS` is never defined
* Simplify Foreign.Marshal.Alloc functions with ScopedTypeVariablesÖmer Sinan Ağacan2018-02-101-23/+12
| | | | | | | | | | Reviewers: hvr, bgamari, RyanGlScott Reviewed By: RyanGlScott Subscribers: RyanGlScott, rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4401
* Fix isDroppableCt (Trac #14763)Simon Peyton Jones2018-02-087-127/+148
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When finishing up an implication constraint, it's a bit tricky to decide which Derived constraints to retain (for error reporting) and which to discard. I got this wrong in commit f20cf982f126aea968ed6a482551550ffb6650cf (Remove wc_insol from WantedConstraints) The particular problem in Trac #14763 was that we were reporting as an error a fundep-generated constraint (ex ~ T) where 'ex' is an existentially-bound variable in a pattern match. But this isn't really an error at all. This patch fixes the problem. Indeed, since I had to understand this rather tricky code, I took the opportunity to clean it up and document better. See isDroppableCt :: Ct -> Bool and Note [Dropping derived constraints] I also removed wl_deriv altogether from the WorkList data type. It was there in the hope of gaining efficiency by not even processing lots of derived constraints, but it has turned out that most derived constraints (notably equalities) must be processed anyway; see Note [Prioritise equalities] in TcSMonad. The two are coupled because to decide which constraints to put in wl_deriv I was using another variant of isDroppableCt. Now it's much simpler -- and perhaps even more efficient too.
* rts: fix barf format attributeDouglas Wilson2018-02-081-1/+1
| | | | | | | | | | | | Summary: See definition of PRINTF above the change Reviewers: bgamari, erikd, simonmar, Phyx Reviewed By: Phyx Subscribers: Phyx, rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4392
* Use SPDX syntax in rts/package.conf.inHerbert Valerio Riedel2018-02-071-1/+1
| | | | | | This was an oversight from 2671cccde749ed64129097358f81bff43480cdb9 as it wasn't obvious to assume one would go the trouble to manually construct the pkg-db entries... :-)
* Fix solveOneFromTheOther for RecursiveSuperclassesSimon Peyton Jones2018-02-078-43/+119
| | | | | | | | | | | | | | | | | | | This patch fixes the redundant superclass expansion in Trac #14774. The main change is to fix TcInterac.solveOneFromTheOther, so that it does not prefer a work-item with a binding if that binding transitively depends on the inert item we are comparing it with. Explained in Note [Replacement vs keeping] in TcInert, esp item (c) of the "Constraints coming from the same level" part. To make this work I refactored out a new function TcEvidence.findNeededEvVars, which was previously buried inside TcSimplify.neededEvVars. I added quite a few more comments and signposts about superclass expansion.
* Comments onlySimon Peyton Jones2018-02-072-4/+14
|