haskell-src-meta 0.8.7 → 0.8.7.1
raw patch · 8 files changed
+113/−229 lines, 8 filesdep −faildep −safedep ~basedep ~haskell-src-extsdep ~template-haskellnew-uploaderPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: fail, safe
Dependency ranges changed: base, haskell-src-exts, template-haskell
API changes (from Hackage documentation)
- Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToName (Language.Haskell.Meta.Syntax.Translate.TyVarBndr_ flag)
+ Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToName (Language.Haskell.Meta.THCompat.TyVarBndr_ flag)
Files
- ChangeLog +4/−0
- haskell-src-meta.cabal +9/−21
- src/Language/Haskell/Meta/Parse.hs +1/−5
- src/Language/Haskell/Meta/Syntax/Translate.hs +15/−85
- src/Language/Haskell/Meta/THCompat.hs +30/−0
- src/Language/Haskell/Meta/Utils.hs +50/−79
- tests/Main.hs +4/−9
- tests/Splices.hs +0/−30
ChangeLog view
@@ -1,3 +1,7 @@+0.8.7.1+- Build on GHC 9.2+- Drop support for GHC < 8.2+ 0.8.7: - Compatibility with template-haskell shipped with GHC 9.0
haskell-src-meta.cabal view
@@ -1,5 +1,5 @@ name: haskell-src-meta-version: 0.8.7+version: 0.8.7.1 cabal-version: >= 1.10 build-type: Simple license: BSD3@@ -8,8 +8,8 @@ author: Matt Morrow copyright: (c) Matt Morrow maintainer: danburton.email@gmail.com-bug-reports: https://github.com/DanBurton/haskell-src-meta/issues-tested-with: GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.1+bug-reports: https://github.com/haskell-party/haskell-src-meta/issues+tested-with: GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.4, GHC == 8.10.7, GHC == 9.0.2, GHC == 9.2.1 synopsis: Parse source to template-haskell abstract syntax. description: The translation from haskell-src-exts abstract syntax to template-haskell abstract syntax isn't 100% complete yet.@@ -18,21 +18,19 @@ library default-language: Haskell2010- build-depends: base >= 4.8 && < 5,+ build-depends: base >= 4.10 && < 5, haskell-src-exts >= 1.18 && < 1.24, pretty >= 1.0 && < 1.2, syb >= 0.1 && < 0.8,- template-haskell >= 2.10 && < 2.18,+ template-haskell >= 2.12 && < 2.19, th-orphans >= 0.12 && < 0.14 - if impl(ghc < 7.8)- build-depends: safe <= 0.3.9- hs-source-dirs: src exposed-modules: Language.Haskell.Meta Language.Haskell.Meta.Parse Language.Haskell.Meta.Syntax.Translate Language.Haskell.Meta.Utils+ other-modules: Language.Haskell.Meta.THCompat test-suite unit default-language: Haskell2010@@ -42,20 +40,15 @@ build-depends: HUnit >= 1.2,- base >= 4.5,+ base >= 4.10, haskell-src-exts >= 1.17, haskell-src-meta, pretty >= 1.0,- template-haskell >= 2.10,+ template-haskell >= 2.12, tasty, tasty-hunit - -- this is needed to access Control.Monad.Fail on GHCs before 8.0- if !impl(ghc >= 8.0)- Build-Depends:- fail == 4.9.* - test-suite splices default-language: Haskell2010 type: exitcode-stdio-1.0@@ -82,12 +75,7 @@ syb, template-haskell - -- this is needed to access Control.Monad.Fail on GHCs before 8.0- if !impl(ghc >= 8.0)- Build-Depends:- fail == 4.9.* - other-modules: BF, Hs,@@ -96,4 +84,4 @@ source-repository head type: git- location: git://github.com/danburton/haskell-src-meta.git+ location: git://github.com/haskell-party/haskell-src-meta.git
src/Language/Haskell/Meta/Parse.hs view
@@ -29,11 +29,6 @@ emptyHsModule ) where -#if MIN_VERSION_template_haskell(2,11,0)-import Language.Haskell.TH.Syntax hiding (Extension (..))-#else-import Language.Haskell.TH.Syntax-#endif import Language.Haskell.Exts.Extension import Language.Haskell.Exts.Parser hiding (parseExp, parsePat, parseType)@@ -41,6 +36,7 @@ import qualified Language.Haskell.Exts.SrcLoc as Hs import qualified Language.Haskell.Exts.Syntax as Hs import Language.Haskell.Meta.Syntax.Translate+import Language.Haskell.TH.Syntax hiding (Extension (..)) -----------------------------------------------------------------------------
src/Language/Haskell/Meta/Syntax/Translate.hs view
@@ -14,23 +14,20 @@ module Language.Haskell.Meta.Syntax.Translate ( module Language.Haskell.Meta.Syntax.Translate+ , TyVarBndr_ ) where -import qualified Data.Char as Char-import qualified Data.List as List-import qualified Language.Haskell.Exts.SrcLoc as Exts.SrcLoc-import qualified Language.Haskell.Exts.Syntax as Exts-import qualified Language.Haskell.TH.Lib as TH-import qualified Language.Haskell.TH.Syntax as TH+import qualified Data.Char as Char+import qualified Data.List as List+import qualified Language.Haskell.Exts.SrcLoc as Exts.SrcLoc+import qualified Language.Haskell.Exts.Syntax as Exts+import Language.Haskell.Meta.THCompat (TyVarBndr_)+import qualified Language.Haskell.Meta.THCompat as Compat+import qualified Language.Haskell.TH.Lib as TH+import qualified Language.Haskell.TH.Syntax as TH ----------------------------------------------------------------------------- -#if MIN_VERSION_template_haskell(2,17,0)-type TyVarBndr_ flag = TH.TyVarBndr flag-#else-type TyVarBndr_ flag = TH.TyVarBndr-#endif- class ToName a where toName :: a -> TH.Name class ToNames a where toNames :: a -> [TH.Name] class ToLit a where toLit :: a -> TH.Lit@@ -45,17 +42,9 @@ class ToPred a where toPred :: a -> TH.Pred class ToTyVars a where toTyVars :: a -> [TyVarBndr_ ()] class ToMaybeKind a where toMaybeKind :: a -> Maybe TH.Kind-#if MIN_VERSION_template_haskell(2,11,0) class ToInjectivityAnn a where toInjectivityAnn :: a -> TH.InjectivityAnn-#endif -#if MIN_VERSION_template_haskell(2,12,0) type DerivClause = TH.DerivClause-#elif MIN_VERSION_template_haskell(2,11,0)-type DerivClause = TH.Pred-#else-type DerivClause = TH.Name-#endif class ToDerivClauses a where toDerivClauses :: a -> [DerivClause] @@ -208,7 +197,6 @@ -- * ToPat HsPat - instance ToPat (Exts.Pat l) where toPat (Exts.PVar _ n) = TH.VarP (toName n)@@ -222,7 +210,7 @@ TH.DoublePrimL r'' -> TH.DoublePrimL (negate r'') _ -> nonsense "toPat" "negating wrong kind of literal" l toPat (Exts.PInfixApp _ p n q) = TH.UInfixP (toPat p) (toName n) (toPat q)- toPat (Exts.PApp _ n ps) = TH.ConP (toName n) (fmap toPat ps)+ toPat (Exts.PApp _ n ps) = Compat.conP (toName n) (fmap toPat ps) toPat (Exts.PTuple _ Exts.Boxed ps) = TH.TupP (fmap toPat ps) toPat (Exts.PTuple _ Exts.Unboxed ps) = TH.UnboxedTupP (fmap toPat ps) toPat (Exts.PList _ ps) = TH.ListP (fmap toPat ps)@@ -273,11 +261,7 @@ toExp (Exts.Con _ n) = TH.ConE (toName n) toExp (Exts.Lit _ l) = TH.LitE (toLit l) toExp (Exts.InfixApp _ e o f) = TH.UInfixE (toExp e) (toExp o) (toExp f)-#if MIN_VERSION_template_haskell(2,12,0) toExp (Exts.App _ e (Exts.TypeApp _ t)) = TH.AppTypeE (toExp e) (toType t)-#else- toExp (Exts.App _ _ e@Exts.TypeApp{}) = noTHyet "toExp" "2.12.0" e-#endif toExp (Exts.App _ e f) = TH.AppE (toExp e) (toExp f) toExp (Exts.NegApp _ e) = TH.AppE (TH.VarE 'negate) (toExp e) toExp (Exts.Lambda _ ps e) = TH.LamE (fmap toPat ps) (toExp e)@@ -357,13 +341,13 @@ instance ToName TH.Name where toName = id -instance ToName (TyVarBndr_ flag) where+instance ToName (Compat.TyVarBndr_ flag) where #if MIN_VERSION_template_haskell(2,17,0) toName (TH.PlainTV n _) = n toName (TH.KindedTV n _ _) = n #else- toName (TH.PlainTV n) = n- toName (TH.KindedTV n _) = n+ toName (TH.PlainTV n) = n+ toName (TH.KindedTV n _) = n #endif #if !MIN_VERSION_haskell_src_exts(1,21,0)@@ -402,7 +386,7 @@ #if MIN_VERSION_template_haskell(2,17,0) toTyVarSpec :: TyVarBndr_ () -> TH.TyVarBndrSpec toTyVarSpec (TH.KindedTV n () k) = TH.KindedTV n TH.SpecifiedSpec k-toTyVarSpec (TH.PlainTV n ()) = TH.PlainTV n TH.SpecifiedSpec+toTyVarSpec (TH.PlainTV n ()) = TH.PlainTV n TH.SpecifiedSpec #else toTyVarSpec :: TyVarBndr_ flag -> TyVarBndr_ flag toTyVarSpec = id@@ -451,7 +435,6 @@ -- toType (Exts.TyInfix _ _ (Exts.PromotedName _ _) _) toStrictType :: Exts.Type l -> TH.StrictType-#if MIN_VERSION_template_haskell(2,11,0) toStrictType (Exts.TyBang _ s u t) = (TH.Bang (toUnpack u) (toStrict s), toType t) where toStrict (Exts.LazyTy _) = TH.SourceLazy@@ -461,19 +444,6 @@ toUnpack (Exts.NoUnpack _) = TH.SourceNoUnpack toUnpack (Exts.NoUnpackPragma _) = TH.NoSourceUnpackedness toStrictType x = (TH.Bang TH.NoSourceUnpackedness TH.NoSourceStrictness, toType x)-#else--- TODO: what is this comment? Outdated?--- TyBang l (BangType l) (Unpackedness l) (Type l)--- data BangType l = BangedTy l | LazyTy l | NoStrictAnnot l--- data Unpackedness l = Unpack l | NoUnpack l | NoUnpackPragma l-toStrictType (Exts.TyBang _ b u t) = (toStrict b u, toType t)- where- toStrict :: Exts.BangType l -> Exts.Unpackedness l -> TH.Strict- toStrict (Exts.BangedTy _) _ = TH.IsStrict- toStrict _ (Exts.Unpack _) = TH.Unpacked- toStrict _ _ = TH.NotStrict-toStrictType x = (TH.NotStrict, toType x)-#endif (.->.) :: TH.Type -> TH.Type -> TH.Type a .->. b = TH.AppT (TH.AppT TH.ArrowT a) b@@ -496,26 +466,11 @@ -- toPred p = todo "toPred" p instance ToDerivClauses (Exts.Deriving l) where-#if MIN_VERSION_template_haskell(2,12,0) #if MIN_VERSION_haskell_src_exts(1,20,0) toDerivClauses (Exts.Deriving _ strat irules) = [TH.DerivClause (fmap toDerivStrategy strat) (map toType irules)] #else toDerivClauses (Exts.Deriving _ irules) = [TH.DerivClause Nothing (map toType irules)] #endif-#elif MIN_VERSION_template_haskell(2,11,0)-#if MIN_VERSION_haskell_src_exts(1,20,0)- toDerivClauses (Exts.Deriving _ _ irules) = map toType irules-#else- toDerivClauses (Exts.Deriving _ irules) = map toType irules-#endif-#else--- template-haskell < 2.11-#if MIN_VERSION_haskell_src_exts(1,20,0)- toDerivClauses (Exts.Deriving _ _ irules) = concatMap toNames irules-#else- toDerivClauses (Exts.Deriving _ irules) = concatMap toNames irules-#endif-#endif instance ToDerivClauses a => ToDerivClauses (Maybe a) where toDerivClauses Nothing = []@@ -525,22 +480,17 @@ toDerivClauses = concatMap toDerivClauses -#if MIN_VERSION_template_haskell(2,12,0) && MIN_VERSION_haskell_src_exts(1,20,0) toDerivStrategy :: (Exts.DerivStrategy l) -> TH.DerivStrategy toDerivStrategy (Exts.DerivStock _) = TH.StockStrategy toDerivStrategy (Exts.DerivAnyclass _) = TH.AnyclassStrategy toDerivStrategy (Exts.DerivNewtype _) = TH.NewtypeStrategy-#if MIN_VERSION_haskell_src_exts(1,21,0)-#if MIN_VERSION_template_haskell(2,14,0)+#if MIN_VERSION_haskell_src_exts(1,21,0) && MIN_VERSION_template_haskell(2,14,0) toDerivStrategy (Exts.DerivVia _ t) = TH.ViaStrategy (toType t) #else toDerivStrategy d@Exts.DerivVia{} = noTHyet "toDerivStrategy" "2.14" d #endif-#endif -#endif - -- TODO LumiGuide -- instance ToCxt (Hs.Deriving l) where -- #if MIN_VERSION_haskell_src_exts(1,20,1)@@ -584,9 +534,7 @@ Exts.DataType _ -> TH.DataD (toCxt cxt) (toName h) (toTyVars h)-#if MIN_VERSION_template_haskell(2,11,0) Nothing-#endif (fmap qualConDeclToCon qcds) (toDerivClauses qns) Exts.NewType _ -> let qcd = case qcds of@@ -596,9 +544,7 @@ in TH.NewtypeD (toCxt cxt) (toName h) (toTyVars h)-#if MIN_VERSION_template_haskell(2,11,0) Nothing-#endif (qualConDeclToCon qcd) (toDerivClauses qns) @@ -616,7 +562,6 @@ where inline | b = TH.Inline | otherwise = TH.NoInline -#if MIN_VERSION_template_haskell(2,11,0) toDec (Exts.TypeFamDecl _ h sig inj) = TH.OpenTypeFamilyD $ TH.TypeFamilyHead (toName h) (toTyVars h)@@ -624,12 +569,6 @@ (fmap toInjectivityAnn inj) toDec (Exts.DataFamDecl _ _ h sig) = TH.DataFamilyD (toName h) (toTyVars h) (toMaybeKind sig)-#else- toDec (Exts.TypeFamDecl _ h sig inj)- = TH.FamilyD TH.TypeFam (toName h) (toTyVars h) (toMaybeKind sig)- toDec (Exts.DataFamDecl _ _ h sig)- = TH.FamilyD TH.DataFam (toName h) (toTyVars h) (toMaybeKind sig)-#endif toDec _a@(Exts.FunBind _ mtchs) = hsMatchesToFunD mtchs toDec (Exts.PatBind _ p rhs bnds) = TH.ValD (toPat p)@@ -642,18 +581,11 @@ -- the 'vars' bit seems to be for: instance forall a. C (T a) where ... -- TH's own parser seems to flat-out ignore them, and honestly I can't see -- that it's obviously wrong to do so.-#if MIN_VERSION_template_haskell(2,11,0) toDec (Exts.InstDecl _ Nothing irule ids) = TH.InstanceD Nothing (toCxt irule) (toType irule) (toDecs ids)-#else- toDec (Exts.InstDecl _ Nothing irule ids) = TH.InstanceD- (toCxt irule)- (toType irule)- (toDecs ids)-#endif toDec (Exts.ClassDecl _ cxt h fds decls) = TH.ClassD (toCxt cxt)@@ -674,10 +606,8 @@ toMaybeKind Nothing = Nothing toMaybeKind (Just a) = toMaybeKind a -#if MIN_VERSION_template_haskell(2,11,0) instance ToInjectivityAnn (Exts.InjectivityInfo l) where toInjectivityAnn (Exts.InjectivityInfo _ n ns) = TH.InjectivityAnn (toName n) (fmap toName ns)-#endif transAct :: Maybe (Exts.Activation l) -> TH.Phases transAct Nothing = TH.AllPhases
+ src/Language/Haskell/Meta/THCompat.hs view
@@ -0,0 +1,30 @@+{-# 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 = ConP name []+#else+conP = ConP+#endif+++#if MIN_VERSION_template_haskell(2,17,0)+plainTV :: Name -> TyVarBndr Specificity+plainTV n = PlainTV n 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
src/Language/Haskell/Meta/Utils.hs view
@@ -12,22 +12,59 @@ -- | This module is a staging ground -- for to-be-organized-and-merged-nicely code. -module Language.Haskell.Meta.Utils where+module Language.Haskell.Meta.Utils (+ module Language.Haskell.Meta.Utils+) where -import Control.Monad-import Data.Generics hiding (Fixity)-import Data.List (findIndex)-import Language.Haskell.Exts.Pretty (prettyPrint)-import Language.Haskell.Meta-import Language.Haskell.TH.Lib hiding (cxt)-import Language.Haskell.TH.Ppr-import Language.Haskell.TH.Syntax-import System.IO.Unsafe (unsafePerformIO)-import Text.PrettyPrint+import Control.Monad+import Data.Generics hiding (Fixity)+import Data.List (findIndex)+import Language.Haskell.Exts.Pretty (prettyPrint)+import Language.Haskell.Meta+import qualified Language.Haskell.Meta.THCompat as Compat (conP, plainTV)+import Language.Haskell.TH.Lib hiding (cxt)+import Language.Haskell.TH.Ppr+import Language.Haskell.TH.Syntax+import System.IO.Unsafe (unsafePerformIO)+import Text.PrettyPrint ----------------------------------------------------------------------------- +dataDCons :: Dec -> [Con]+dataDCons (DataD _ _ _ _ cons _) = cons+dataDCons _ = [] ++decCons :: Dec -> [Con]+decCons (DataD _ _ _ _ cons _) = cons+decCons (NewtypeD _ _ _ _ con _) = [con]+decCons _ = []+++decTyVars :: Dec -> [TyVarBndr_ ()]+decTyVars (DataD _ _ ns _ _ _) = ns+decTyVars (NewtypeD _ _ ns _ _ _) = ns+decTyVars (TySynD _ ns _) = ns+decTyVars (ClassD _ _ ns _ _) = ns+decTyVars _ = []+++decName :: Dec -> Maybe Name+decName (FunD n _) = Just n+decName (DataD _ n _ _ _ _) = Just n+decName (NewtypeD _ n _ _ _ _) = Just n+decName (TySynD n _ _) = Just n+decName (ClassD _ n _ _ _) = Just n+decName (SigD n _) = Just n+decName (ForeignD fgn) = Just (foreignName fgn)+decName _ = Nothing+++foreignName :: Foreign -> Name+foreignName (ImportF _ _ _ n _) = n+foreignName (ExportF _ _ n _) = n++ cleanNames :: (Data a) => a -> a cleanNames = everywhere (mkT cleanName) where cleanName :: Name -> Name@@ -161,11 +198,7 @@ (t',env4,new4) = renameT env3 new3 t in (ForallT ns'' cxt' t', env4, new4) where-#if MIN_VERSION_template_haskell(2,17,0)- unVarT (VarT n) = PlainTV n SpecifiedSpec-#else- unVarT (VarT n) = PlainTV n-#endif+ unVarT (VarT n) = Compat.plainTV n unVarT ty = error $ "renameT: unVarT: TODO for" ++ show ty renamePreds = renameThings renamePred renamePred = renameT@@ -223,51 +256,7 @@ -decCons :: Dec -> [Con]-#if MIN_VERSION_template_haskell(2,11,0)-decCons (DataD _ _ _ _ cons _) = cons-decCons (NewtypeD _ _ _ _ con _) = [con]-#else-decCons (DataD _ _ _ cons _) = cons-decCons (NewtypeD _ _ _ con _) = [con]-#endif-decCons _ = [] --decTyVars :: Dec -> [TyVarBndr_ ()]-#if MIN_VERSION_template_haskell(2,11,0)-decTyVars (DataD _ _ ns _ _ _) = ns-decTyVars (NewtypeD _ _ ns _ _ _) = ns-#else-decTyVars (DataD _ _ ns _ _) = ns-decTyVars (NewtypeD _ _ ns _ _) = ns-#endif-decTyVars (TySynD _ ns _) = ns-decTyVars (ClassD _ _ ns _ _) = ns-decTyVars _ = []---decName :: Dec -> Maybe Name-decName (FunD n _) = Just n-#if MIN_VERSION_template_haskell(2,11,0)-decName (DataD _ n _ _ _ _) = Just n-decName (NewtypeD _ n _ _ _ _) = Just n-#else-decName (DataD _ n _ _ _) = Just n-decName (NewtypeD _ n _ _ _) = Just n-#endif-decName (TySynD n _ _) = Just n-decName (ClassD _ n _ _ _) = Just n-decName (SigD n _) = Just n-decName (ForeignD fgn) = Just (foreignName fgn)-decName _ = Nothing---foreignName :: Foreign -> Name-foreignName (ImportF _ _ _ n _) = n-foreignName (ExportF _ _ n _) = n-- unwindT :: Type -> [Type] unwindT = go where go :: Type -> [Type]@@ -319,36 +308,18 @@ recCName (RecC n _) = Just n recCName _ = Nothing -dataDCons :: Dec -> [Con]-#if MIN_VERSION_template_haskell(2,11,0)-dataDCons (DataD _ _ _ _ cons _) = cons-#else-dataDCons (DataD _ _ _ cons _) = cons-#endif-dataDCons _ = []- fromDataConI :: Info -> Q (Maybe Exp)-#if MIN_VERSION_template_haskell(2,11,0) fromDataConI (DataConI dConN ty _tyConN) = let n = arityT ty in replicateM n (newName "a") >>= \ns -> return (Just (LamE- [ConP dConN (fmap VarP ns)]+ [Compat.conP dConN (fmap VarP ns)] #if MIN_VERSION_template_haskell(2,16,0) (TupE $ fmap (Just . VarE) ns) #else (TupE $ fmap VarE ns) #endif ))-#else-fromDataConI (DataConI dConN ty _tyConN _fxty) =- let n = arityT ty- in replicateM n (newName "a")- >>= \ns -> return (Just (LamE- [ConP dConN (fmap VarP ns)]- (TupE $ fmap VarE ns)))--#endif fromDataConI _ = return Nothing fromTyConI :: Info -> Maybe Dec
tests/Main.hs view
@@ -1,5 +1,3 @@-{-# LANGUAGE CPP #-}- module Main where import qualified Control.Monad.Fail as Fail@@ -8,11 +6,10 @@ import qualified Language.Haskell.Exts.Parser as Parser import Language.Haskell.Meta.Parse import qualified Language.Haskell.TH as TH--- import Test.Framework--- import Test.Framework.Providers.HUnit-import Test.HUnit (Assertion, (@?=))-import Test.Tasty (TestTree, defaultMain, testGroup)-import Test.Tasty.HUnit (testCase)+import Test.HUnit (Assertion, (@?=))+import Test.Tasty+ (TestTree, defaultMain, testGroup)+import Test.Tasty.HUnit (testCase) type Test = TestTree @@ -21,9 +18,7 @@ tests :: [Test] tests = [ derivingClausesTest-#if MIN_VERSION_template_haskell(2,12,0) , typeAppTest-#endif ] derivingClausesTest :: Test
tests/Splices.hs view
@@ -2,10 +2,7 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TemplateHaskell #-}--#if MIN_VERSION_template_haskell(2,12,0) {-# LANGUAGE TypeApplications #-}-#endif #if MIN_VERSION_template_haskell(2,14,0) {-# LANGUAGE ExplicitForAll #-}@@ -24,45 +21,22 @@ "unit :: IO ()\nunit = return ()") -- Testing that the [] constructor works in types,-#if MIN_VERSION_base(4,9,0) $(either error return $ Meta.parseDecs "nilp :: [a] -> ([] a)\nnilp [] = []")-#else--- CPP Note: Apparently ghc < 7 doesn't parse this correctly w/o the forall.--- https://github.com/DanBurton/haskell-src-meta/issues/2-$(either error return $ Meta.parseDecs- "nilp :: forall a. [a] -> ([] a)\nnilp [] = []")-#endif $(either error return $ Meta.parseDecs "pair :: (,) Int Int\npair = (,) 1 2") ----- Testing classes and instances ------#if MIN_VERSION_base(4,9,0) $(either error return $ Meta.parseDecs $ unlines ["class MyClass a where mymethod :: a -> b -> (a,b)" ,"instance MyClass Bool where mymethod a b = (a,b)" ])-#else--- CPP Note: Apparently ghc < 7 doesn't parse this correctly w/o the forall.--- https://github.com/DanBurton/haskell-src-meta/issues/2-$(either error return $ Meta.parseDecs $ unlines- ["class MyClass a where mymethod :: forall b. a -> b -> (a,b)"- ,"instance MyClass Bool where mymethod a b = (a,b)"- ])-#endif -#if MIN_VERSION_template_haskell(2,12,0) $(either error return $ Meta.parseDecsWithMode (Parser.defaultParseMode { Parser.extensions = [Extension.EnableExtension Extension.TypeApplications] }) $ unlines ["tenStr :: String" ,"tenStr = show @Int 10"])-#else--- Type Application not supported by template-haskell < 2.12-$(either error return $ Meta.parseDecs $ unlines- ["tenStr :: String"- ,"tenStr = show (10 :: Int)"])-#endif #if MIN_VERSION_template_haskell(2,14,0) $(either error return $ Meta.parseDecsWithMode@@ -84,11 +58,7 @@ $ unlines [ -- Not sure why but ghc 7.10 complains that "type var a is not in scope"-#if MIN_VERSION_template_haskell(2,11,0) "intConstraint :: (a ~ Int) => a"-#else- "intConstraint :: Int"-#endif ,"intConstraint = 3"]) -- Just to check that it works as intended