{-# LANGUAGE TemplateHaskell, MagicHash #-} module System.Plugins.Auto.LiftName where import GHC.Exts import Language.Haskell.TH import Language.Haskell.TH.Syntax import Language.Haskell.TH.Syntax.Internals liftName :: Name -> ExpQ liftName (Name occName nameFlavour) = appE (appE [| Name |] (liftOccName occName)) (liftNameFlavour nameFlavour) liftOccName :: OccName -> ExpQ liftOccName (OccName str) = [| OccName str |] liftNameSpace :: NameSpace -> ExpQ liftNameSpace VarName = [| VarName |] liftNameSpace DataName = [| DataName |] liftNameSpace TcClsName = [| TcClsName |] liftPkgName :: PkgName -> ExpQ liftPkgName (PkgName str) = [| PkgName str |] liftModName :: ModName -> ExpQ liftModName (ModName str) = [| ModName str |] liftNameFlavour :: NameFlavour -> ExpQ liftNameFlavour NameS = [| NameS |] liftNameFlavour (NameQ modName) = appE [| NameQ |] (liftModName modName) liftNameFlavour (NameU i) = [| case $( lift (I# i) ) of I# i' -> NameU i' |] liftNameFlavour (NameL i) = [| case $( lift (I# i) ) of I# i' -> NameL i' |] liftNameFlavour (NameG nameSpace pkgName modName) = appE (appE (appE [| NameG |] (liftNameSpace nameSpace)) (liftPkgName pkgName)) (liftModName modName)