Pattern matching desugaring regression? Re: [Haskell-cafe] Why does my module take so long to compile?

Carter Schonwald carter.schonwald at gmail.com
Mon Feb 15 17:48:44 UTC 2021


Ccing ghc devs since that’s a better forum perhaps
Crazy theory:

this is a regression due the the partial changes to pattern matching
coverage checking in 8.10 that finished / landed in ghc 9

Why:
Desugaring is when pattern/ case statement translation happens I think?
And the only obvious “big thing” is that you have some huge , albeit sane
for a compiler, pattern matching

I’d first check if the new ghc 9 release doesn’t have that regression in
build time that you experienced.  And if it does file a ticket.

I may be totally wrong, but that seems like a decent likelihood !


On Mon, Feb 15, 2021 at 12:20 PM Troels Henriksen <athas at sigkill.dk> wrote:

> Carter Schonwald <carter.schonwald at gmail.com> writes:
>
> > How big are your data types in the file In question? Do you ghc generics
> or
> > deriving or template Haskell? Could you share a link to the file in
> > question ?
>
> The file does not define any large data types itself, but it operates on
> some fairly large data types (an AST, it's a compiler).  But so do many
> other modules that work just fine.  It uses no generics, nontrivial
> deriving, or Template Haskell.  It's this file:
>
> https://github.com/diku-dk/futhark/blob/master/src/Futhark/Pass/ExtractKernels/DistributeNests.hs
>
> I also found a handful of other modules in my project that are
> significantly slower to compile in GHC 8.10, and seemingly also because
> of the desugarer, but none of them have any obvious smoking guns like
> generics or TH.
>
> The only commonality I can find is that the affected modules contain
> functions with a relatively large typeclass context.  I use
> ConstraintKinds to make them more concise, and I guess unfolded there
> may be 30-40 equality/class constraints in total.  Like this:
>
>     type DistLore lore =
>       ( Bindable lore,
>         HasSegOp lore,
>         BinderOps lore,
>         LetDec lore ~ Type,
>         ExpDec lore ~ (),
>         BodyDec lore ~ ()
>       )
>
> where the 'Bindable' constraint in particular then implies a further
> handful of "~" constraints:
>
>     class
>       ( ASTLore lore,
>         FParamInfo lore ~ DeclType,
>         LParamInfo lore ~ Type,
>         RetType lore ~ DeclExtType,
>         BranchType lore ~ ExtType,
>         SetType (LetDec lore)
>       ) =>
>       Bindable lore
>       where
>       ...
>
> FParamInfo/LParamInfo/etc are type families.  Are such constraints
> particularly slow?
>
> --
> \  Troels
> /\ Henriksen
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20210215/73ac6c3a/attachment.html>


More information about the ghc-devs mailing list