    {-# LANGUAGE CPP #-}
    module Language.Haskell.Meta.THCompat (
        module Language.Haskell.Meta.THCompat
    ) where

    import Language.Haskell.TH.Syntax

    conP :: Name -> [Pat] -> Pat
    #if MIN_VERSION_template_haskell(2,18,0)
    conP :: Name -> [Pat] -> Pat
    conP Name
    name = Name -> [Type] -> [Pat] -> Pat
    ConP Name
    name []
    #else
    conP = ConP
    #endif

    #if MIN_VERSION_template_haskell(2,17,0)
    plainTV :: Name -> TyVarBndr Specificity
    plainTV :: Name -> TyVarBndr Specificity
    plainTV Name
    n = Name -> Specificity -> TyVarBndr Specificity
    forall flag. Name -> flag -> TyVarBndr flag
    PlainTV Name
    n Specificity
    SpecifiedSpec
    #else
    plainTV :: Name -> TyVarBndr
    plainTV = PlainTV
    #endif

    #if MIN_VERSION_template_haskell(2,17,0)
    type TyVarBndr_ flag = TyVarBndr flag
    #else
    type TyVarBndr_ flag = TyVarBndr
    #endif