ghcide- The core of an IDE
Safe HaskellNone



General utility functions, mostly focused around GHC operations.



modifyDynFlags :: GhcMonad m => (DynFlags -> DynFlags) -> m () Source #

Used to modify dyn flags in preference to calling setSessionDynFlags, since that function also reloads packages (which is very slow).

evalGhcEnv :: HscEnv -> Ghc b -> IO b Source #

Run a Ghc monad value using an existing HscEnv. Sets up and tears down all the required pieces, but designed to be more efficient than a standard runGhc.

GHC wrappers

printRdrName :: RdrName -> String Source #

Pretty print a RdrName wrapping operators in parens

printName :: Name -> String Source #

Pretty print a Name wrapping operators in parens

data ParseResult a #

The result of running a parser.



The parser has consumed a (possibly empty) prefix of the input and produced a result. Use getMessages to check for accumulated warnings and non-fatal errors.


  • PState

    The resulting parsing state. Can be used to resume parsing.

  • a

    The resulting value.


The parser has consumed a (possibly empty) prefix of the input and failed.


lookupPackageConfig :: Unit -> HscEnv -> Maybe UnitInfo Source #

Given a Unit try and find the associated PackageConfig in the environment.

textToStringBuffer :: Text -> StringBuffer Source #

Convert from the text package to the GHC StringBuffer. Currently implemented somewhat inefficiently (if it ever comes up in a profile).

moduleImportPath :: NormalizedFilePath -> ModuleName -> Maybe FilePath Source #

Given a module location, and its parse tree, figure out what is the include directory implied by it. For example, given the file /usr/Test/Foo/Bar.hs with the module name Foo.Bar the directory /usr/Test should be on the include path to find sibling modules.

fingerprintToBS :: Fingerprint -> ByteString Source #

Convert a Fingerprint to a ByteString by copying the byte across. Will produce an 8 byte unreadable ByteString.

General utilities

readFileUtf8 :: FilePath -> IO Text Source #

Read a UTF8 file, with lenient decoding, so it will never raise a decoding error.

hDuplicateTo' :: Handle -> Handle -> IO () Source #

A slightly modified version of hDuplicateTo from GHC. Importantly, it avoids the bug listed in

traceAst :: (Data a, ExactPrint a, Outputable a, HasCallStack) => String -> a -> a Source #

Prints an Outputable value to stderr and to an HTML file for further inspection

printOutputable :: Outputable a => a -> Text Source #

Print a GHC value in defaultUserStyle without unique symbols.

This is the most common print utility, will print with a user-friendly style like: a_a4ME as a.

It internal using showSDocUnsafe with unsafeGlobalDynFlags.