Constructor wrappers vs workers in generated Core

Matthew Pickering matthewtpickering at
Mon Feb 4 17:56:49 UTC 2019

If you want your core to look at much like the source program as
possible then you could print `$WFoo` as just `Foo`?

The existence of wrappers is a crucial part of desugaring so perhaps
it's useful for users to see them in the output of your program if
it's intended to be educational?


On Sat, Feb 2, 2019 at 3:06 PM Christopher Done <chrisdone at> wrote:
> On Sat, 2 Feb 2019 at 14:50, Matthew Pickering
> <matthewtpickering at> wrote:
> > There is no way to turn off wrappers and I don't think it would be
> > possible to implement easily if at all.
> Fair enough.
> > However, they will all probably be inlined after the optimiser runs
> > but it seems that you don't want to run the optimiser at all on the
> > generated core?
> Yeah, I'm trying to avoid as much instability in the output shape as
> possible, and for educational purposes, optimizations make fairly
> readable code unreadable.
> Wait. Can I rely on case alt patterns having the same arity as the
> original user-defined data type before optimization passes are run?
> If the answer to that is yes, then I could just replace all wrapper
> calls with worker calls, which is an easy enough transformation. As a
> precaution, I could add a check on all case alt patterns that the
> arity matches the worker arity and barf if not.
> Thanks for your help!
> Chris

More information about the ghc-devs mailing list