
#11584: [Template Haskell] Language.Haskell.TH.Syntax.hs contains misleading comment -------------------------------------+------------------------------------- Reporter: bollmann | Owner: bollmann Type: bug | Status: new Priority: normal | Milestone: Component: Template Haskell | Version: 7.10.3 Resolution: | Keywords: newcomer Operating System: Unknown/Multiple | Architecture: Type of failure: Documentation | Unknown/Multiple bug | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by rwbarton): I don't understand what you are all talking about :) Try this complete program: {{{#!hs {-# LANGUAGE TemplateHaskell #-} import Language.Haskell.TH g = $(do nm1 <- newName "x" let nm2 = mkName "x" return (LamE [VarP nm2] (LamE [VarP nm1] (VarE nm2))) ) main = putStrLn $ g "1" "2" }}} It outputs `2`, as advertised by the comment in question. I happened to be looking at this the other day for unrelated reasons. `mkName "x"` means "whatever variable of name `x` is in scope", and `newName "x"` returns a new variable whose name is `x`. It is a different variable than is returned by other calls to `newName "x"`, but all of them capture the name `x` as far as `mkName` is concerned. As far as I can tell it's all exactly as explained in that comment. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11584#comment:4 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler