packages feed

hsx 0.6.2 → 0.7.0

raw patch · 4 files changed

+54/−23 lines, 4 filesdep ~basePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: base

API changes (from Hackage documentation)

- HSX.XMLGenerator: instance [overlap ok] (EmbedAsAttr m a) => EmbedAsAttr m [a]
- HSX.XMLGenerator: instance [overlap ok] (EmbedAsChild m c) => EmbedAsChild m [c]
- HSX.XMLGenerator: instance [overlap ok] (Functor m) => Functor (XMLGenT m)
- HSX.XMLGenerator: instance [overlap ok] (Monad m) => Monad (XMLGenT m)
- HSX.XMLGenerator: instance [overlap ok] (MonadIO m) => MonadIO (XMLGenT m)
- HSX.XMLGenerator: instance [overlap ok] (MonadPlus m) => MonadPlus (XMLGenT m)
- HSX.XMLGenerator: instance [overlap ok] (TypeCast' () a b) => TypeCast a b
- HSX.XMLGenerator: instance [overlap ok] (TypeCast'' t a b) => TypeCast' t a b
- HSX.XMLGenerator: instance [overlap ok] (TypeCastM' () ma mb) => TypeCastM ma mb
- HSX.XMLGenerator: instance [overlap ok] (TypeCastM'' t ma mb) => TypeCastM' t ma mb
- HSX.XMLGenerator: instance [overlap ok] (XMLGen m) => EmbedAsAttr m (Attribute m)
- HSX.XMLGenerator: instance [overlap ok] (XMLGen m) => EmbedAsChild m (Child m)
+ HSX.XMLGenerator: instance [overlap ok] EmbedAsAttr m a => EmbedAsAttr m [a]
+ HSX.XMLGenerator: instance [overlap ok] EmbedAsChild m c => EmbedAsChild m [c]
+ HSX.XMLGenerator: instance [overlap ok] Functor m => Functor (XMLGenT m)
+ HSX.XMLGenerator: instance [overlap ok] Monad m => Monad (XMLGenT m)
+ HSX.XMLGenerator: instance [overlap ok] MonadIO m => MonadIO (XMLGenT m)
+ HSX.XMLGenerator: instance [overlap ok] MonadPlus m => MonadPlus (XMLGenT m)
+ HSX.XMLGenerator: instance [overlap ok] TypeCast' () a b => TypeCast a b
+ HSX.XMLGenerator: instance [overlap ok] TypeCast'' t a b => TypeCast' t a b
+ HSX.XMLGenerator: instance [overlap ok] TypeCastM' () ma mb => TypeCastM ma mb
+ HSX.XMLGenerator: instance [overlap ok] TypeCastM'' t ma mb => TypeCastM' t ma mb
+ HSX.XMLGenerator: instance [overlap ok] XMLGen m => EmbedAsAttr m (Attribute m)
+ HSX.XMLGenerator: instance [overlap ok] XMLGen m => EmbedAsChild m (Child m)
+ HSX.XMLGenerator: instance [overlap ok] XMLGen m => EmbedAsChild m String
+ HSX.XMLGenerator: mapXMLGenT :: (m a -> n b) -> XMLGenT m a -> XMLGenT n b
+ HSX.XMLGenerator: pcdataToChild :: XMLGen m => String -> Child m
- HSX.XMLGenerator: appAll :: (AppendChild m elem) => elem -> GenChildList m -> GenXML m
+ HSX.XMLGenerator: appAll :: AppendChild m elem => elem -> GenChildList m -> GenXML m
- HSX.XMLGenerator: appChild :: (AppendChild m elem) => elem -> GenChild m -> GenXML m
+ HSX.XMLGenerator: appChild :: AppendChild m elem => elem -> GenChild m -> GenXML m
- HSX.XMLGenerator: asAttr :: (EmbedAsAttr m a) => a -> GenAttributeList m
+ HSX.XMLGenerator: asAttr :: EmbedAsAttr m a => a -> GenAttributeList m
- HSX.XMLGenerator: asChild :: (EmbedAsChild m c) => c -> GenChildList m
+ HSX.XMLGenerator: asChild :: EmbedAsChild m c => c -> GenChildList m
- HSX.XMLGenerator: class (XMLGen m) => AppendChild m elem
+ HSX.XMLGenerator: class XMLGen m => AppendChild m elem
- HSX.XMLGenerator: class (XMLGen m) => EmbedAsAttr m a
+ HSX.XMLGenerator: class XMLGen m => EmbedAsAttr m a
- HSX.XMLGenerator: class (XMLGen m) => EmbedAsChild m c
+ HSX.XMLGenerator: class XMLGen m => EmbedAsChild m c
- HSX.XMLGenerator: class (Show n) => IsName n
+ HSX.XMLGenerator: class Show n => IsName n
- HSX.XMLGenerator: class (XMLGen m) => SetAttr m elem
+ HSX.XMLGenerator: class XMLGen m => SetAttr m elem
- HSX.XMLGenerator: class (Monad m) => XMLGen m where { type family XML m; data family Child m; data family Attribute m; { genEElement n ats = genElement n ats [] } }
+ HSX.XMLGenerator: class Monad m => XMLGen m where { type family XML m; data family Child m; data family Attribute m; { genEElement n ats = genElement n ats [] } }
- HSX.XMLGenerator: genEElement :: (XMLGen m) => Name -> [XMLGenT m [Attribute m]] -> XMLGenT m (XML m)
+ HSX.XMLGenerator: genEElement :: XMLGen m => Name -> [XMLGenT m [Attribute m]] -> XMLGenT m (XML m)
- HSX.XMLGenerator: genElement :: (XMLGen m) => Name -> [XMLGenT m [Attribute m]] -> [XMLGenT m [Child m]] -> XMLGenT m (XML m)
+ HSX.XMLGenerator: genElement :: XMLGen m => Name -> [XMLGenT m [Attribute m]] -> [XMLGenT m [Child m]] -> XMLGenT m (XML m)
- HSX.XMLGenerator: setAll :: (SetAttr m elem) => elem -> GenAttributeList m -> GenXML m
+ HSX.XMLGenerator: setAll :: SetAttr m elem => elem -> GenAttributeList m -> GenXML m
- HSX.XMLGenerator: setAttr :: (SetAttr m elem) => elem -> GenAttribute m -> GenXML m
+ HSX.XMLGenerator: setAttr :: SetAttr m elem => elem -> GenAttribute m -> GenXML m
- HSX.XMLGenerator: toName :: (IsName n) => n -> Name
+ HSX.XMLGenerator: toName :: IsName n => n -> Name
- HSX.XMLGenerator: typeCast :: (TypeCast a b) => a -> b
+ HSX.XMLGenerator: typeCast :: TypeCast a b => a -> b
- HSX.XMLGenerator: typeCast' :: (TypeCast' t a b) => t -> a -> b
+ HSX.XMLGenerator: typeCast' :: TypeCast' t a b => t -> a -> b
- HSX.XMLGenerator: typeCast'' :: (TypeCast'' t a b) => t -> a -> b
+ HSX.XMLGenerator: typeCast'' :: TypeCast'' t a b => t -> a -> b
- HSX.XMLGenerator: typeCastM :: (TypeCastM ma mb) => ma x -> mb x
+ HSX.XMLGenerator: typeCastM :: TypeCastM ma mb => ma x -> mb x
- HSX.XMLGenerator: typeCastM' :: (TypeCastM' t ma mb) => t -> ma x -> mb x
+ HSX.XMLGenerator: typeCastM' :: TypeCastM' t ma mb => t -> ma x -> mb x
- HSX.XMLGenerator: typeCastM'' :: (TypeCastM'' t ma mb) => t -> ma x -> mb x
+ HSX.XMLGenerator: typeCastM'' :: TypeCastM'' t ma mb => t -> ma x -> mb x
- HSX.XMLGenerator: xmlToChild :: (XMLGen m) => XML m -> Child m
+ HSX.XMLGenerator: xmlToChild :: XMLGen m => XML m -> Child m

Files

hsx.cabal view
@@ -1,8 +1,8 @@ Name:                   hsx-Version:                0.6.2+Version:                0.7.0 License:                BSD3 License-File:           LICENSE-Author:                 Niklas Broberg, Joel Björnson+Author:                 Niklas Broberg, Joel Bjornson Maintainer:             Niklas Broberg <nibro@cs.chalmers.se>  Stability:              Experimental@@ -29,15 +29,23 @@                          Homepage:               http://code.google.com/hsp -Build-Depends:          base>3 && <5, mtl, haskell-src-exts >= 1.5, utf8-string-Build-Type:             Simple Tested-With:            GHC==6.8.3, GHC==6.10.1 Cabal-Version: 		>= 1.2.3+Build-Type:             Simple -Hs-Source-Dirs: src-Exposed-Modules:        HSX.XMLGenerator, HSX.Transform+Flag base4 -Extensions:             MultiParamTypeClasses,+Library+  Build-depends:	mtl, haskell-src-exts >= 1.5, utf8-string+  if flag(base4)+    Build-depends:      base >= 4 && < 5+    cpp-options:        -DBASE4+  else+    Build-depends:      base >= 3 && < 4+  Hs-Source-Dirs: 	src+  Exposed-Modules:      HSX.XMLGenerator, HSX.Transform++  Extensions:           MultiParamTypeClasses,                         FunctionalDependencies,                         OverlappingInstances,                         UndecidableInstances,@@ -49,6 +57,6 @@                         TypeOperators,                         CPP -Executable:             trhsx-Main-Is:                Trhsx.hs-Hs-Source-Dirs:         src+Executable trhsx+  Main-Is:                Trhsx.hs+  Hs-Source-Dirs:         src
src/HSX/Transform.hs view
@@ -1260,7 +1260,7 @@         flatten S = consFun                         -- (:)         flatten (L mt) =             let f = flatten mt-                r = paren $ metaMap f+                r = paren $ metaMap [f]              in paren $ foldCompFun `metaComp` r    -- (foldComp . (map $flatten))         flatten (E mt1 mt2) =             let f1 = flatten mt1@@ -1782,18 +1782,18 @@ -- meta-level functions, i.e. functions that represent functions, -- and that take arguments representing arguments... whew! -metaReturn, metaConst, metaMap, metaUnzip :: Exp -> Exp+metaReturn, metaConst, metaUnzip :: Exp -> Exp metaReturn e = metaFunction "return" [e] metaConst e  = metaFunction "const" [e]-metaMap e    = metaFunction "map" [e] metaUnzip e  = metaFunction "unzip" [e]  metaEither, metaMaybe :: Exp -> Exp -> Exp metaEither e1 e2 = metaFunction "either" [e1,e2] metaMaybe e1 e2 = metaFunction "maybe" [e1,e2] -metaConcat :: [Exp] -> Exp+metaConcat, metaMap :: [Exp] -> Exp metaConcat es = metaFunction "concat" [listE es]+metaMap       = metaFunction "map"  metaAppend :: Exp -> Exp -> Exp metaAppend l1 l2 = infixApp l1 appendOp l2@@ -1870,7 +1870,7 @@ metaGenElement name ats mat cs =     let (d,n) = xNameParts name         ne    = tuple [metaMkMaybe $ fmap strE d, strE n]-        m = maybe id (\x y -> paren $ y `metaAppend` (metaMap $ metaAsAttr x)) mat+        m = maybe id (\x y -> paren $ y `metaAppend` (metaMap [argAsAttr, x])) mat         attrs = m $ listE $ map metaAsAttr ats      in metaFunction "genElement" [ne, attrs, listE cs] @@ -1879,13 +1879,16 @@ metaGenEElement name ats mat =     let (d,n) = xNameParts name         ne    = tuple [metaMkMaybe $ fmap strE d, strE n]-        m = maybe id (\x y -> paren $ y `metaAppend` (metaMap $ metaAsAttr x)) mat+        m = maybe id (\x y -> paren $ y `metaAppend` (metaMap [argAsAttr, x])) mat         attrs = m $ listE $ map metaAsAttr ats      in metaFunction "genEElement" [ne, attrs]  -- | Create an attribute by applying the overloaded @asAttr@ metaAsAttr :: Exp -> Exp metaAsAttr e = metaFunction "asAttr" [e]++argAsAttr :: Exp+argAsAttr = var $ name "asAttr"  -- | Create a property from an attribute and a value. metaAssign :: Exp -> Exp -> Exp
src/HSX/XMLGenerator.hs view
@@ -32,6 +32,10 @@ unXMLGenT :: XMLGenT m a -> m a
 unXMLGenT   (XMLGenT ma) =  ma
 
+-- | map the inner monad
+mapXMLGenT :: (m a -> n b) -> XMLGenT m a -> XMLGenT n b
+mapXMLGenT f (XMLGenT m) = XMLGenT (f m)
+
 instance MonadTrans XMLGenT where
  lift = XMLGenT
 
@@ -46,6 +50,7 @@  genEElement :: Name -> [XMLGenT m [Attribute m]]                          -> XMLGenT m (XML m)
  genEElement n ats = genElement n ats []
  xmlToChild :: XML m -> Child m
+ pcdataToChild :: String -> Child m
 
 -- | Type synonyms to avoid writing out the XMLnGenT all the time
 type GenXML m           = XMLGenT m (XML m)
@@ -77,6 +82,9 @@ instance (XMLGen m) => EmbedAsChild m (XML m) where
 #endif
  asChild = return . return . xmlToChild
+
+instance XMLGen m => EmbedAsChild m String where
+ asChild = return . return . pcdataToChild
 
 
 -- | Similarly embed values as attributes of an XML element.
src/Trhsx.hs view
@@ -1,17 +1,28 @@+{-# LANGUAGE CPP #-} module Main where  import Language.Haskell.Exts hiding (parse) import Prelude hiding (readFile, writeFile)-import System.IO.UTF8 (readFile, writeFile)+import System.IO.UTF8 (readFile, writeFile,hPutStrLn)+import System.IO (stderr) import HSX.Transform+import System.Exit (exitFailure)  import System.Environment (getArgs) import Data.List (isPrefixOf)+#ifdef BASE4+import Control.OldException (handle,ErrorCall(..))+#else+import Control.Exception (handle,ErrorCall(..))+#endif+  +showSrcLoc (SrcLoc {srcFilename=srcFilename,srcLine=srcLine,srcColumn=srcColumn}) = +  srcFilename ++ ":" ++ show srcLine ++ ":" ++ show srcColumn  checkParse :: ParseResult b -> b checkParse p = case p of                   ParseOk m -> m-                  ParseFailed loc s -> error $ "Error at " ++ show loc ++ ":\n" ++ s+                  ParseFailed loc s -> error $ showSrcLoc loc ++ ": " ++ s  transformFile :: String -> String -> String -> IO () transformFile origfile infile outfile = do@@ -41,11 +52,12 @@  main :: IO () main = do args <- getArgs-          case args of-           [origfile, infile, outfile] -> transformFile origfile infile outfile-           [infile, outfile] -> transformFile infile infile outfile-           [infile] -> testFile infile-           _ -> putStrLn usageString+          handle (\(ErrorCall text) -> hPutStrLn stderr text >> exitFailure ) $+           case args of+            [origfile, infile, outfile] -> transformFile origfile infile outfile+            [infile, outfile] -> transformFile infile infile outfile+            [infile] -> testFile infile+            _ -> putStrLn usageString  process :: FilePath -> String -> String process fp fc = prettyPrintWithMode (defaultMode {linePragmas=True}) $