packages feed

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 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+    }++