I've created a ticket for this at: https://ghc.haskell.org/trac/ghc/ticket/13663

On 8 May 2017 at 16:12, Ben Gamari <ben@smart-cactus.org> wrote:
Christiaan Baaij <christiaan.baaij@gmail.com> writes:

> Hello GHC Devs,
>
Hi!

> So my question are:
> - Which part of the simplifier is turning these local recursive let-binders
> into global recursive functions?

The simplifier does a bit of let floating. See Simplify.simplLazyBind
and SimplEnv.doFloatFromRhs. I suspect this is what you are seeing.

> - Is there some way to disable this transformation?

You could try adding a flag which is checked by doFloatFromRhs. I'm not
sure what, if anything, might break if you do so.

Cheers,

- Ben