{-# LANGUAGE CPP #-} module TemplateHaskell.Compat.V0208 where import TemplateHaskell.Compat.V0208.Prelude import Language.Haskell.TH hiding (conP) classP :: Name -> [Type] -> Pred #if MIN_VERSION_template_haskell(2,10,0) classP :: Name -> [Type] -> Type classP Name n [Type] tl = forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl Type -> Type -> Type AppT (Name -> Type ConT Name n) [Type] tl #else classP = ClassP #endif instanceD :: Cxt -> Type -> [Dec] -> Dec #if MIN_VERSION_template_haskell(2,11,0) instanceD :: [Type] -> Type -> [Dec] -> Dec instanceD = Maybe Overlap -> [Type] -> Type -> [Dec] -> Dec InstanceD forall a. Maybe a Nothing #else instanceD = InstanceD #endif dataD :: Cxt -> Name -> [UnitTyVarBndr] -> [Con] -> [Name] -> Dec dataD :: [Type] -> Name -> [UnitTyVarBndr] -> [Con] -> [Name] -> Dec dataD [Type] cxt Name name [UnitTyVarBndr] varBndrs [Con] cons [Name] derivingNames = #if MIN_VERSION_template_haskell(2,12,0) [Type] -> Name -> [UnitTyVarBndr] -> Maybe Type -> [Con] -> [DerivClause] -> Dec DataD [Type] cxt Name name [UnitTyVarBndr] varBndrs forall a. Maybe a Nothing [Con] cons (forall (f :: * -> *) a. Applicative f => a -> f a pure (Maybe DerivStrategy -> [Type] -> DerivClause DerivClause forall a. Maybe a Nothing (forall a b. (a -> b) -> [a] -> [b] map Name -> Type ConT [Name] derivingNames))) #elif MIN_VERSION_template_haskell(2,11,0) DataD cxt name varBndrs Nothing cons (map ConT derivingNames) #else DataD cxt name varBndrs cons derivingNames #endif notStrict :: Strict notStrict :: Strict notStrict = #if MIN_VERSION_template_haskell(2,11,0) SourceUnpackedness -> SourceStrictness -> Strict Bang SourceUnpackedness NoSourceUnpackedness SourceStrictness NoSourceStrictness #else NotStrict #endif tupE :: [Exp] -> Exp #if MIN_VERSION_template_haskell(2,16,0) tupE :: [Exp] -> Exp tupE = \ case [Exp a] -> Exp a [Exp] a -> [Maybe Exp] -> Exp TupE (forall a b. (a -> b) -> [a] -> [b] map forall a. a -> Maybe a Just [Exp] a) #else tupE = TupE #endif flaglessPlainTV :: Name -> UnitTyVarBndr #if MIN_VERSION_template_haskell(2,17,0) flaglessPlainTV :: Name -> UnitTyVarBndr flaglessPlainTV Name name = forall flag. Name -> flag -> TyVarBndr flag PlainTV Name name () #else flaglessPlainTV = PlainTV #endif specifiedPlainTV :: Name -> SpecificityTyVarBndr #if MIN_VERSION_template_haskell(2,17,0) specifiedPlainTV :: Name -> SpecificityTyVarBndr specifiedPlainTV = forall a b c. (a -> b -> c) -> b -> a -> c flip forall flag. Name -> flag -> TyVarBndr flag PlainTV Specificity SpecifiedSpec #else specifiedPlainTV = PlainTV #endif #if MIN_VERSION_template_haskell(2,17,0) type SpecificityTyVarBndr = TyVarBndr Specificity #else type SpecificityTyVarBndr = TyVarBndr #endif #if MIN_VERSION_template_haskell(2,17,0) type UnitTyVarBndr = TyVarBndr () #else type UnitTyVarBndr = TyVarBndr #endif doE :: [Stmt] -> Exp #if MIN_VERSION_template_haskell(2,17,0) doE :: [Stmt] -> Exp doE = Maybe ModName -> [Stmt] -> Exp DoE forall a. Maybe a Nothing #else doE = DoE #endif #if MIN_VERSION_template_haskell(2,17,0) tyVarBndrKind :: TyVarBndr flag -> Maybe Kind tyVarBndrKind :: forall flag. TyVarBndr flag -> Maybe Type tyVarBndrKind = \ case KindedTV Name _ flag _ Type a -> forall a. a -> Maybe a Just Type a TyVarBndr flag _ -> forall a. Maybe a Nothing #else tyVarBndrKind :: TyVarBndr -> Maybe Kind tyVarBndrKind = \ case KindedTV _ a -> Just a _ -> Nothing #endif #if MIN_VERSION_template_haskell(2,18,0) conP :: Name -> [Pat] -> Pat conP :: Name -> [Pat] -> Pat conP Name name [Pat] pats = Name -> [Type] -> [Pat] -> Pat ConP Name name [] [Pat] pats #else conP :: Name -> [Pat] -> Pat conP = ConP #endif {-# deprecated conp "Use 'conP'" #-} conp :: Name -> [Pat] -> Pat conp :: Name -> [Pat] -> Pat conp = Name -> [Pat] -> Pat conP