{-# LANGUAGE CPP #-}
{- HLINT ignore "Use camelCase" -}

-- | Module containing the plugin.
module Compat(module Compat) where

import qualified GHC
import HsSyn
import SrcLoc

---------------------------------------------------------------------
-- UTILITIES

noL :: e -> GenLocated SrcSpan e
noL = noLoc

noE :: GHC.NoExt
noE = GHC.NoExt


---------------------------------------------------------------------
-- 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

compat_m_pats :: [Pat GhcPs] -> [LPat GhcPs]
compat_m_pats = map noL

#else

---------------------------------------------------------------------
-- GHC HEAD

mkAppType expr typ = noL $ HsAppType noE expr (HsWC noE typ)
mkTypeAnn expr typ = noL $ ExprWithTySig noE expr (HsWC noE (HsIB noE typ))

compat_m_pats :: [Pat GhcPs] -> [Pat GhcPs]
compat_m_pats = id

#endif