Change from 7.10.3 to current master
Alan & Kim Zimmerman
alan.zimm at gmail.com
Mon Dec 28 19:01:05 UTC 2015
This is now https://ghc.haskell.org/trac/ghc/ticket/11307
On Mon, Dec 21, 2015 at 1:03 PM, Simon Peyton Jones
<simonpj at microsoft.com> wrote:
> | type instance r1 :++: r2 :> a = (r1 :++: r2) :> a
>
> What do you expect this to mean? I suppose you could hope that GHC will unravel the fixity of :++: and :>, to determine whether you are giving an instance for :++: or for :>?
>
> That sounds reasonable, but it's not trivial.
>
> Currently the LHS of a 'type instance' decl is ultimately a TyFamEqn, and it looks like this:
>
>
> data TyFamEqn name pats
> = TyFamEqn
> { tfe_tycon :: Located name
> , tfe_pats :: pats
> , tfe_rhs :: LHsType name }
>
>
> So we've already decided (in the parser) what the type-function name is. But we can't do that in this case, because the parser doesn't understand fixity.
>
> To deal with this we'd need to change to
>
> data TyFamEqn name pats
> = TyFamEqn
> { tfe_lhs :: LHSType name
> , tfe_rhs :: LHsType name }
>
> so that the LHS was just a type. Now the renamer can re-jiggle its fixities in the usual way, and only in the type checker will we need to decide exactly which type it's an instance of. Easy!
>
> This might be a good change to make! It's a bit like in ClsInstDecl, you'll see that the instance cid_poly_ty is just a LHsSigType, i.e. not decomposed into which class it is.
>
>
> So: my instinct is that the above would be Fine Thing. Make a ticket? Add these comments to give context? Excecute?
>
> Thanks
>
> Simon
>
> | -----Original Message-----
> | From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of Alan
> | & Kim Zimmerman
> | Sent: 20 December 2015 18:55
> | To: ghc-devs at haskell.org
> | Subject: Change from 7.10.3 to current master
> |
> | I am in the process of updating ghc-exactprint for current GHC master.
> |
> | One of the tests has the following in it
> |
> | -----------------------------
> | {-# LANGUAGE TypeOperators #-}
> |
> | type family (r1 :++: r2); infixr 5 :++:
> | type instance r :++: Nil = r
> | type instance r1 :++: r2 :> a = (r1 :++: r2) :> a
> | ------------------------------
> |
> | Current GHC master rejects this with
> |
> | /tmp/Foo.hs:5:15: error:
> | Malformed head of type or class declaration: r1 :++: r2 :> a
> |
> | Is this expected, or a bug?
> |
> | Alan
> | _______________________________________________
> | ghc-devs mailing list
> | ghc-devs at haskell.org
> | https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.h
> | askell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc-
> | devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7c17b33d7be13045d
> | d141308d3096f2bc5%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=LGroqdv
> | nYFSxydfZFQydhi2N6lltWwi%2b4tt%2bM3LH0P0%3d
More information about the ghc-devs
mailing list