I don't think this has to do with topological sorting so much as inferring the 
order of undeclared (but written) kind variables. You could, with -XTypeInType, 
always make the order explicit:

> data T :: forall j k l x y z. (j -> k -> l) -> (x, y, z) -> * where MkT :: T 
> a b

The order of these variables is derived from the extractHsTyRdrTyVars function 
and friends in RnTypes. I'm sure you could look closely at those functions and 
see where the behavior is coming from. It's very likely an improvement can be 
found here.

Richard

On Apr 12, 2016, at 7:47 PM, Ryan Scott <[email protected]> wrote:

> I'm doing some work in GHC that requires explicitly applying kinds to
> the kind variables of a data type. I noticed that the order in which
> the implicit kind variables are sorted is not as predictable as I
> originally thought. To illustrate what I mean, here is a GHCi session
> I had recently (with GHC HEAD):
> 
>    $ /opt/ghc/head/bin/ghci -XTypeInType
>    GHCi, version 8.1.20160412: http://www.haskell.org/ghc/  :? for help
>    Loaded GHCi configuration from /home/ryanglscott/.ghci
>> data T (a :: j -> k -> l) (b :: (x, y, z)) = MkT
>> :t MkT
>    MkT
>      :: forall x y z l k j (a :: j -> k -> l) (b :: (x, y, z)). T a b
> 
> Much to my surprise, the order of the kind variables wasn't [j, k, l,
> x, y, z], but rather [x, y, z, l, k, j]! I know that type variables
> are sorted with a stable topological sort [1], but there must be some
> other subtlety that I'm missing. How does GHC come up with the order
> [x, y, z, l, k, j]?
> 
> Ryan S.
> -----
> [1] 
> http://git.haskell.org/ghc.git/blob/d81cdc227cd487659995ddea577214314c9b4b97:/docs/users_guide/glasgow_exts.rst#l8708
> _______________________________________________
> ghc-devs mailing list
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

_______________________________________________
ghc-devs mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to