{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE ImplicitParams #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Compat(module Compat) where
import GHC
#if __GLASGOW_HASKELL__ > 901
import GHC.Types.SourceText ( SourceText(NoSourceText) )
import GHC.Data.FastString (FastString, NonDetFastString (NonDetFastString))
#elif __GLASGOW_HASKELL__ >=900
import GHC.Data.FastString (FastString)
#else
import FastString (FastString)
#endif
#if __GLASGOW_HASKELL__ < 900
import BasicTypes
import TcEvidence
import RnTypes as Compat
import UniqSupply
#else
import GHC.Types.Basic
import GHC.Unit.Types
#if __GLASGOW_HASKELL__ < 902
import GHC.Parser.Annotation
#endif
import GHC.Rename.HsType as Compat
import GHC.Types.Unique.Supply
#endif
#if __GLASGOW_HASKELL__ < 810
import HsSyn as Compat
#else
import GHC.Hs as Compat
#endif
#if __GLASGOW_HASKELL__ < 808
import System.IO.Unsafe as Compat (unsafePerformIO)
import TcRnTypes
import IOEnv
import DynFlags
import HscTypes
#endif
#if __GLASGOW_HASKELL__ >= 904
import GHC.Types.PkgQual (RawPkgQual(NoRawPkgQual))
#endif
import Data.IORef as Compat
class WithoutLoc a b | b -> a where
noL :: a -> b
#if __GLASGOW_HASKELL__ >= 902
instance WithoutLoc a (GenLocated (SrcAnn ann) a) where
noL :: a -> GenLocated (SrcAnn ann) a
noL = forall e ann. Located e -> LocatedAn ann e
reLocA forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall e. e -> Located e
noLoc
#endif
instance WithoutLoc a (Located a) where
noL :: a -> Located a
noL = forall e. e -> Located e
noLoc
instance WithoutLoc (HsTupArg p) (HsTupArg p) where noL :: HsTupArg p -> HsTupArg p
noL = forall a. a -> a
id
instance WithoutLoc (HsLocalBindsLR p q) (HsLocalBindsLR p q) where noL :: HsLocalBindsLR p q -> HsLocalBindsLR p q
noL = forall a. a -> a
id
#if __GLASGOW_HASKELL__ < 902
reLocA :: Located e -> Located e
reLocA = id
reLoc :: Located e -> Located e
reLoc = id
#endif
class WithoutExt a where
noE :: a
#if __GLASGOW_HASKELL__ >= 902
instance WithoutExt (EpAnn a) where
noE :: EpAnn a
noE = forall a. EpAnn a
EpAnnNotUsed
instance WithoutExt EpAnnComments where
noE :: EpAnnComments
noE = EpAnnComments
emptyComments
#endif
#if __GLASGOW_HASKELL__ >= 810
instance WithoutExt NoExtField where
noE :: NoExtField
noE = NoExtField
noExtField
#else
instance WithoutExt NoExt where
noE = NoExt
#endif
#if __GLASGOW_HASKELL__ < 902
mkNonDetFastString :: FastString -> FastString
mkNonDetFastString = id
#else
mkNonDetFastString :: FastString -> NonDetFastString
mkNonDetFastString :: FastString -> NonDetFastString
mkNonDetFastString = FastString -> NonDetFastString
NonDetFastString
#endif
realSrcLoc :: SrcLoc -> Maybe RealSrcLoc
#if __GLASGOW_HASKELL__ < 811
realSrcLoc (RealSrcLoc x) = Just x
#else
realSrcLoc :: SrcLoc -> Maybe RealSrcLoc
realSrcLoc (RealSrcLoc RealSrcLoc
x Maybe BufPos
_) = forall a. a -> Maybe a
Just RealSrcLoc
x
#endif
realSrcLoc SrcLoc
_ = forall a. Maybe a
Nothing
#if __GLASGOW_HASKELL__ >= 902
hsLTyVarBndrToType :: (Anno (IdP (GhcPass p)) ~ SrcSpanAnn' (EpAnn NameAnn)) => LHsTyVarBndr flag (GhcPass p) -> LHsType (GhcPass p)
hsLTyVarBndrToType :: forall (p :: Pass) flag.
(Anno (IdP (GhcPass p)) ~ SrcSpanAnn' (EpAnn NameAnn)) =>
LHsTyVarBndr flag (GhcPass p) -> LHsType (GhcPass p)
hsLTyVarBndrToType LHsTyVarBndr flag (GhcPass p)
x = forall a b. WithoutLoc a b => a -> b
noL forall a b. (a -> b) -> a -> b
$ forall pass.
XTyVar pass -> PromotionFlag -> LIdP pass -> HsType pass
HsTyVar forall a. WithoutExt a => a
noE PromotionFlag
NotPromoted forall a b. (a -> b) -> a -> b
$ forall a b. WithoutLoc a b => a -> b
noL forall a b. (a -> b) -> a -> b
$ forall flag (p :: Pass).
LHsTyVarBndr flag (GhcPass p) -> IdP (GhcPass p)
hsLTyVarName LHsTyVarBndr flag (GhcPass p)
x
#elif __GLASGOW_HASKELL__ >= 900
hsLTyVarBndrToType :: LHsTyVarBndr flag (GhcPass p) -> LHsType (GhcPass p)
hsLTyVarBndrToType x = noL $ HsTyVar noE NotPromoted $ noL $ hsLTyVarName x
#endif
#if __GLASGOW_HASKELL__ < 811
type Module = HsModule GhcPs
#else
type Module = HsModule
#endif
mkAppType :: LHsExpr GhcPs -> LHsType GhcPs -> LHsExpr GhcPs
mkTypeAnn :: LHsExpr GhcPs -> LHsType GhcPs -> LHsExpr GhcPs
mkFunTy :: LHsType GhcPs -> LHsType GhcPs -> LHsType GhcPs
newFunBind :: Located RdrName -> MatchGroup GhcPs (LHsExpr GhcPs) -> HsBind GhcPs
#if __GLASGOW_HASKELL__ < 807
mkAppType expr typ = noL $ HsAppType (HsWC noE typ) expr
mkTypeAnn expr typ = noL $ ExprWithTySig (HsWC noE (HsIB noE typ)) expr
#elif __GLASGOW_HASKELL__ < 901
mkAppType expr typ = noL $ HsAppType noE expr (HsWC noE typ)
mkTypeAnn expr typ = noL $ ExprWithTySig noE expr (HsWC noE (HsIB noE typ))
#else
mkAppType :: LHsExpr GhcPs -> LHsType GhcPs -> LHsExpr GhcPs
mkAppType LHsExpr GhcPs
expr LHsType GhcPs
typ = forall a b. WithoutLoc a b => a -> b
noL forall a b. (a -> b) -> a -> b
$ forall p.
XAppTypeE p -> LHsExpr p -> LHsWcType (NoGhcTc p) -> HsExpr p
HsAppType SrcSpan
noSrcSpan LHsExpr GhcPs
expr (forall pass thing.
XHsWC pass thing -> thing -> HsWildCardBndrs pass thing
HsWC forall a. WithoutExt a => a
noE LHsType GhcPs
typ)
mkTypeAnn :: LHsExpr GhcPs -> LHsType GhcPs -> LHsExpr GhcPs
mkTypeAnn LHsExpr GhcPs
expr LHsType GhcPs
typ = forall a b. WithoutLoc a b => a -> b
noL forall a b. (a -> b) -> a -> b
$ forall p.
XExprWithTySig p
-> LHsExpr p -> LHsSigWcType (NoGhcTc p) -> HsExpr p
ExprWithTySig forall a. WithoutExt a => a
noE LHsExpr GhcPs
expr (LHsType GhcPs -> LHsSigWcType GhcPs
hsTypeToHsSigWcType LHsType GhcPs
typ)
#endif
#if __GLASGOW_HASKELL__ < 811
mkFunTy a b = noL $ HsFunTy noE a b
newFunBind a b = FunBind noE a b WpHole []
#elif __GLASGOW_HASKELL__ < 904
mkFunTy :: LHsType GhcPs -> LHsType GhcPs -> LHsType GhcPs
mkFunTy LHsType GhcPs
a LHsType GhcPs
b = forall a b. WithoutLoc a b => a -> b
noL forall a b. (a -> b) -> a -> b
$ forall pass.
XFunTy pass
-> HsArrow pass -> LHsType pass -> LHsType pass -> HsType pass
HsFunTy forall a. WithoutExt a => a
noE (forall pass. IsUnicodeSyntax -> HsArrow pass
HsUnrestrictedArrow IsUnicodeSyntax
NormalSyntax) LHsType GhcPs
a LHsType GhcPs
b
newFunBind :: Located RdrName -> MatchGroup GhcPs (LHsExpr GhcPs) -> HsBind GhcPs
newFunBind Located RdrName
a MatchGroup GhcPs (LHsExpr GhcPs)
b = forall idL idR.
XFunBind idL idR
-> LIdP idL
-> MatchGroup idR (LHsExpr idR)
-> [CoreTickish]
-> HsBindLR idL idR
FunBind forall a. WithoutExt a => a
noE (forall e ann. Located e -> LocatedAn ann e
reLocA Located RdrName
a) MatchGroup GhcPs (LHsExpr GhcPs)
b []
#else
mkFunTy a b = noL $ HsFunTy noE (HsUnrestrictedArrow $ L NoTokenLoc HsNormalTok) a b
newFunBind a b = FunBind noE (reLocA a) b []
#endif
#if __GLASGOW_HASKELL__ < 807
compat_m_pats :: [Pat GhcPs] -> [LPat GhcPs]
compat_m_pats = map noL
#elif __GLASGOW_HASKELL__ < 809
compat_m_pats :: [Pat GhcPs] -> [Pat GhcPs]
compat_m_pats = id
#else
compat_m_pats :: [Pat GhcPs] -> [LPat GhcPs]
compat_m_pats :: [Pat GhcPs] -> [LPat GhcPs]
compat_m_pats = forall a b. (a -> b) -> [a] -> [b]
map forall a b. WithoutLoc a b => a -> b
noL
#endif
qualifiedImplicitImport :: ModuleName -> LImportDecl GhcPs
#if __GLASGOW_HASKELL__ < 809
qualifiedImplicitImport x = noL $ ImportDecl noE NoSourceText (noL x) Nothing False False
True True Nothing Nothing
#elif __GLASGOW_HASKELL__ < 811
qualifiedImplicitImport x = noL $ ImportDecl noE NoSourceText (noL x) Nothing False False
QualifiedPost True Nothing Nothing
#elif __GLASGOW_HASKELL__ < 904
qualifiedImplicitImport :: ModuleName -> LImportDecl GhcPs
qualifiedImplicitImport ModuleName
x = forall a b. WithoutLoc a b => a -> b
noL forall a b. (a -> b) -> a -> b
$ forall pass.
XCImportDecl pass
-> SourceText
-> XRec pass ModuleName
-> Maybe StringLiteral
-> IsBootInterface
-> Bool
-> ImportDeclQualifiedStyle
-> Bool
-> Maybe (XRec pass ModuleName)
-> Maybe (Bool, XRec pass [LIE pass])
-> ImportDecl pass
ImportDecl forall a. WithoutExt a => a
noE SourceText
NoSourceText (forall a b. WithoutLoc a b => a -> b
noL ModuleName
x) forall a. Maybe a
Nothing IsBootInterface
NotBoot Bool
False
ImportDeclQualifiedStyle
QualifiedPost Bool
True forall a. Maybe a
Nothing forall a. Maybe a
Nothing
#else
qualifiedImplicitImport x = noL $ ImportDecl noE NoSourceText (noL x) NoRawPkgQual NotBoot False
QualifiedPost True Nothing Nothing
#endif
type PluginEnv = (?hscenv :: HscEnv, ?uniqSupply :: IORef UniqSupply)
dropRnTraceFlags :: HscEnv -> HscEnv
#if __GLASGOW_HASKELL__ < 808
dropRnTraceFlags env@HscEnv{hsc_dflags = dflags} = env{hsc_dflags = dopt_unset dflags Opt_D_dump_rn_trace}
#else
dropRnTraceFlags :: HscEnv -> HscEnv
dropRnTraceFlags = forall a. a -> a
id
#endif
freeTyVars :: PluginEnv => LHsType GhcPs -> [Located RdrName]
#if __GLASGOW_HASKELL__ < 808
{-# NOINLINE freeTyVars #-}
freeTyVars = freeKiTyVarsAllVars . runRnM . extractHsTyRdrTyVars
where
runRnM :: RnM a -> a
runRnM rnm = unsafePerformIO $ do
let env = Env ?hscenv ?uniqSupply unused unused
runIOEnv env rnm
unused = error "never called"
#elif __GLASGOW_HASKELL__ < 810
freeTyVars = freeKiTyVarsAllVars . extractHsTyRdrTyVars
#else
freeTyVars :: PluginEnv => LHsType GhcPs -> [Located RdrName]
freeTyVars = forall a b. (a -> b) -> [a] -> [b]
map forall a e. LocatedAn a e -> Located e
reLoc forall b c a. (b -> c) -> (a -> b) -> a -> c
. LHsType GhcPs -> FreeKiTyVars
extractHsTyRdrTyVars
#endif
#if __GLASGOW_HASKELL__ >= 902
isLHsForAllTy :: LHsType GhcPs -> Bool
isLHsForAllTy :: LHsType GhcPs -> Bool
isLHsForAllTy (L SrcSpanAnnA
_ (HsForAllTy {})) = Bool
True
isLHsForAllTy LHsType GhcPs
_ = Bool
False
#endif
#if __GLASGOW_HASKELL__ >= 904
rdrNameFieldOcc :: FieldOcc GhcPs -> LocatedN RdrName
rdrNameFieldOcc = foLabel
#endif