That way of saying it clarifies the expectations for me. And doesn't seem too burdensome for the plugin author.

Thus I think this ticket could be resolved by updating the documentation. (Though I still would like for a plugin to be able to request the flattened Wanteds. Separate ticket?)

In particular this sentence in the User Guide

"[The plugin] will be invoked at two points in the constraint solving process: after simplification of given constraints, and after unflattening of wanted constraints."

would benefit from some elaboration. Specifically, "unflattening of wanted constraints" is somewhat ambiguous: until you spelled it out, I was thinking that if a constraint is flattened, it doesn't have any flattening variables in it. However, I'm inferring here that the jargon is used to mean that "unflattening a wanted constraint" only eliminates fmvs, possibly leaving fsks behind? That's what I've been confused about (until now, I think). Thanks.

On Tue, Jun 5, 2018, 01:48 GHC <ghc-devs@haskell.org> wrote:
#15147: Type checker plugin receives Wanteds that are not completely unflattened
-------------------------------------+-------------------------------------
        Reporter:  nfrisby           |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:  8.6.1
       Component:  Compiler (Type    |              Version:  8.4.1
  checker)                           |             Keywords:
      Resolution:                    |  TypeCheckerPlugins
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by simonpj):

 > Perhaps I'm misunderstanding something

 I didn't express it very clearly.  As it stands, the Given CFunEqCan's
 remain, and hence so do the fsks.  The Wanted CFunEqCans are removed
 (currently) along with the fmvs.

 So yes, currently Wanteds can contain fsks, whose definition is given by a
 CFunEqCan.  I would have thought that most plugins would not find it hard
 to deal with that.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15147#comment:14>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler