<div dir="ltr">I can't say for sure, but this could be related to #4012.<div><br></div><div>The order that things appear in lists often depends on the way that uniques get allocated. I know for sure that inferred type signatures are nondeterministic right now, see [1] for an attempt to fix it.</div><div><br></div><div>The easiest way to check if it affects you is to reverse the order of allocated uniques by passing `-dunique-increment=-1` on the command line.</div><div><br></div><div>If you rely on orders lining up I'd also recommend testing with it. See #11148, #11362, #11361 for examples where it failed with reversed uniques.</div><div><br></div><div>[1] <a href="https://phabricator.haskell.org/D1924">https://phabricator.haskell.org/D1924</a></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-04-13 15:12 GMT+01:00 Ryan Scott <span dir="ltr"><<a href="mailto:ryan.gl.scott@gmail.com" target="_blank">ryan.gl.scott@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">> I thought that inferred foralls are Invisible binders (see Note [TyBinders and VisibilityFlags]); and you can't use visible type application for Invisible binders.<br>
<br>
</span>In this particular case, j, k, l, x, y, and z aren't invisible<br>
binders, but rather specified ones. And you certainly can use visible<br>
type application on specified binders; this is important for my use<br>
case.<br>
<span class=""><br>
> Also I don't understand why Ryan needs a reliable ordering.<br>
<br>
</span>I guess I should elaborate on what exactly my use case is. I'm trying<br>
to fix Trac #10604 (i.e., make Generic1 poly-kinded). As part of this<br>
effort, I need to generalize the (:.:) type [2] from GHC.Generics like<br>
so:<br>
<br>
    newtype (:.:) (f :: k2 -> *) (g :: k1 -> k2) (p :: k1) = Comp1 (f (g a))<br>
<br>
I also need to change a part of TcGenGenerics where I apply the (:.:)<br>
type constructor to some other types [3]. Previously, (:.:) was<br>
monokinded, so I only needed to apply (:.:) to some type arguments.<br>
But now that (:.:) is poly-kinded, I need to also apply it to two kind<br>
arguments!<br>
<br>
Now for the interesting part: in which order do you give the kind<br>
arguments for (:.:)? I originally thought the order in which you'd do<br>
it would be [k2,k1] (since that's the order they appear in the<br>
definition from left to right), but in reality, it's actually [k1,k2]<br>
due to the reasons mentioned earlier in this thread. This is quite<br>
bewildering, especially since in GHC 7.10.3, it was the former order,<br>
but in GHC 8.0 it's the latter order. Who's to say that the order<br>
won't change again in a later GHC, and then deriving Generic1 will<br>
silently break as a result?<br>
<br>
So at this point, I see my options as follows:<br>
<br>
1. Change the definition of (:.:) to use the GADT syntax that Richard<br>
proposed. This would give a stable ordering for the kind variables,<br>
but I'm loathe to make such a drastic change to the surface syntax to<br>
fix a silly problem like this.<br>
2. Investigate a fix to the implicitly quantified ordering issue. I'm<br>
not sure where the issue could lie, and just from looking at<br>
extract_lty [4], it's not clear at all what causes the current<br>
ordering.<br>
3. Live with the issue, and just change the code in TcGenGenerics if<br>
the kind variable ordering ever changes. This is a bummer, but looks<br>
like the simplest option.<br>
<br>
Ryan S.<br>
-----<br>
[1] <a href="https://ghc.haskell.org/trac/ghc/ticket/10604" rel="noreferrer" target="_blank">https://ghc.haskell.org/trac/ghc/ticket/10604</a><br>
[2] <a href="http://hackage.haskell.org/package/base-4.8.2.0/docs/GHC-Generics.html#t::" rel="noreferrer" target="_blank">http://hackage.haskell.org/package/base-4.8.2.0/docs/GHC-Generics.html#t::</a>.:<br>
[3] <a href="http://git.haskell.org/ghc.git/blob/d81cdc227cd487659995ddea577214314c9b4b97:/compiler/typecheck/TcGenGenerics.hs#l526" rel="noreferrer" target="_blank">http://git.haskell.org/ghc.git/blob/d81cdc227cd487659995ddea577214314c9b4b97:/compiler/typecheck/TcGenGenerics.hs#l526</a><br>
[4] <a href="http://git.haskell.org/ghc.git/blob/d81cdc227cd487659995ddea577214314c9b4b97:/compiler/rename/RnTypes.hs#l1611" rel="noreferrer" target="_blank">http://git.haskell.org/ghc.git/blob/d81cdc227cd487659995ddea577214314c9b4b97:/compiler/rename/RnTypes.hs#l1611</a><br>
<div class="HOEnZb"><div class="h5">_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</div></div></blockquote></div><br></div>