[GHC] #8995: When generalising, use levels rather than global tyvars
GHC
ghc-devs at haskell.org
Wed Apr 16 08:40:35 UTC 2014
#8995: When generalising, use levels rather than global tyvars
-------------------------------------+------------------------------------
Reporter: simonpj | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+------------------------------------
Comment (by simonpj):
Thanks Didier.
First, two confusions:
* I think of let-bindings of form `let x = <rhs> in <body>`. So when I
say "RHS" I mean the bit that you called `a2` above. So I think we are in
agreement here.
* In principle GHC does not do local let-generalisation, as our papers
advertise. But GHC must compile Haskell 98, so it must somehow support
local let-generalisation. So in fact:
* Local let-gen is enabled by `-XNoMonoLocalBinds` and disabled by
`-XMonoLocalBinds`.
* By default, we have `-XNoMonoLocalBinds`.
* But with `-XGADTs` or `-XTypeFamilies` we also switch on
`-XMonoLocalBinds`.
* But that can again be overridden, so `-XGADTs -XNoMonoLocalBings`
would attempt to generalise local let-bindings despite the problems with
doing so.
The other thing is that the "monomorphism restriction" can mean that even
a top-level binding can have an environment with free type variables.
`-XNoMonomorphismRestriction` switches this off.
So this ticket is all about the "best-efforts" generalisation you get when
you have `-XNoMonoLocalBinds`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8995#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list