module Data.Array.Repa.Plugin.ToGHC.Var ( plainNameOfVar , newDummyVar , newDummyExportedVar , newDummyTyVar) where import qualified Type as G import qualified IdInfo as G import qualified Var as G import qualified UniqSupply as G import qualified FastString as G import qualified OccName as Occ import qualified Name as Name -- Variable utils ------------------------------------------------------------- -- | Take the plain unqualified printable name of a GHC variable. plainNameOfVar :: G.Var -> String plainNameOfVar gv = let name = G.varName gv occ = Name.nameOccName name in Occ.occNameString occ -- | Create a fresh dummy GHC expression variable with the given type. newDummyExportedVar :: String -> G.Type -> G.UniqSM G.Var newDummyExportedVar basename ty = do let details = G.VanillaId let occName = Occ.mkOccName Occ.varName basename unique <- G.getUniqueUs let name = Name.mkSystemName unique occName let info = G.vanillaIdInfo return $ G.mkExportedLocalVar details name ty info -- | Create a fresh dummy GHC expression variable with the given type. newDummyVar :: String -> G.Type -> G.UniqSM G.Var newDummyVar basename ty = do let details = G.VanillaId let occName = Occ.mkOccName Occ.varName basename unique <- G.getUniqueUs let name = Name.mkSystemName unique occName let info = G.vanillaIdInfo return $ G.mkLocalVar details name ty info -- | Create a fresh dummy GHC type variable with the given type. newDummyTyVar :: String -> G.UniqSM G.Var newDummyTyVar basename = do unique <- G.getUniqueUs let name = Name.mkSysTvName unique (G.fsLit basename) return $ G.mkTyVar name G.liftedTypeKind