packages feed

haskell-src-meta 0.0.4 → 0.0.5

raw patch · 5 files changed

+70/−47 lines, 5 filesdep ~haskell-src-extsPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: haskell-src-exts

API changes (from Hackage documentation)

- Language.Haskell.Meta.QQ.Vixey: vix :: QuasiQuoter
+ Language.Haskell.Meta.QQ.Idiom: i :: QuasiQuoter
+ Language.Haskell.Meta.Utils: mkClauseQ :: [PatQ] -> ExpQ -> ClauseQ
+ Language.Haskell.Meta.Utils: mkFunD :: Name -> [Pat] -> Exp -> Dec
+ Language.Haskell.TH.Instances.Lift: instance Ord Body
+ Language.Haskell.TH.Instances.Lift: instance Ord Callconv
+ Language.Haskell.TH.Instances.Lift: instance Ord Clause
+ Language.Haskell.TH.Instances.Lift: instance Ord Con
+ Language.Haskell.TH.Instances.Lift: instance Ord Dec
+ Language.Haskell.TH.Instances.Lift: instance Ord Exp
+ Language.Haskell.TH.Instances.Lift: instance Ord Foreign
+ Language.Haskell.TH.Instances.Lift: instance Ord FunDep
+ Language.Haskell.TH.Instances.Lift: instance Ord Guard
+ Language.Haskell.TH.Instances.Lift: instance Ord Lit
+ Language.Haskell.TH.Instances.Lift: instance Ord Match
+ Language.Haskell.TH.Instances.Lift: instance Ord Pat
+ Language.Haskell.TH.Instances.Lift: instance Ord Range
+ Language.Haskell.TH.Instances.Lift: instance Ord Safety
+ Language.Haskell.TH.Instances.Lift: instance Ord Stmt
+ Language.Haskell.TH.Instances.Lift: instance Ord Strict
+ Language.Haskell.TH.Instances.Lift: instance Ord Type

Files

haskell-src-meta.cabal view
@@ -1,5 +1,5 @@ name:               haskell-src-meta-version:            0.0.4+version:            0.0.5 cabal-version:      >= 1.6 build-type:         Simple license:            BSD3@@ -14,7 +14,7 @@                     to template-haskell abstract syntax isn't 100% complete yet.  library-  build-Depends:      base == 4.*, containers, haskell-src-exts == 1.0.*,+  build-Depends:      base == 4.*, containers, haskell-src-exts == 1.*,                       packedstring, template-haskell, pretty, syb   extensions:         TemplateHaskell, QuasiQuotes,                       RankNTypes, StandaloneDeriving,@@ -33,6 +33,6 @@                       Language.Haskell.Meta.QQ.Hs,                       Language.Haskell.Meta.QQ.Here,                       Language.Haskell.Meta.QQ.HsHere,-                      Language.Haskell.Meta.QQ.Vixey,+                      Language.Haskell.Meta.QQ.Idiom,                       Language.Haskell.Meta.QQ.BF,                       Language.Haskell.Meta.QQ.SKI
+ src/Language/Haskell/Meta/QQ/Idiom.hs view
@@ -0,0 +1,44 @@+{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}++-- | Idiom brackets. Vixey's idea.++module Language.Haskell.Meta.QQ.Idiom (i) where++import Data.Generics+  (Data,everywhere,mkT)+import Control.Applicative+import Language.Haskell.Meta+import Language.Haskell.TH.Lib+import Language.Haskell.TH.Quote+import Language.Haskell.TH.Syntax++-- ghci> [$i| (,) "foo" "bar" |]+-- [('f','b'),('f','a'),('f','r'),('o','b'),('o','a'),('o','r'),('o','b'),('o','a'),('o','r')]+i :: QuasiQuoter+i = QuasiQuoter ((cleanNames <$>) . applicateQ)+        (either fail return . parsePat)++applicateQ :: String -> ExpQ+applicateQ s = case either fail unwindE (parseExp s) of+                  x:y:xs -> foldl+                              (\e e' -> [|$e <*> $e'|])+                              [|$(return x) <$> $(return y)|]+                              (fmap return xs)+                  _ -> fail "applicateQ fails."++unwindE :: Exp -> [Exp]+unwindE = go []+  where go acc (e `AppE` e') = go (e':acc) e+        go acc e = e:acc++cleanNames :: (Data a) => a -> a+cleanNames = everywhere (mkT cleanName)+  where cleanName :: Name -> Name+        cleanName n+          | isNameU n = n+          | otherwise = (mkName . nameBase) n+        isNameU :: Name -> Bool+        isNameU (Name _ (NameU _)) = True+        isNameU _ = False++
− src/Language/Haskell/Meta/QQ/Vixey.hs
@@ -1,44 +0,0 @@-{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}---- | Vixey's idea.--module Language.Haskell.Meta.QQ.Vixey (vix) where--import Data.Generics-  (Data,everywhere,mkT)-import Control.Applicative-import Language.Haskell.Meta-import Language.Haskell.TH.Lib-import Language.Haskell.TH.Quote-import Language.Haskell.TH.Syntax---- ghci> [$i| (,) "foo" "bar" |]--- [('f','b'),('f','a'),('f','r'),('o','b'),('o','a'),('o','r'),('o','b'),('o','a'),('o','r')]-vix :: QuasiQuoter-vix = QuasiQuoter ((cleanNames <$>) . applicateQ)-        (either fail return . parsePat)--applicateQ :: String -> ExpQ-applicateQ s = case either fail unwindE (parseExp s) of-                  x:y:xs -> foldl-                              (\e e' -> [|$e <*> $e'|])-                              [|$(return x) <$> $(return y)|]-                              (fmap return xs)-                  _ -> fail "applicateQ fails."--unwindE :: Exp -> [Exp]-unwindE = go []-  where go acc (e `AppE` e') = go (e':acc) e-        go acc e = e:acc--cleanNames :: (Data a) => a -> a-cleanNames = everywhere (mkT cleanName)-  where cleanName :: Name -> Name-        cleanName n-          | isNameU n = n-          | otherwise = (mkName . nameBase) n-        isNameU :: Name -> Bool-        isNameU (Name _ (NameU _)) = True-        isNameU _ = False--
src/Language/Haskell/Meta/Utils.hs view
@@ -321,6 +321,11 @@ fromTyConI (TyConI dec) = Just dec fromTyConI _ = Nothing +mkFunD :: Name -> [Pat] -> Exp -> Dec+mkFunD f xs e = FunD f [Clause xs (NormalB e) []]++mkClauseQ :: [PatQ] -> ExpQ -> ClauseQ+mkClauseQ ps e = clause ps (normalB e) []  ----------------------------------------------------------------------------- 
src/Language/Haskell/TH/Instances/Lift.hs view
@@ -18,6 +18,24 @@ import Data.List(intercalate) import GHC.Base +deriving instance Ord Exp+deriving instance Ord Dec+deriving instance Ord Stmt+deriving instance Ord Type+deriving instance Ord Foreign+deriving instance Ord FunDep+deriving instance Ord Con+deriving instance Ord Body+deriving instance Ord Clause+deriving instance Ord Strict+deriving instance Ord Safety+deriving instance Ord Callconv+deriving instance Ord Guard+deriving instance Ord Range+deriving instance Ord Match+deriving instance Ord Pat+deriving instance Ord Lit+ instance Lift () where   lift () = [|()|]