ghc-exactprint-1.14.0.0: tests/examples/pre-ghc910/TH_lookupName.hs
-- test 'lookupTypeName' and 'lookupValueName'
{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH
import qualified TH_lookupName_Lib
import qualified TH_lookupName_Lib as TheLib
f :: String
f = "TH_lookupName.f"
data D = D
$(return [])
main = mapM_ print [
-- looking up values
$(do { Just n <- lookupValueName "f" ; varE n }),
$(do { Nothing <- lookupTypeName "f"; [| "" |] }),
-- looking up types
$(do { Just n <- lookupTypeName "String"; sigE [| "" |] (conT n) }),
$(do { Nothing <- lookupValueName "String"; [| "" |] }),
-- namespacing
$(do { Just n <- lookupValueName "D"; DataConI{} <- reify n; [| "" |] }),
$(do { Just n <- lookupTypeName "D"; TyConI{} <- reify n; [| "" |] }),
-- qualified lookup
$(do { Just n <- lookupValueName "TH_lookupName_Lib.f"; varE n }),
$(do { Just n <- lookupValueName "TheLib.f"; varE n }),
-- shadowing
$(TheLib.lookup_f),
$( [| let f = "local f" in $(TheLib.lookup_f) |] ),
$( [| let f = "local f" in $(do { Just n <- lookupValueName "f"; varE n }) |] ),
$( [| let f = "local f" in $(varE 'f) |] ),
let f = "local f" in $(TheLib.lookup_f),
let f = "local f" in $(varE 'f)
]