Conversation
14e3c26 to
dd87fd5
Compare
1f62c16 to
4df320d
Compare
|
At long last, I believe this is finally ready. A special thanks to @eddywestbrook for contributing patches to fix the numerous I've also added @chameco and @kquick as reviewers for everything else in this patch. It touches a lot of different parts of the code, but it's mostly a collection of small changes. Let me know if anything looks especially surprising! |
eddywestbrook
left a comment
There was a problem hiding this comment.
After going through these changes in a relatively high level of detail, the changes overall look good and make sense, though I haven't been able to look at absolutely everything. At a high level, the changes mostly are to address the new requirement that pattern-matching always satisfies coverage, and raise explicit errors when an unexpected pattern is matched.
9e96dab to
8d7c9bc
Compare
kquick
left a comment
There was a problem hiding this comment.
All the trailing whitespace and corresponding removals are unfortunate, but for the most part the changes here are pretty isomorphic to the original implicit behavior, so I don't see anything concerning.
This contains a variety of minor changes needed to make `saw` and its supporting libraries compile with GHC 9.2: * One place in `heapster-saw` matches on a GADT using a `let` binding, which no longer typechecks in GHC 9.2. While somewhat mysterious, using `let` bindings to match on GADTs is fragile anyway, so I opted to simply replace this with a monadic `do` match, which does not exhibit the same fragility. * GHC now includes `-Wincomplete-uni-patterns` in `-Wall` as of 9.2, so much of this patch is dedicated to silencing these sorts of warnings, usually by adding explicit fall-through cases for partial pattern matches. * GHC now inclues `-Wnoncanonical-monad-instances` in `-Wall` as of 9.2, so I had to refactor some `Applicative`/`Monad` instances to fix these warnings. * GHC 9.2 now defines `readBin` in `Numeric`, which clashes with a function of the same name in `SAWScript.Lexer`. Using explicit imports avoids this. * GHC's pattern-match coverage checker is smarter in 9.2 (see [here](https://gitlab.haskell.org/ghc/ghc/-/wikis/migration/9.2?version_id=63085dd8a5b56370571bda428848e7098765f7f8#improved-pattern-match-coverage-checker)), so I had to use `EmptyCase` to silence some of the new `-Wincomplete-patterns` warnings that were uncovered in `heapster-saw`.
This version does not need to install `cabal-plan`, which avoids build plan issues.
Not only is pinning the `cabal` version good practice, but `cabal` 3.8.1.0 in particular likely contains a bugfix needed to make `cabal list-bin` work as expected.
This contains a variety of minor changes needed to make
sawand its supporting libraries compile with GHC 9.2:heapster-sawmatches on a GADT using aletbinding, which no longer typechecks in GHC 9.2. While somewhat mysterious, usingletbindings to match on GADTs is fragile anyway, so I opted to simply replace this with a monadicdomatch, which does not exhibit the same fragility.-Wincomplete-uni-patternsin-Wallas of 9.2, so much of this patch is dedicated to silencing these sorts of warnings, usually by adding explicit fall-through cases for partial pattern matches.-Wnoncanonical-monad-instancesin-Wallas of 9.2, so I had to refactor someApplicative/Monadinstances to fix these warnings.readBininNumeric, which clashes with a function of the same name inSAWScript.Lexer. Using explicit imports avoids this.EmptyCaseto silence some of the new-Wincomplete-patternswarnings that were uncovered inheapster-saw.