That way of saying it clarifies the expectations for me. And doesn't seem too burdensome for the plugin author.<div><br></div><div>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?)</div><div><br></div><div>In particular this sentence in the User Guide</div><div><br></div><div>"[The plugin] will be invoked at two points in the constraint solving process: after simplification of given constraints, and after unflattening of wanted constraints."</div><div><br></div><div>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.<br><br><div class="gmail_quote"><div dir="ltr">On Tue, Jun 5, 2018, 01:48 GHC <<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">#15147: Type checker plugin receives Wanteds that are not completely unflattened<br>
-------------------------------------+-------------------------------------<br>
Reporter: nfrisby | Owner: (none)<br>
Type: bug | Status: new<br>
Priority: normal | Milestone: 8.6.1<br>
Component: Compiler (Type | Version: 8.4.1<br>
checker) | Keywords:<br>
Resolution: | TypeCheckerPlugins<br>
Operating System: Unknown/Multiple | Architecture:<br>
| Unknown/Multiple<br>
Type of failure: None/Unknown | Test Case:<br>
Blocked By: | Blocking:<br>
Related Tickets: | Differential Rev(s):<br>
Wiki Page: |<br>
-------------------------------------+-------------------------------------<br>
<br>
Comment (by simonpj):<br>
<br>
> Perhaps I'm misunderstanding something<br>
<br>
I didn't express it very clearly. As it stands, the Given CFunEqCan's<br>
remain, and hence so do the fsks. The Wanted CFunEqCans are removed<br>
(currently) along with the fmvs.<br>
<br>
So yes, currently Wanteds can contain fsks, whose definition is given by a<br>
CFunEqCan. I would have thought that most plugins would not find it hard<br>
to deal with that.<br>
<br>
-- <br>
Ticket URL: <<a href="http://ghc.haskell.org/trac/ghc/ticket/15147#comment:14" rel="noreferrer" target="_blank">http://ghc.haskell.org/trac/ghc/ticket/15147#comment:14</a>><br>
GHC <<a href="http://www.haskell.org/ghc/" rel="noreferrer" target="_blank">http://www.haskell.org/ghc/</a>><br>
The Glasgow Haskell Compiler<br>
</blockquote></div></div>