air 2011.6.12 → 2011.6.18
raw patch · 6 files changed
+83/−20 lines, 6 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Air.Here.TH: here :: QuasiQuoter
+ Air.TH.Air: tuple :: Int -> ExpQ
+ Air.TH.Default: mkDefault :: Name -> Q [Dec]
+ Air.TH.Here: here :: QuasiQuoter
Files
- air.cabal +4/−2
- src/Air/Here/TH.hs +0/−16
- src/Air/TH.hs +6/−2
- src/Air/TH/Air.hs +18/−0
- src/Air/TH/Default.hs +37/−0
- src/Air/TH/Here.hs +18/−0
air.cabal view
@@ -1,5 +1,5 @@ Name: air-Version: 2011.6.12+Version: 2011.6.18 Build-type: Simple Synopsis: air Description: An alternative Haskell Prelude library.@@ -35,7 +35,9 @@ Air , Air.Light , Air.Env- , Air.Here.TH+ , Air.TH.Here+ , Air.TH.Default+ , Air.TH.Air , Air.TH , Air.Control.Monad.ListBuilder , Air.Control.Monad.ObjectBuilder
− src/Air/Here/TH.hs
@@ -1,16 +0,0 @@--- {-# LANGUAGE CPP #-}--module Air.Here.TH where--import Language.Haskell.TH.Quote -import Language.Haskell.TH.Syntax -import Language.Haskell.TH.Lib ---here :: QuasiQuoter -here = - QuasiQuoter - {- quoteExp = litE . stringL- , quotePat = litP . stringL- }
src/Air/TH.hs view
@@ -1,8 +1,12 @@ module Air.TH ( module Air.Data.Record.SimpleLabel- , module Air.Here.TH+ , module Air.TH.Here+ , module Air.TH.Default+ , module Air.TH.Air ) where import Air.Data.Record.SimpleLabel-import Air.Here.TH+import Air.TH.Here+import Air.TH.Default+import Air.TH.Air
+ src/Air/TH/Air.hs view
@@ -0,0 +1,18 @@+{-# LANGUAGE TemplateHaskell #-}++module Air.TH.Air where++import Language.Haskell.TH+import Control.Monad (replicateM)+++{-+> $(tuple 3) [1,2,3,4,5]+ (1,2,3)+ > $(tuple 2) [1,2]+ (1,2)+-}+tuple :: Int -> ExpQ+tuple n = do+ ns <- replicateM n (newName "x")+ lamE [foldr (\x y -> conP '(:) [varP x,y]) wildP ns] (tupE $ map varE ns)
+ src/Air/TH/Default.hs view
@@ -0,0 +1,37 @@+{-# LANGUAGE TemplateHaskell #-}++module Air.TH.Default where++import Language.Haskell.TH+import Data.Default+++-- $(reify ''Dummy >>= show > stringE)+-- "TyConI (DataD [] Main.Dummy [] [RecC Main.Dummy [(Main.test_field_1,NotStrict,ConT GHC.Base.String),(Main.test_field_2,NotStrict,ConT GHC.Integer.Type.Integer)]] [])"++-- runQ [d| instance Default Dummy where def = Dummy def def |]+-- [InstanceD [] (AppT (ConT Data.Default.Default) (ConT Main.Dummy)) [ValD (VarP def) (NormalB (AppE (AppE (ConE Main.Dummy) (VarE def)) (VarE def))) []]]++-- runQ [d| instance Default Dummy where def = Dummy {test_field_1 = def, test_field_2 = def} |]+-- [InstanceD [] (AppT (ConT Data.Default.Default) (ConT Main.Dummy)) [ValD (VarP def) (NormalB (RecConE Main.Dummy [(Main.test_field_1,VarE def),(Main.test_field_2,VarE def)])) []]]+++mkDefault :: Name -> Q [Dec]+mkDefault name = do+ info <- reify name+ case info of+ TyConI x -> do+ case x of+ (DataD _ data_name _ recs _) -> do+ case recs of+ [] -> error $ "no phontom type"+ (RecC record_name fields):_ -> do+ let def_name = mkName "def"+ let def_fields = map (\(field_name, _, _) -> (field_name, VarE def_name)) fields+ return $ return $ + InstanceD [] + (AppT (ConT ''Default) (ConT data_name)) + [ValD (VarP def_name) (NormalB (RecConE record_name def_fields)) []]+ NewtypeD _ _ _ _ _ -> error "Newtypes are not supported"+ _ -> error $ "Unknown declaration type"+ _ -> error "Only datatypes can be processed"
+ src/Air/TH/Here.hs view
@@ -0,0 +1,18 @@+-- {-# LANGUAGE CPP #-}++module Air.TH.Here where++import Language.Haskell.TH.Quote +import Language.Haskell.TH.Syntax +import Language.Haskell.TH.Lib +++here :: QuasiQuoter +here = + QuasiQuoter + {+ quoteExp = litE . stringL+ , quotePat = litP . stringL+ }++