
#13305: static: check for identifiers should only consider term level variables -------------------------------------+------------------------------------- Reporter: edsko | Owner: (none) Type: bug | Status: closed Priority: normal | Milestone: Component: Compiler | Version: 8.0.2 Resolution: worksforme | Keywords: | StaticPointers Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by facundo.dominguez):
Why does it make a difference whether g is inlined or not?
Do each one of the examples I write at the top of this comment
The crucial difference between type-checking a local `g` and type-checking the body of the static form, is that `g` has the context of the enclosing function available, whereas the body of the static form does not. Therefore, inlining has the effect of removing the constraints of the enclosing function, and in return, it allows types to be non-closed. pass/don't pass as expected in GHC HEAD? I only see one example. And yes, it does pass.
If so, which commit changed that in HEAD and where these changes intentional?
The commit which allows closed variables in static forms: http://git.haskell.org/ghc.git/commit/36d29f7ce332a2b1fbc36de831b0eef7a64055... The relevant bit of the commit message reads {{{ The renamer does not check anymore if free variables appearing in the static form are top-level. Instead, the typechecker looks at the tct_closed flag to decide if the free variables are closed. }}}
and where these changes intentional?
I don't remember being aware of this aspect before. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13305#comment:14 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler