On 4/13/08, Tim Chevalier <[EMAIL PROTECTED]> wrote:
> For other reasons, I decided it was better to re-eta-expand newtype
>  declarations before printing out External Core, and this fixed the
>  problem I described below. But I'd still be curious whether you agree
>  that something mildly disturbing is going on here (the disturbing
>  thing can be summarized as: eta-contracting a type fails to preserve
>  kinds).

One more comment and then I'll quit talking to myself: Actually,
there's still a problem even if External Core requires newtype
coercions to be declared in their fully-applied form.  Consider the
following (from compiling Control.Monad.Instances with -fext-core):

ControlziMonadziInstances.zdf4 :: %forall r . GHCziBase.ZCTFunctor
                                                      (GHCziPrim.ZLzmzgZR r) =
    %cast (\ @ r @ a @ b -> GHCziBase.zi @ a @ b @ r)
    (%forall r . GHCziPrim.sym
                GHCziBase.ZCCoZCTFunctor
                   (GHCziPrim.ZLzmzgZR r))

In particular, the cast (sym :TFunctor ((->) r)) is not kind-correct,
because -- similarly to the example I originally gave -- :TFunctor has
kind (*->*), but ((->) r) has kind (?->*). And indeed, it's not really
true that :TFunctor and ((->) r) are interchangeable, because the
latter could be applied to either an lifted or an unlifted type
argument, whereas the former must be applied to a lifted type.

Unlike with the previous example, I don't see an easy way to avoid
exposing this in External Core. The fix would be to eta-expand all
applications of the (->) tycon, which isn't trivial to do within the
current External Core printer.

Cheers,
Tim

-- 
Tim Chevalier * http://cs.pdx.edu/~tjc * Often in error, never in doubt
"Instead of insight, maybe all a man gets is strength to wander for a
while. Maybe the only gift is a chance to inquire, to know nothing for
certain. An inheritance of wonder and nothing more."  -- William Least
Heat Moon

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

Reply via email to