For the ghc-prim:PrimopWrappers module, GHC generates some External
Core bindings that look like:

ghc-prim:GHC.PrimopWrappers.touch# :: %forall t . t ->
                                                           (State# RealWorld)
                                                           -> (State#
RealWorld) =
     ghc-prim:GHC.Prim.touch#;

But this doesn't look right, because GHC.Prim.touch# has type:
%forall (t::?) . t -> (State# RealWorld) -> (State# RealWorld)

Or at least it's declared that way in primops.txt. But the GHC
typechecker seems to think it has type:
%forall (t::*) . t -> (State# RealWorld) -> (State# RealWorld)
at least based on looking at the output of -ddump-tc-trace.

So is there some sort of implicit subkinding going on that I'm not
understanding?  I would think that if the intention is for the wrapper
for touch# to require a type argument with kind *, then that would be
expressed by writing its body as (Prim.touch# t), not by giving it a
type signature that doesn't match the body type.

Thanks,
Tim

-- 
Tim Chevalier * http://cs.pdx.edu/~tjc * Often in error, never in doubt
"You can't learn everything you need to know legally."--John Irving

_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to