Request for input on #7253: Top-level bindings in GHCI

Richard Eisenberg eir at
Mon Aug 24 13:06:26 UTC 2015

I don't think there is a user-visible difference between treating "a = 1" as a declaration vs as a let. One might be easier to implement.

My guess is that Austin's thought in that chat log is around MonoLocalBinds. MonoLocalBinds (implied by GADTs and TypeFamilies) means that some let declarations are not generalized. In particular, let declarations that are manifestly *not* top-level. Like this:

foo x = let y = x in y

That `y` is manifestly not top-level because its RHS mentions a local variable. So, `y` is not generalized if MonoLocalBinds is in effect.

But, in GHCi, this matters not. Anything the user writes in a top-level variable assignment can only possibly refer to top-level things, never to local things (because there are no local things). So MonoLocalBinds will not trigger, and treating an assignment as either a declaration or a "let" should have the same meaning.


On Aug 22, 2015, at 11:50 AM, Alex Rozenshteyn <rpglover64 at> wrote:

> I'm thinking of working on this ticket (, so, as per mpickering's suggestion (, I'm emailing the list to solicit input.
> My first instinct was to treat declarations like "a = 1" in GHCI as equivalent to "let a = 1"; this would be a straightforward matter of parsing. On the other hand, as thoughtpolice comments, let-bound variables are treated subtly differently than top-level bindings, so the proper solution may be more involved.
> Comments?
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the ghc-devs mailing list