<div dir="ltr">No, the type instance must match the class heading.<div><br></div><div>I <b>can</b> use</div><div><br></div><div><font face="monospace, monospace">instance Foo [_a] where</font></div><div><font face="monospace, monospace">  type Bar [_a] = Int</font></div><div><font face="monospace, monospace">  whatever = ... where</font></div><div><font face="monospace, monospace">    bar :: _a -> Int</font></div><div><font face="monospace, monospace">    bar = ...</font></div><div><br></div><div>but that is a needlessly messy thing to request of every package everywhere.</div><div><br></div><div>The arguments being pattern matched in a class associated type aren't really just bindings, they reference the surrounding context and so shouldn't be treated the same as the basic type family case.</div><div><br></div><div>It isn't just the class associated type being mangled, it is every type variable that comes from the instance head in the entire body of every instance that happens to have a class associated type in it.</div><div><br></div><div>Note that in the example above I added another ScopedTypeVariables reference to the same parameter, but it _also_ must be mangled despite having absolutely nothing to do with the class associated type.</div><div><br></div><div>The existing convention has worked since 6.10 or so, when all of this stuff was invented in the first place, and the new state of affairs is clearly worse.</div><div><br></div><div>-Edward</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jan 17, 2016 at 3:16 AM, Andrew Farmer <span dir="ltr"><<a href="mailto:xichekolas@gmail.com" target="_blank">xichekolas@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Can't you just:</p>
<p dir="ltr">instance Foo [a] where<br>
  type Bar [_a] = Int</p>
<p dir="ltr">(At least I think I did that somewhere...)</p><div class="HOEnZb"><div class="h5">
<div class="gmail_quote">On Jan 16, 2016 9:24 PM, "Edward Kmett" <<a href="mailto:ekmett@gmail.com" target="_blank">ekmett@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">As a data point I now get thousands of occurrences of this warning across my packages.<div><br></div><div>It is quite annoying.</div><div><br></div><div><font face="monospace, monospace">class Foo a where</font></div><div><font face="monospace, monospace">  type Bar a</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">instance Foo [a] where</font></div><div><font face="monospace, monospace">  type Bar [a] = Int</font></div><div><font face="monospace, monospace"><br></font></div><div>is enough to trigger it.</div><div><br></div><div>And you can't turn it off by using _ as</div><div><p><font face="monospace, monospace">instance Foo [_] where<br>  type Bar [_] = Int</font></p><p>isn't legal.<br></p><p>I've been avoiding it for now by using</p><p><font face="monospace, monospace"><span>  </span><span>if</span><span> </span><span>impl</span><span>(</span><span>ghc</span><span> </span><span>>=</span><span> 8)</span></font></p><p>








</p><p><font face="monospace, monospace"><span>    </span><span>ghc-options</span><span>: -fno-warn-unused-matches</span></font></p><p><span><font face="arial, helvetica, sans-serif">but this is a pretty awful addition to this warning as it stands.</font></span></p></div><div>-Edward</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 11, 2016 at 2:12 PM, Henning Thielemann <span dir="ltr"><<a href="mailto:lemming@henning-thielemann.de" target="_blank">lemming@henning-thielemann.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><br>
On Mon, 11 Jan 2016, Richard Eisenberg wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Jan 9, 2016, at 6:44 PM, Henning Thielemann <<a href="mailto:lemming@henning-thielemann.de" target="_blank">lemming@henning-thielemann.de</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
instance (Natural n) => Num.Integer (Un n) where<br>
   type Repr (Un _n) = Unary<br>
<br>
<br>
GHC-7.6.3 and GHC-7.4.2 complain:<br>
   Type indexes must match class instance head<br>
   Found `Un _n' but expected `Un n'<br>
   In the type synonym instance declaration for `Num.Repr'<br>
   In the instance declaration for `Num.Integer (Un n)'<br>
<br>
<br>
GHC-7.8.4, GHC-7.10.3 and GHC-8.0 are happy with the difference.<br>
</blockquote>
<br>
I'm surprised this is accepted at all. Looks like hogwash to me. I think you should post a bug report.<br>
</blockquote>
<br></span>
Ok, but then GHC must not warn about the unused argument of Repr.<div><div><br>
_______________________________________________<br>
Glasgow-haskell-users mailing list<br>
<a href="mailto:Glasgow-haskell-users@haskell.org" target="_blank">Glasgow-haskell-users@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users</a><br>
</div></div></blockquote></div><br></div>
<br>_______________________________________________<br>
Glasgow-haskell-users mailing list<br>
<a href="mailto:Glasgow-haskell-users@haskell.org" target="_blank">Glasgow-haskell-users@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users</a><br>
<br></blockquote></div>
</div></div></blockquote></div><br></div>