Regression in newName
Template Haskell's newName
no longer works properly, with GHC HEAD. Consider:
{-# LANGUAGE TemplateHaskell #-}
module B where
import Language.Haskell.TH
data D = D
-- declare 'data E = D' with a fresh name 'D'
$(do
nm <- newName "D"
return $ [DataD [] (mkName "E") [] [NormalC nm []] []]
)
With ghc-7.0.3
, this compiles without error, as it should. However, with ghc-7.3.20110803
, we get:
B.hs:8:3:
Multiple declarations of `D'
Declared at: B.hs:7:10
B.hs:8:3
which is wrong.
The following might also be related. Given:
{-# LANGUAGE TemplateHaskell #-}
module C where
import Language.Haskell.TH
g = $(do
nm <- newName "f"
return $ VarE nm
)
with ghc-7.0.3
we get the correct error message
C.hs:7:7:
Not in scope: `f[aK5]'
In the result of the splice:
$(do { nm <- newName "f";
return $ VarE nm })
To see what the splice expanded to, use -ddump-splices
In the expression:
$(do { nm <- newName "f";
return $ VarE nm })
In an equation for `g':
g = $(do { nm <- newName "f";
return $ VarE nm })
but with ghc-7.3.20110803
we get a GHC internal error message:
C.hs:7:7:
GHC internal error: `f_aOw' is not in scope during type checking, but it passed the renamer
tcg_type_env of environment: []
tcl_env of environment: [(rgQ, Identifier[g::t_a, 1])]
In the expression: f_aOw
In the result of the splice:
$(do { nm <- newName "f";
return $ VarE nm })
To see what the splice expanded to, use -ddump-splices
In the expression:
$(do { nm <- newName "f";
return $ VarE nm })
Trac metadata
Trac field | Value |
---|---|
Version | 7.3 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Template Haskell |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |