packages feed

intero-0.1.34: src/Intero/Compat.hs

{-# LANGUAGE CPP #-}

-- | Compatibility between GHC API versions.

module Intero.Compat
  ( ghc_getModuleGraph
  , ghc_getInfo
  , ghc_defaultDynFlags
  , ghc_topSortModuleGraph
  , ghc_mkWarn
  , ghc_mkErr
  , ghc_errMsg
  , ghc_warnMsg
  , ghc_tyConFlavour
  , StageReaderName
  , StageReaderRdrName
  , StageReaderId
  ) where

#if __GLASGOW_HASKELL__ > 800
import           TyCoRep
#endif
import           TyCon
#if __GLASGOW_HASKELL__ > 802
import           CmdLineParser
#endif
#if __GLASGOW_HASKELL__ >= 800
import qualified Data.Graph as SCC
#else
import qualified Digraph as SCC
#endif
import           DynFlags
import           GHC

ghc_tyConFlavour :: TyCon -> String
#if __GLASGOW_HASKELL__ > 802
ghc_tyConFlavour n =
  if tyConFlavour n == ClassFlavour
    then "class"
    else ""
#else
#if __GLASGOW_HASKELL__ > 800
ghc_tyConFlavour = tyConFlavour
#else
ghc_tyConFlavour _ = ""
#endif
#endif

ghc_defaultDynFlags :: Settings -> DynFlags
#if __GLASGOW_HASKELL__ <= 802
ghc_defaultDynFlags = defaultDynFlags
#else
ghc_defaultDynFlags s = defaultDynFlags s mempty
#endif

ghc_getInfo :: GhcMonad m => Bool -> Name -> m (Maybe (TyThing, Fixity, [ClsInst], [FamInst]))
#if __GLASGOW_HASKELL__ <= 802
ghc_getInfo = getInfo
#else
ghc_getInfo x y = fmap (fmap (\(a,b,c,d,_) -> (a,b,c,d))) (getInfo x y)
#endif

ghc_getModuleGraph :: GhcMonad m => m [ModSummary]
#if __GLASGOW_HASKELL__ <= 802
ghc_getModuleGraph = GHC.getModuleGraph
#else
ghc_getModuleGraph = fmap mgModSummaries GHC.getModuleGraph
#endif

ghc_topSortModuleGraph :: Bool -> [ModSummary] -> Maybe ModuleName -> [SCC.SCC ModSummary]
#if __GLASGOW_HASKELL__ <= 802
ghc_topSortModuleGraph = GHC.topSortModuleGraph
#else
ghc_topSortModuleGraph bool sums may = GHC.topSortModuleGraph bool (mkModuleGraph sums) may
#endif

#if __GLASGOW_HASKELL__ <= 802
type StageReaderName = Name
#else
type StageReaderName = GhcRn
#endif

#if __GLASGOW_HASKELL__ <= 802
type StageReaderRdrName = RdrName
#else
type StageReaderRdrName = GhcPs
#endif

#if __GLASGOW_HASKELL__ <= 802
type StageReaderId = Id
#else
type StageReaderId = GhcTc
#endif

#if __GLASGOW_HASKELL__ > 802
ghc_mkWarn :: Located String -> Warn
ghc_mkWarn = Warn CmdLineParser.NoReason
#else
ghc_mkWarn :: a -> a
ghc_mkWarn = id
#endif

#if __GLASGOW_HASKELL__ > 802
ghc_mkErr :: Located String -> Err
ghc_mkErr = Err
#else
ghc_mkErr :: a -> a
ghc_mkErr = id
#endif

#if __GLASGOW_HASKELL__ > 802
ghc_errMsg :: Err -> Located String
ghc_errMsg = errMsg
#else
ghc_errMsg :: a -> a
ghc_errMsg = id
#endif

#if __GLASGOW_HASKELL__ > 802
ghc_warnMsg :: Warn -> Located String
ghc_warnMsg = warnMsg
#else
ghc_warnMsg :: a -> a
ghc_warnMsg = id
#endif