Skip to content

Instantly share code, notes, and snippets.

@TerrorJack
Last active January 3, 2021 13:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TerrorJack/c1210edc93e9d6600b5c892551ad977a to your computer and use it in GitHub Desktop.
Save TerrorJack/c1210edc93e9d6600b5c892551ad977a to your computer and use it in GitHub Desktop.
module ImportHidden where
import DynFlags
import FastString
import Language.Haskell.TH.Syntax
import Module
import Packages
import TcRnMonad (TcM)
import TcSplice ()
import Unsafe.Coerce
unsafeRunTcM :: TcM a -> Q a
unsafeRunTcM m = unsafeCoerce (\_ -> m)
qGetDynFlags :: Q DynFlags
qGetDynFlags = unsafeRunTcM getDynFlags
qFindUnitId :: String -> Q UnitId
qFindUnitId pkg_name = do
dflags <- qGetDynFlags
comp_id <- case lookupPackageName dflags $ PackageName $ fsLit pkg_name of
Just comp_id -> pure comp_id
_ -> fail $ "Package not found: " ++ pkg_name
pure $ DefiniteUnitId $ DefUnitId $ componentIdToInstalledUnitId comp_id
importHidden :: String -> String -> String -> Q Exp
importHidden pkg_name mod_name val_name = do
unit_id <- qFindUnitId pkg_name
pure $
VarE $
Name
(OccName val_name)
(NameG VarName (PkgName (unitIdString unit_id)) (ModName mod_name))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment