diff options
| author | Sebastian Graf <sebastian.graf@kit.edu> | 2019-05-22 18:46:37 +0200 |
|---|---|---|
| committer | Sebastian Graf <sgraf1337@gmail.com> | 2019-06-05 00:19:16 +0200 |
| commit | b8dd271855dde17a19553412e9e817195c2b5362 (patch) | |
| tree | a9573860bde02c8c1fd3835ba5c90f2d7774f0f5 /compiler/ghc.cabal.in | |
| parent | 799b1d26977b5841aa580e07c8f8e65356eed785 (diff) | |
| download | haskell-wip/pmcheck-refuts.tar.gz | |
TmOracle: Replace negative term equalities by refutable PmAltConswip/pmcheck-refuts
The `PmExprEq` business was a huge hack and was at the same time vastly
too powerful and not powerful enough to encode negative term equalities,
i.e. facts of the form "forall y. x ≁ Just y".
This patch introduces the concept of 'refutable shapes': What matters
for the pattern match checker is being able to encode knowledge of the
kind "x can no longer be the literal 5". We encode this knowledge in a
`PmRefutEnv`, mapping a set of newly introduced `PmAltCon`s (which are
just `PmLit`s at the moment) to each variable denoting above
inequalities.
So, say we have `x ≁ 42 ∈ refuts` in the term oracle context and
try to solve an equality like `x ~ 42`. The entry in the refutable
environment will immediately lead to a contradiction.
This machinery renders the whole `PmExprEq` and `ComplexEq` business
unnecessary, getting rid of a lot of (mostly dead) code.
See the Note [Refutable shapes] in TmOracle for a place to start.
Metric Decrease:
T11195
Diffstat (limited to 'compiler/ghc.cabal.in')
| -rw-r--r-- | compiler/ghc.cabal.in | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/compiler/ghc.cabal.in b/compiler/ghc.cabal.in index e2d789b172..e8e6bf7317 100644 --- a/compiler/ghc.cabal.in +++ b/compiler/ghc.cabal.in @@ -327,6 +327,7 @@ Library MkCore PprCore PmExpr + PmPpr TmOracle Check Coverage |
