Copyright | (c) Niklas Broberg 2008-2013 |
---|---|
License | BSD-style (see the file LICENSE.txt) |
Maintainer | Niklas Broberg <niklas.broberg@gmail.com> |
Stability | experimental |
Portability | requires newtype deriving and MPTCs with fundeps and type families |
Safe Haskell | None |
Language | Haskell98 |
HSP.XMLGenerator
Description
The class and monad transformer that forms the basis of the literal XML syntax translation. Literal tags will be translated into functions of the GenerateXML class, and any instantiating monads with associated XML types can benefit from that syntax.
Synopsis
- newtype XMLGenT m a = XMLGenT (m a)
- unXMLGenT :: XMLGenT m a -> m a
- mapXMLGenT :: (m a -> n b) -> XMLGenT m a -> XMLGenT n b
- type Name a = (Maybe a, a)
- class Monad m => XMLGen m where
- type XMLType m
- type StringType m
- data ChildType m
- data AttributeType m
- genElement :: Name (StringType m) -> [XMLGenT m [AttributeType m]] -> [XMLGenT m [ChildType m]] -> XMLGenT m (XMLType m)
- genEElement :: Name (StringType m) -> [XMLGenT m [AttributeType m]] -> XMLGenT m (XMLType m)
- xmlToChild :: XMLType m -> ChildType m
- pcdataToChild :: StringType m -> ChildType m
- type GenXML m = XMLGenT m (XMLType m)
- type GenXMLList m = XMLGenT m [XMLType m]
- type GenChild m = XMLGenT m (ChildType m)
- type GenChildList m = XMLGenT m [ChildType m]
- type GenAttribute m = XMLGenT m (AttributeType m)
- type GenAttributeList m = XMLGenT m [AttributeType m]
- class XMLGen m => EmbedAsChild m c where
- asChild :: c -> GenChildList m
- data Attr n a = n := a
- class XMLGen m => EmbedAsAttr m a where
- asAttr :: a -> GenAttributeList m
- class (XMLGen m, SetAttr m (XMLType m), AppendChild m (XMLType m), EmbedAsChild m (XMLType m), EmbedAsChild m [XMLType m], EmbedAsChild m Text, EmbedAsChild m Char, EmbedAsChild m (), EmbedAsAttr m (Attr Text Text), EmbedAsAttr m (Attr Text Int), EmbedAsAttr m (Attr Text Bool)) => XMLGenerator m
- class XMLGen m => SetAttr m elem where
- setAttr :: elem -> GenAttribute m -> GenXML m
- setAll :: elem -> GenAttributeList m -> GenXML m
- (<@) :: (SetAttr m elem, EmbedAsAttr m attr) => elem -> attr -> GenXML m
- set :: (SetAttr m elem, EmbedAsAttr m attr) => elem -> attr -> GenXML m
- (<<@) :: (SetAttr m elem, EmbedAsAttr m attr) => elem -> [attr] -> GenXML m
- class XMLGen m => AppendChild m elem where
- (<:) :: (AppendChild m elem, EmbedAsChild m c) => elem -> c -> GenXML m
- app :: (AppendChild m elem, EmbedAsChild m c) => elem -> c -> GenXML m
- (<<:) :: (AppendChild m elem, EmbedAsChild m c) => elem -> [c] -> GenXML m
- class Show n => IsName n s where
- class TypeCast a b | a -> b, b -> a where
- typeCast :: a -> b
- class TypeCast' t a b | t a -> b, t b -> a where
- typeCast' :: t -> a -> b
- class TypeCast'' t a b | t a -> b, t b -> a where
- typeCast'' :: t -> a -> b
- class TypeCastM ma mb | ma -> mb, mb -> ma where
- typeCastM :: ma x -> mb x
- class TypeCastM' t ma mb | t ma -> mb, t mb -> ma where
- typeCastM' :: t -> ma x -> mb x
- class TypeCastM'' t ma mb | t ma -> mb, t mb -> ma where
- typeCastM'' :: t -> ma x -> mb x
Documentation
The monad transformer that allows a monad to generate XML values.
Constructors
XMLGenT (m a) |
Instances
MonadTrans XMLGenT Source # | |
Defined in HSP.XMLGenerator | |
(MonadReader r m, MonadWriter w m, MonadState s m) => MonadRWS r w s (XMLGenT m) Source # | |
Defined in HSP.XMLGenerator | |
MonadError e m => MonadError e (XMLGenT m) Source # | |
Defined in HSP.XMLGenerator | |
MonadReader r m => MonadReader r (XMLGenT m) Source # | |
MonadWriter w m => MonadWriter w (XMLGenT m) Source # | |
MonadState s m => MonadState s (XMLGenT m) Source # | |
(AppendChild m x, TypeCastM m1 m) => AppendChild m (XMLGenT m1 x) Source # | |
(TypeCastM m1 m, SetAttr m x) => SetAttr m (XMLGenT m1 x) Source # | |
Defined in HSP.XMLGenerator | |
(EmbedAsAttr m (Attr a v), TypeCastM m1 m) => EmbedAsAttr m (Attr a (XMLGenT m1 v)) Source # | |
Defined in HSP.XMLGenerator | |
(XMLGen m, EmbedAsAttr m a) => EmbedAsAttr m (XMLGenT m a) Source # | |
Defined in HSP.XMLGenerator Methods asAttr :: XMLGenT m a -> GenAttributeList m Source # | |
(EmbedAsChild m c, m ~ n) => EmbedAsChild m (XMLGenT n c) Source # | |
Defined in HSP.XMLGenerator Methods asChild :: XMLGenT n c -> GenChildList m Source # | |
Monad m => Monad (XMLGenT m) Source # | |
Functor m => Functor (XMLGenT m) Source # | |
Applicative m => Applicative (XMLGenT m) Source # | |
Alternative m => Alternative (XMLGenT m) Source # | |
MonadPlus m => MonadPlus (XMLGenT m) Source # | |
MonadIO m => MonadIO (XMLGenT m) Source # | |
Defined in HSP.XMLGenerator | |
MonadCont m => MonadCont (XMLGenT m) Source # | |
Defined in HSP.XMLGenerator |
mapXMLGenT :: (m a -> n b) -> XMLGenT m a -> XMLGenT n b Source #
map the inner monad
class Monad m => XMLGen m where Source #
Generate XML values in some XMLGenerator monad.
Minimal complete definition
Methods
genElement :: Name (StringType m) -> [XMLGenT m [AttributeType m]] -> [XMLGenT m [ChildType m]] -> XMLGenT m (XMLType m) Source #
genEElement :: Name (StringType m) -> [XMLGenT m [AttributeType m]] -> XMLGenT m (XMLType m) Source #
xmlToChild :: XMLType m -> ChildType m Source #
pcdataToChild :: StringType m -> ChildType m Source #
Instances
(Functor m, Monad m) => XMLGen (HSPT XML m) Source # | |
Defined in HSP.Monad Associated Types type XMLType (HSPT XML m) Source # type StringType (HSPT XML m) Source # data ChildType (HSPT XML m) Source # data AttributeType (HSPT XML m) Source # Methods genElement :: Name (StringType (HSPT XML m)) -> [XMLGenT (HSPT XML m) [AttributeType (HSPT XML m)]] -> [XMLGenT (HSPT XML m) [ChildType (HSPT XML m)]] -> XMLGenT (HSPT XML m) (XMLType (HSPT XML m)) Source # genEElement :: Name (StringType (HSPT XML m)) -> [XMLGenT (HSPT XML m) [AttributeType (HSPT XML m)]] -> XMLGenT (HSPT XML m) (XMLType (HSPT XML m)) Source # xmlToChild :: XMLType (HSPT XML m) -> ChildType (HSPT XML m) Source # pcdataToChild :: StringType (HSPT XML m) -> ChildType (HSPT XML m) Source # |
type GenXML m = XMLGenT m (XMLType m) Source #
Type synonyms to avoid writing out the XMLnGenT all the time
type GenXMLList m = XMLGenT m [XMLType m] Source #
type GenChildList m = XMLGenT m [ChildType m] Source #
type GenAttribute m = XMLGenT m (AttributeType m) Source #
type GenAttributeList m = XMLGenT m [AttributeType m] Source #
class XMLGen m => EmbedAsChild m c where Source #
Embed values as child nodes of an XML element. The parent type will be clear from the context so it is not mentioned.
Methods
asChild :: c -> GenChildList m Source #
Instances
Constructors
n := a |
Instances
(EmbedAsAttr m (Attr a v), TypeCastM m1 m) => EmbedAsAttr m (Attr a (XMLGenT m1 v)) Source # | |
Defined in HSP.XMLGenerator | |
(Show n, Show a) => Show (Attr n a) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text ()) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text ()) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Int) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Int) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Bool) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Bool) Source # | |
(Monad m, Functor m) => EmbedAsAttr (HSPT XML m) (Attr Text Char) Source # | |
(Monad m, Functor m) => EmbedAsAttr (HSPT XML m) (Attr Text Char) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Text) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Text) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Text) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Text) Source # | |
class XMLGen m => EmbedAsAttr m a where Source #
Similarly embed values as attributes of an XML element.
Methods
asAttr :: a -> GenAttributeList m Source #
Instances
EmbedAsAttr m a => EmbedAsAttr m [a] Source # | |
Defined in HSP.XMLGenerator Methods asAttr :: [a] -> GenAttributeList m Source # | |
XMLGen m => EmbedAsAttr m (AttributeType m) Source # | |
Defined in HSP.XMLGenerator Methods asAttr :: AttributeType m -> GenAttributeList m Source # | |
(EmbedAsAttr m (Attr a v), TypeCastM m1 m) => EmbedAsAttr m (Attr a (XMLGenT m1 v)) Source # | |
Defined in HSP.XMLGenerator | |
(XMLGen m, EmbedAsAttr m a) => EmbedAsAttr m (XMLGenT m a) Source # | |
Defined in HSP.XMLGenerator Methods asAttr :: XMLGenT m a -> GenAttributeList m Source # | |
(Monad m, Functor m) => EmbedAsAttr (HSPT XML m) Attribute Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text ()) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text ()) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Int) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Int) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Bool) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Bool) Source # | |
(Monad m, Functor m) => EmbedAsAttr (HSPT XML m) (Attr Text Char) Source # | |
(Monad m, Functor m) => EmbedAsAttr (HSPT XML m) (Attr Text Char) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Text) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Text) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Text) Source # | |
(Functor m, Monad m) => EmbedAsAttr (HSPT XML m) (Attr Text Text) Source # | |
class (XMLGen m, SetAttr m (XMLType m), AppendChild m (XMLType m), EmbedAsChild m (XMLType m), EmbedAsChild m [XMLType m], EmbedAsChild m Text, EmbedAsChild m Char, EmbedAsChild m (), EmbedAsAttr m (Attr Text Text), EmbedAsAttr m (Attr Text Int), EmbedAsAttr m (Attr Text Bool)) => XMLGenerator m Source #
class XMLGen m => SetAttr m elem where Source #
Set attributes on XML elements
Minimal complete definition
Methods
setAttr :: elem -> GenAttribute m -> GenXML m Source #
setAll :: elem -> GenAttributeList m -> GenXML m Source #
(<@) :: (SetAttr m elem, EmbedAsAttr m attr) => elem -> attr -> GenXML m Source #
prepend attr
to the list of attributes for the elem
set :: (SetAttr m elem, EmbedAsAttr m attr) => elem -> attr -> GenXML m Source #
prepend attr
to the list of attributes for the elem
(<<@) :: (SetAttr m elem, EmbedAsAttr m attr) => elem -> [attr] -> GenXML m Source #
prepend the list of attr
to the attributes for the elem
class XMLGen m => AppendChild m elem where Source #
Minimal complete definition
Methods
appChild :: elem -> GenChild m -> GenXML m Source #
appAll :: elem -> GenChildList m -> GenXML m Source #
Instances
(AppendChild m x, TypeCastM m1 m) => AppendChild m (XMLGenT m1 x) Source # | |
(Functor m, Monad m) => AppendChild (HSPT XML m) XML Source # | |
(<:) :: (AppendChild m elem, EmbedAsChild m c) => elem -> c -> GenXML m Source #
append child to the children of elem
app :: (AppendChild m elem, EmbedAsChild m c) => elem -> c -> GenXML m Source #
append child to the children of elem
(<<:) :: (AppendChild m elem, EmbedAsChild m c) => elem -> [c] -> GenXML m Source #
append children to the children of elem
class Show n => IsName n s where Source #
Names can be simple or qualified with a domain. We want to conveniently
use both simple strings or pairs wherever a Name
is expected.
Instances
IsName String String Source # | Strings can represent names, meaning a simple name with no domain. |
Defined in HSP.XMLGenerator | |
IsName String Text Source # | Strings can represent names, meaning a simple name with no domain. |
Defined in HSP.XMLGenerator | |
IsName Text Text Source # | Strings can represent names, meaning a simple name with no domain. |
Defined in HSP.XMLGenerator | |
IsName Text Text Source # | strings can represent names, meaning a simple name with no domain. |
Defined in HSP.XMLGenerator | |
Show a => IsName (Name a) a Source # | Names can represent names, of course. |
IsName (String, String) Text Source # | Pairs of strings can represent names, meaning a name qualified with a domain. |
Defined in HSP.XMLGenerator | |
IsName (Text, Text) Text Source # | Pairs of strings can represent names, meaning a name qualified with a domain. |
Defined in HSP.XMLGenerator | |
IsName (Text, Text) Text Source # | Pairs of strings can represent names, meaning a name qualified with a domain. |
Defined in HSP.XMLGenerator |
class TypeCast' t a b | t a -> b, t b -> a where Source #
Instances
TypeCast'' t a b => TypeCast' t a b Source # | |
Defined in HSP.XMLGenerator |
class TypeCast'' t a b | t a -> b, t b -> a where Source #
Methods
typeCast'' :: t -> a -> b Source #
Instances
TypeCast'' () a a Source # | |
Defined in HSP.XMLGenerator Methods typeCast'' :: () -> a -> a Source # |
class TypeCastM ma mb | ma -> mb, mb -> ma where Source #
Instances
TypeCastM' () ma mb => TypeCastM ma mb Source # | |
Defined in HSP.XMLGenerator |
class TypeCastM' t ma mb | t ma -> mb, t mb -> ma where Source #
Methods
typeCastM' :: t -> ma x -> mb x Source #
Instances
TypeCastM'' t ma mb => TypeCastM' t ma mb Source # | |
Defined in HSP.XMLGenerator Methods typeCastM' :: t -> ma x -> mb x Source # |
class TypeCastM'' t ma mb | t ma -> mb, t mb -> ma where Source #
Methods
typeCastM'' :: t -> ma x -> mb x Source #
Instances
TypeCastM'' () ma ma Source # | |
Defined in HSP.XMLGenerator Methods typeCastM'' :: () -> ma x -> ma x Source # |