Where are the HsTyVarBndrs collapsed in an explicit HsForAllTy?

Alan & Kim Zimmerman alan.zimm at gmail.com
Thu Apr 9 08:30:23 UTC 2015

When parsing

    extremumNewton :: (Eq a, Fractional a) =>
                  (forall tag. forall tag1.
                          Tower tag1 (Tower tag a)
                              -> Tower tag1 (Tower tag a))
                      -> a -> [a]

the nested `forall` declarations are parsed by

    ctypedoc :: { LHsType RdrName }
            : 'forall' tv_bndrs '.' ctypedoc {% hintExplicitForall (getLoc
$1) >>
                                                ams (sLL $1 $> $
mkExplicitHsForAllTy $2

(noLoc []) $4)
                                                    [mj AnnForall $1,mj
AnnDot $3] }

This generates a HsForAllTy for the first forall that simply wraps the
second one, which is also a `ctypedoc`.

But, when looking at the AST provided via ParsedSource, the two `forall`s
are collapsed into a single one, containing both `tag` and `tag1` in the

In the process the annotation for the second forall loses its anchor, as
that span is no longer in the AST.

I cannot find where this collapsing takes place, can  anyone point me at it?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20150409/828a830c/attachment.html>

More information about the ghc-devs mailing list