packages feed

haskell-src-meta 0.8.0.3 → 0.8.1

raw patch · 11 files changed

+142/−61 lines, 11 filesdep +containersdep ~basedep ~haskell-src-extsdep ~prettynew-uploaderPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: containers

Dependency ranges changed: base, haskell-src-exts, pretty, syb, template-haskell

API changes (from Hackage documentation)

- Language.Haskell.Meta.Syntax.Translate: collectVars :: Type -> [TyVarBndr]
- Language.Haskell.Meta.Syntax.Translate: fixForall :: Type -> Type
- Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToCxt a => Language.Haskell.Meta.Syntax.Translate.ToCxt (GHC.Base.Maybe a)
- Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToDecs a => Language.Haskell.Meta.Syntax.Translate.ToDecs (GHC.Base.Maybe a)
- Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToDerivClauses a => Language.Haskell.Meta.Syntax.Translate.ToDerivClauses (GHC.Base.Maybe a)
- Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToMaybeKind a => Language.Haskell.Meta.Syntax.Translate.ToMaybeKind (GHC.Base.Maybe a)
- Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToNames a => Language.Haskell.Meta.Syntax.Translate.ToNames (GHC.Base.Maybe a)
- Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToTyVars a => Language.Haskell.Meta.Syntax.Translate.ToTyVars (GHC.Base.Maybe a)
- Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToType (Language.Haskell.Exts.Syntax.Kind l)
- Language.Haskell.Meta.Utils: instance GHC.Show.Show Language.Haskell.TH.Lib.DecQ
- Language.Haskell.Meta.Utils: instance GHC.Show.Show Language.Haskell.TH.Lib.ExpQ
- Language.Haskell.Meta.Utils: instance GHC.Show.Show Language.Haskell.TH.Lib.TypeQ
+ Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToCxt a => Language.Haskell.Meta.Syntax.Translate.ToCxt (GHC.Maybe.Maybe a)
+ Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToDecs a => Language.Haskell.Meta.Syntax.Translate.ToDecs (GHC.Maybe.Maybe a)
+ Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToDerivClauses a => Language.Haskell.Meta.Syntax.Translate.ToDerivClauses (GHC.Maybe.Maybe a)
+ Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToMaybeKind a => Language.Haskell.Meta.Syntax.Translate.ToMaybeKind (GHC.Maybe.Maybe a)
+ Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToNames a => Language.Haskell.Meta.Syntax.Translate.ToNames (GHC.Maybe.Maybe a)
+ Language.Haskell.Meta.Syntax.Translate: instance Language.Haskell.Meta.Syntax.Translate.ToTyVars a => Language.Haskell.Meta.Syntax.Translate.ToTyVars (GHC.Maybe.Maybe a)
+ Language.Haskell.Meta.Utils: instance GHC.Show.Show Language.Haskell.TH.Lib.Internal.DecQ
+ Language.Haskell.Meta.Utils: instance GHC.Show.Show Language.Haskell.TH.Lib.Internal.ExpQ
+ Language.Haskell.Meta.Utils: instance GHC.Show.Show Language.Haskell.TH.Lib.Internal.TypeQ
- Language.Haskell.Meta.Syntax.Translate: toDerivStrategy :: (DerivStrategy l) -> DerivStrategy
+ Language.Haskell.Meta.Syntax.Translate: toDerivStrategy :: DerivStrategy l -> DerivStrategy
- Language.Haskell.Meta.Utils: cleanNames :: (Data a) => a -> a
+ Language.Haskell.Meta.Utils: cleanNames :: Data a => a -> a
- Language.Haskell.Meta.Utils: gpretty :: (Data a) => a -> String
+ Language.Haskell.Meta.Utils: gpretty :: Data a => a -> String
- Language.Haskell.Meta.Utils: normalizeT :: (Data a) => a -> a
+ Language.Haskell.Meta.Utils: normalizeT :: Data a => a -> a
- Language.Haskell.Meta.Utils: pretty :: (Show a) => a -> String
+ Language.Haskell.Meta.Utils: pretty :: Show a => a -> String
- Language.Haskell.Meta.Utils: showToPatQ :: (Show a) => a -> PatQ
+ Language.Haskell.Meta.Utils: showToPatQ :: Show a => a -> PatQ
- Language.Haskell.Meta.Utils: toExpQ :: (Lift a) => (String -> Q a) -> (String -> ExpQ)
+ Language.Haskell.Meta.Utils: toExpQ :: Lift a => (String -> Q a) -> String -> ExpQ
- Language.Haskell.Meta.Utils: toPatQ :: (Show a) => (String -> Q a) -> (String -> PatQ)
+ Language.Haskell.Meta.Utils: toPatQ :: Show a => (String -> Q a) -> String -> PatQ

Files

ChangeLog view
@@ -1,14 +1,17 @@-0.8.0.1+0.8.1:+- Compatible with GHC 8.6, haskell-src-exts 1.22++0.8.0.1: - Bump base and template-haskell library to versions shipped with GHC 7.6. -0.8+0.8: - Compatibility with GHC 8.2. - Remove deprecated modules. -0.7.0.1+0.7.0.1: - Fixed a bug that caused deriving clauses to be ignored on TH 2.11. -0.7.0+0.7.0: - Compatibility with haskell-src-exts 1.18. - Support dropped for GHC < 7.6 and haskell-src-exts < 1.17. 
README.md view
@@ -11,3 +11,5 @@ I don't really view this as "my" package so if you want write access to the github repository, or you think you could do a better job as maintainer, just ask.++The above was written by Ben Millwood, but I (Dan Burton) share the same sentiment.
examples/BF.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE BangPatterns, TemplateHaskell #-} -module Language.Haskell.Meta.QQ.BF (-   bf,bf2,bfHelloWorld+module BF (+   bf,bf2,bfHelloWorld,eval_,parse ) where  import Language.Haskell.Meta (parsePat)@@ -174,9 +174,3 @@         go !n acc (c  :cs) = (n+1, [Error ("go error: char "++show n                                     ++" illegal character: "++show c)], []) -}------
examples/Hs.hs view
@@ -2,7 +2,7 @@  -- | Eat your face! -module Language.Haskell.Meta.QQ.Hs (hs, pat) where+module Hs (hs, pat) where  import Language.Haskell.Meta (parseExp, parsePat) import Language.Haskell.Meta.Utils (pretty)
examples/HsHere.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveDataTypeable, PatternGuards, TemplateHaskell #-} -module Language.Haskell.Meta.QQ.HsHere (here) where+module HsHere (here) where  import Language.Haskell.Meta (parseExp, parsePat) import Language.Haskell.TH.Lib@@ -20,7 +20,7 @@  -- | Example: ----- > a x = [$here| random "text" $(x + 1)+-- > a x = [here| random "text" $(x + 1) -- >  something else|] -- -- Is like:@@ -28,7 +28,9 @@ -- > a x = " random \"text\" "++ show (x + 1) ++"\n  something else" here :: QuasiQuoter here = QuasiQuoter-        {quoteExp = hereExpQ+        {quoteType = fail "The here quoter is only for expressions and patterns"+        ,quoteDec = fail "The here quoter is only for expressions and patterns"+        ,quoteExp = hereExpQ         ,quotePat = herePatQ}  instance Lift Here@@ -111,4 +113,3 @@ cparenP  = char ')' obrackP  = char '[' cbrackP  = char ']'-
examples/SKI.hs view
@@ -1,13 +1,13 @@ {-# LANGUAGE DeriveDataTypeable, PatternGuards, TemplateHaskell #-} -module Language.Haskell.Meta.QQ.SKI (SKI(..),ski) where+module SKI (SKI(..),ski,parse) where  import Language.Haskell.Meta (parseExp, parsePat)-import Language.Haskell.TH.Lib+import Language.Haskell.TH.Lib hiding (parensP) import Language.Haskell.TH.Ppr import Language.Haskell.TH.Quote import Language.Haskell.TH.Syntax-import Language.Haskell.Meta.Utils (cleanNames, ppDoc, unQ)+import Language.Haskell.Meta.Utils (cleanNames, ppDoc, unsafeRunQ) import Text.ParserCombinators.ReadP import Data.Typeable(Typeable) import Data.Generics(Data)@@ -26,13 +26,13 @@ eval (I :$ x)               = eval x eval ((K :$ x) :$ y)        = eval x eval (((S :$ x) :$ y :$ z)) = eval (eval (x :$ z) :$ eval (y :$ z))-eval (E e :$ E e')          = E (unQ[|$(return e) $(return e')|])+eval (E e :$ E e')          = E (unsafeRunQ[|$(return e) $(return e')|]) eval (x :$ y)               = eval0 ((eval x) :$ (eval y)) eval  x                     = x eval0 (I :$ x)               = eval x eval0 ((K :$ x) :$ y)        = eval x eval0 (((S :$ x) :$ y :$ z)) = eval (eval (x :$ z) :$ eval (y :$ z))-eval0 (E e :$ E e')          = E (unQ[|$(return e) $(return e')|])+eval0 (E e :$ E e')          = E (unsafeRunQ[|$(return e) $(return e')|]) eval0  x                     = x  ski :: QuasiQuoter@@ -150,6 +150,3 @@        c = s $ (b $ b $ s) $ k $ k        b = s $ (k $ s) $ k -}---
haskell-src-meta.cabal view
@@ -1,5 +1,5 @@ name:               haskell-src-meta-version:            0.8.0.3+version:            0.8.1 cabal-version:      >= 1.8 build-type:         Simple license:            BSD3@@ -7,21 +7,21 @@ category:           Language, Template Haskell author:             Matt Morrow copyright:          (c) Matt Morrow-maintainer:         Ben Millwood <haskell@benmachine.co.uk>-bug-reports:        https://github.com/bmillwood/haskell-src-meta/issues-tested-with:        GHC == 7.6.3, GHC == 7.8.3, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.1+maintainer:         danburton.email@gmail.com+bug-reports:        https://github.com/DanBurton/haskell-src-meta/issues+tested-with:        GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.3 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. -extra-source-files: ChangeLog README.md examples/*.hs+extra-source-files: ChangeLog README.md  library-  build-depends:   base >= 4.6 && < 4.12,-                   haskell-src-exts >= 1.18 && < 1.21,+  build-depends:   base >= 4.6 && < 5,+                   haskell-src-exts >= 1.18 && < 1.22,                    pretty >= 1.0 && < 1.2,                    syb >= 0.1 && < 0.8,-                   template-haskell >= 2.8 && < 2.14,+                   template-haskell >= 2.8 && < 2.15,                    th-orphans >= 0.9.1 && < 0.14    if impl(ghc < 7.8)@@ -40,11 +40,11 @@    build-depends:     HUnit                >= 1.2  && < 1.7,-    base                 >= 4.5  && < 4.12,-    haskell-src-exts     >= 1.17 && < 1.21,+    base                 >= 4.5  && < 5,+    haskell-src-exts     >= 1.17 && < 1.22,     haskell-src-meta,     pretty               >= 1.0  && < 1.2,-    template-haskell     >= 2.7  && < 2.14,+    template-haskell     >= 2.7  && < 2.15,     test-framework       >= 0.8  && < 0.9,     test-framework-hunit >= 0.3  && < 0.4 @@ -57,6 +57,25 @@     base,     haskell-src-meta +test-suite examples+  type:             exitcode-stdio-1.0+  hs-source-dirs:   examples, tests+  main-is:          TestExamples.hs++  build-depends:+    base,+    containers,+    haskell-src-meta,+    syb,+    template-haskell,+    pretty++  other-modules:+    BF,+    Hs,+    HsHere,+    SKI+ source-repository head   type:     git-  location: git://github.com/bmillwood/haskell-src-meta.git+  location: git://github.com/danburton/haskell-src-meta.git
src/Language/Haskell/Meta/Parse.hs view
@@ -68,14 +68,10 @@ {-# DEPRECATED myDefaultParseMode, myDefaultExtensions   "The provided ParseModes aren't very meaningful, use your own instead" #-} myDefaultParseMode :: ParseMode-myDefaultParseMode = ParseMode+myDefaultParseMode = defaultParseMode   {parseFilename = []   ,baseLanguage = Haskell2010   ,extensions = map EnableExtension myDefaultExtensions-  ,ignoreLinePragmas = False-  ,ignoreLanguagePragmas = False-  ,fixities = Nothing-  ,ignoreFunctionArity = False   }  myDefaultExtensions :: [KnownExtension]
src/Language/Haskell/Meta/Syntax/Translate.hs view
@@ -314,11 +314,13 @@   toName (PlainTV n) = n   toName (KindedTV n _) = n +#if !MIN_VERSION_haskell_src_exts(1,21,0) instance ToType (Hs.Kind l) where   toType (Hs.KindStar _) = StarT   toType (Hs.KindFn _ k1 k2) = toType k1 .->. toType k2   toType (Hs.KindParen _ kp) = toType kp   toType (Hs.KindVar _ n) = VarT (toName n)+#endif  toKind :: Hs.Kind l -> Kind toKind = toType@@ -714,7 +716,7 @@  instance ToDecs (Hs.Decl l) where   toDecs a@(Hs.TypeSig _ ns t)-    = let xs = fmap (flip SigD (fixForall $ toType t) . toName) ns+    = let xs = fmap (flip SigD (toType t) . toName) ns        in xs    toDecs (Hs.InfixDecl l assoc Nothing ops) =@@ -728,17 +730,6 @@       Hs.AssocRight _ -> InfixR    toDecs a = [toDec a]--collectVars e = case e of-  VarT n -> [PlainTV n]-  AppT t1 t2 -> nub $ collectVars t1 ++ collectVars t2-  ForallT ns _ t -> collectVars t \\ ns-  _          -> []--fixForall t = case vs of-  [] -> t-  _  -> ForallT vs [] t-  where vs = collectVars t  instance ToDecs a => ToDecs [a] where   toDecs a = concatMap toDecs a
tests/Splices.hs view
@@ -1,26 +1,50 @@-{-#LANGUAGE TemplateHaskell#-}+{-# LANGUAGE CPP, TemplateHaskell #-} -- | Tests stuff mostly by just compiling correctly import Language.Haskell.Meta ------- Testing names:+----- Testing names -----  -- Test that the unit constructor works-$(either error return $ parseDecs +$(either error return $ parseDecs       "unit :: IO ()\nunit = return ()") --- Testing that the [] constructor works in types, -$(either error return $ parseDecs +-- Testing that the [] constructor works in types,+#if MIN_VERSION_base(4,9,0)+$(either error return $ 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 $ parseDecs+      "nilp :: forall a. [a] -> ([] a)\nnilp [] = []")+#endif -$(either error return $ parseDecs +$(either error return $ parseDecs       "pair :: (,) Int Int\npair = (,) 1 2")  +----- Testing classes and instances -----+#if MIN_VERSION_base(4,9,0)+$(either error return $ 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 $ parseDecs $ unlines+   ["class MyClass a where mymethod :: forall b. a -> b -> (a,b)"+   ,"instance MyClass Bool where mymethod a b = (a,b)"+   ])+#endif ++ -- Just to check that it works as intended main = do+  -9 <- return $(either error return $ parseExp "-3^2") :: IO Int   () <- unit   [] <- return (nilp [])   (1,2) <- return pair+  (True,1) <- return $ mymethod True 1   return ()
+ tests/TestExamples.hs view
@@ -0,0 +1,54 @@+{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}++import Control.Monad (when)++import qualified BF+import qualified Hs+import qualified HsHere+import qualified SKI++import SKI (SKI(S, K, I, (:$)))++-- Very dumb test framework+shouldBe :: (Show a, Eq a) => a -> a -> IO ()+actual `shouldBe` expected = case actual == expected of+  True -> return ()+  False -> do+    putStr "Expected: "+    print expected+    putStr "Actual: "+    print actual+    fail "Expectation failure"+++a :: Int -> String+a x = [HsHere.here| random "text" $(x + 1)+  something else|]++hereTest :: IO ()+hereTest = do+ a 3 `shouldBe` (" random \"text\" "++ show (3 + 1) ++"\n  something else")++-- TODO: better test exercising the bf quasiquoter++bfTest :: IO ()+bfTest = do+  BF.eval_ (BF.parse BF.bfHelloWorld) "" `shouldBe` "Hello World!\n"++hsTest :: IO ()+hsTest = do+  (\ [Hs.hs|a@(x,_)|] -> [Hs.hs|(a,x)|]) (42,88) `shouldBe` ((42,88),42)++-- TODO: better test exercising the ski quasiquoter++skiTest :: IO ()+skiTest = do+  SKI.parse "S(SS)IK(SK)" `shouldBe` ([(((S :$ (S :$ S)) :$ I) :$ K) :$ (S :$ K)],"")++main :: IO ()+main = do+  putStrLn ""+  hereTest+  bfTest+  hsTest+  skiTest