Hooray Sebastian! Somehow, I knew cluing you into this conundrum would help find a solution. The approach you describe sounds quite plausible.
Yet: types *do* matter, of course. So, I suppose the trick is this: have the COMPLETE sets operate independent of types, but then use types in the PM-checker when determining impossible cases? And, about your idea for having pattern synonyms store pointers to their COMPLETE sets: I think data constructors can also participate. But maybe there is always at least one pattern synonym (which would be a reasonable restriction), so I guess you can look at the pattern-match as a whole and use the pattern synonym to find the relevant COMPLETE set(s). Thanks for taking a look! Richard > On Aug 31, 2020, at 4:23 PM, Sebastian Graf <sgraf1...@gmail.com> wrote: > > Hi Richard, > > Am Mo., 31. Aug. 2020 um 21:30 Uhr schrieb Richard Eisenberg > <r...@richarde.dev <mailto:r...@richarde.dev>>: > Hi Sebastian, > > I enjoyed your presentation last week at ICFP! > > Thank you :) I'm glad you liked it! > > This thread > (https://ghc-devs.haskell.narkive.com/NXBBDXg1/suppressing-false-incomplete-pattern-matching-warnings-for-polymorphic-pattern-synonyms > > <https://ghc-devs.haskell.narkive.com/NXBBDXg1/suppressing-false-incomplete-pattern-matching-warnings-for-polymorphic-pattern-synonyms>) > played out before you became so interested in pattern-match coverage. I'd be > curious for your thoughts there -- do you agree with the conclusions in the > thread? > > I vaguely remember reading this thread. As you write there > <https://ghc-devs.haskell.narkive.com/NXBBDXg1/suppressing-false-incomplete-pattern-matching-warnings-for-polymorphic-pattern-synonyms#post9> > > And, while I know it doesn't work today, what's wrong (in theory) with > > {-# COMPLETE LL #-} > > No types! (That's a rare thing for me to extol...) > > I feel I must be missing something here. > > Without reading the whole thread, I think that solution is very possible. The > thread goes on to state that we currently attach COMPLETE sets to type > constructors, but that is only an implementational thing. I asked Matt (who > implemented it) somewhere and he said the only reason to attach it to type > constructors was because it was the easiest way to implement serialisation to > interface files. > > The thread also mentions that type-directed works better for the > pattern-match checker. In fact I disagree; we have to thin out COMPLETE sets > all the time anyway when new type evidence comes up, for example. It's quite > a hassle to find all the COMPLETE sets of the type constructors a given type > can be "represented" (I mean equality modulo type family reductions here) as. > I'm pretty sure it's broken in multiple ways, as #18276 > <https://gitlab.haskell.org/ghc/ghc/-/issues/18276> points out. > > Disregarding a bit of busy work for implementing serialisation to interface > files, it's probably far simpler to give each COMPLETE set a Name/Unique and > refer to them from the pattern synonyms that mention them (we'd have to get > creative for orphans, though). The relation is quite like between a type > class instance and the type in its head. A more worked example is here: > https://gitlab.haskell.org/ghc/ghc/-/issues/18277#note_287827 > <https://gitlab.haskell.org/ghc/ghc/-/issues/18277#note_287827> > > So, it's on my longer term TODO list to fix this. > > > My motivation for asking is https://github.com/conal/linalg/pull/54 > <https://github.com/conal/linalg/pull/54> (you don't need to read the whole > thing), which can be boiled down to a request for a COMPLETE pragma that > works at a polymorphic result type. (Or a COMPLETE pragma written in a module > that is not the defining module for a pattern synonym.) > https://gitlab.haskell.org/ghc/ghc/-/issues/14422 > <https://gitlab.haskell.org/ghc/ghc/-/issues/14422> describes a similar, but > even more challenging scenario. > > I'll answer in the thread. (Oh, you also found #14422.) I think the approach > above will also fix #14422. > > Do you see any ways forward here? > . > > Thanks! > Richard > > Maybe I'll give it a try tomorrow.
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs