{-# LANGUAGE CPP #-}
{- HLINT ignore "Use camelCase" -}
-- | Module containing the plugin.
module Compat(module Compat) where
import GHC
import BasicTypes
#if __GLASGOW_HASKELL__ < 810
import HsSyn as Compat
#else
import GHC.Hs as Compat
#endif
---------------------------------------------------------------------
-- UTILITIES
noL :: e -> GenLocated SrcSpan e
noL = noLoc
#if __GLASGOW_HASKELL__ < 810
noE :: NoExt
noE = NoExt
#else
noE :: NoExtField
noE = noExtField
#endif
---------------------------------------------------------------------
-- COMMON SIGNATURES
mkAppType :: LHsExpr GhcPs -> LHsType GhcPs -> LHsExpr GhcPs
mkTypeAnn :: LHsExpr GhcPs -> LHsType GhcPs -> LHsExpr GhcPs
#if __GLASGOW_HASKELL__ < 807
-- GHC 8.6
mkAppType expr typ = noL $ HsAppType (HsWC noE typ) expr
mkTypeAnn expr typ = noL $ ExprWithTySig (HsWC noE (HsIB noE typ)) expr
#else
-- GHC 8.8+
mkAppType expr typ = noL $ HsAppType noE expr (HsWC noE typ)
mkTypeAnn expr typ = noL $ ExprWithTySig noE expr (HsWC noE (HsIB noE typ))
#endif
#if __GLASGOW_HASKELL__ < 807
-- GHC 8.6
compat_m_pats :: [Pat GhcPs] -> [LPat GhcPs]
compat_m_pats = map noL
#elif __GLASGOW_HASKELL__ < 809
-- GHC 8.8
compat_m_pats :: [Pat GhcPs] -> [Pat GhcPs]
compat_m_pats = id
#else
-- 8.10
compat_m_pats :: [Pat GhcPs] -> [LPat GhcPs]
compat_m_pats = map noL
#endif
qualifiedImplicitImport :: ModuleName -> LImportDecl GhcPs
#if __GLASGOW_HASKELL__ < 809
-- GHC 8.8
qualifiedImplicitImport x = noL $ ImportDecl noE NoSourceText (noL x) Nothing False False
True {- qualified -} True {- implicit -} Nothing Nothing
#else
qualifiedImplicitImport x = noL $ ImportDecl noE NoSourceText (noL x) Nothing False False
QualifiedPost {- qualified -} True {- implicit -} Nothing Nothing
#endif