hsx-0.10.4: HSX (Haskell Source with XML) allows literal XML syntax in Haskell source code.

Portability | requires newtype deriving and MPTCs with fundeps
Stability | experimental
Maintainer | Niklas Broberg, niklas.broberg@chalmers.se
Safe Haskell | None

HSX.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 = (Maybe String, String)
- class Monad m => XMLGen m where
  - type XMLType m
  - data ChildType m
  - data AttributeType m
  - genElement :: Name -> [XMLGenT m [AttributeType m]] -> [XMLGenT m [ChildType m]] -> XMLGenT m (XMLType m)
  - genEElement :: Name -> [XMLGenT m [AttributeType m]] -> XMLGenT m (XMLType m)
  - xmlToChild :: XMLType m -> ChildType m
  - pcdataToChild :: String -> 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
- 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 String, EmbedAsChild m Char, EmbedAsChild m (), EmbedAsAttr m (Attr String String), EmbedAsAttr m (Attr String Int), EmbedAsAttr m (Attr String Bool)) => XMLGenerator m
- data Attr n a = n := a
- 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 a) => elem -> [a] -> GenXML m
- class XMLGen m => AppendChild m elem where
  - appChild :: elem -> GenChild m -> GenXML m
  - appAll :: elem -> GenChildList m -> GenXML m
- (<:) :: (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 where
  - toName :: n -> Name
- 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

newtype XMLGenT m a Source

The monad transformer that allows a monad to generate XML values.

Constructors

XMLGenT (m a) |

Instances

MonadTrans XMLGenT |
MonadRWS r w s m => MonadRWS r w s (XMLGenT m) |
MonadError e m => MonadError e (XMLGenT m) |
MonadReader r m => MonadReader r (XMLGenT m) |
MonadState s m => MonadState s (XMLGenT m) |
MonadWriter w m => MonadWriter w (XMLGenT m) |
(AppendChild m x, TypeCastM m1 m) => AppendChild m (XMLGenT m1 x) |
(TypeCastM m1 m, SetAttr m x) => SetAttr m (XMLGenT m1 x) |
(EmbedAsAttr m (Attr a v), TypeCastM m1 m) => EmbedAsAttr m (Attr a (XMLGenT m1 v)) |
(XMLGen m, EmbedAsAttr m a) => EmbedAsAttr m (XMLGenT m a) |
(EmbedAsChild m c, ~ (* -> *) m n) => EmbedAsChild m (XMLGenT n c) |
Monad m => Monad (XMLGenT m) |
Functor m => Functor (XMLGenT m) |
MonadPlus m => MonadPlus (XMLGenT m) |
Applicative m => Applicative (XMLGenT m) |
Alternative m => Alternative (XMLGenT m) |
MonadIO m => MonadIO (XMLGenT m) |
MonadCont m => MonadCont (XMLGenT m) |

unXMLGenT :: XMLGenT m a -> m aSource

un-lift.

mapXMLGenT :: (m a -> n b) -> XMLGenT m a -> XMLGenT n bSource

map the inner monad

type Name = (Maybe String, String)Source

class Monad m => XMLGen m where Source

Generate XML values in some XMLGenerator monad.

Associated Types

type XMLType m Source

data ChildType m Source

data AttributeType m Source

Methods

genElement :: Name -> [XMLGenT m [AttributeType m]] -> [XMLGenT m [ChildType m]] -> XMLGenT m (XMLType m)Source

genEElement :: Name -> [XMLGenT m [AttributeType m]] -> XMLGenT m (XMLType m)Source

xmlToChild :: XMLType m -> ChildType mSource

pcdataToChild :: String -> ChildType mSource

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 GenChild m = XMLGenT m (ChildType 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 mSource

Instances

XMLGen m => EmbedAsChild m () |
XMLGen m => EmbedAsChild m String |
(XMLGen m, ~ * (XMLType m) x) => EmbedAsChild m x |
XMLGen m => EmbedAsChild m (ChildType m) |
EmbedAsChild m c => EmbedAsChild m [c] |
(EmbedAsChild m c, ~ (* -> *) m n) => EmbedAsChild m (XMLGenT n c) |

class XMLGen m => EmbedAsAttr m a where Source

Similarly embed values as attributes of an XML element.

Methods

asAttr :: a -> GenAttributeList mSource

Instances

EmbedAsAttr m a => EmbedAsAttr m [a] |
XMLGen m => EmbedAsAttr m (AttributeType m) |
(EmbedAsAttr m (Attr a v), TypeCastM m1 m) => EmbedAsAttr m (Attr a (XMLGenT m1 v)) |
(XMLGen m, EmbedAsAttr m a) => EmbedAsAttr m (XMLGenT m a) |

class (XMLGen m, SetAttr m (XMLType m), AppendChild m (XMLType m), EmbedAsChild m (XMLType m), EmbedAsChild m [XMLType m], EmbedAsChild m String, EmbedAsChild m Char, EmbedAsChild m (), EmbedAsAttr m (Attr String String), EmbedAsAttr m (Attr String Int), EmbedAsAttr m (Attr String Bool)) => XMLGenerator m Source

data Attr n a Source

Constructors

n := a |

Instances

(EmbedAsAttr m (Attr a v), TypeCastM m1 m) => EmbedAsAttr m (Attr a (XMLGenT m1 v)) |
(Show n, Show a) => Show (Attr n a) |

class XMLGen m => SetAttr m elem where Source

Set attributes on XML elements

Methods

setAttr :: elem -> GenAttribute m -> GenXML mSource

setAll :: elem -> GenAttributeList m -> GenXML mSource

Instances

(TypeCastM m1 m, SetAttr m x) => SetAttr m (XMLGenT m1 x) |

(<@) :: (SetAttr m elem, EmbedAsAttr m attr) => elem -> attr -> GenXML mSource

set :: (SetAttr m elem, EmbedAsAttr m attr) => elem -> attr -> GenXML mSource

(<<@) :: (SetAttr m elem, EmbedAsAttr m a) => elem -> [a] -> GenXML mSource

class XMLGen m => AppendChild m elem where Source

Methods

appChild :: elem -> GenChild m -> GenXML mSource

appAll :: elem -> GenChildList m -> GenXML mSource

Instances

(AppendChild m x, TypeCastM m1 m) => AppendChild m (XMLGenT m1 x) |

(<:) :: (AppendChild m elem, EmbedAsChild m c) => elem -> c -> GenXML mSource

app :: (AppendChild m elem, EmbedAsChild m c) => elem -> c -> GenXML mSource

(<<:) :: (AppendChild m elem, EmbedAsChild m c) => elem -> [c] -> GenXML mSource

class Show n => IsName n 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.

Methods

toName :: n -> Name Source

Instances

IsName String | Strings can represent names, meaning a simple name with no domain.
IsName Name | Names can represent names, of course.
IsName (String, String) | Pairs of strings can represent names, meaning a name qualified with a domain.

class TypeCast a b | a -> b, b -> a where Source

Methods

typeCast :: a -> bSource

Instances

TypeCast' () a b => TypeCast a b |

class TypeCast' t a b | t a -> b, t b -> a where Source

Methods

typeCast' :: t -> a -> bSource

Instances

TypeCast'' t a b => TypeCast' t a b |

class TypeCast'' t a b | t a -> b, t b -> a where Source

Methods

typeCast'' :: t -> a -> bSource

Instances

TypeCast'' () a a |

class TypeCastM ma mb | ma -> mb, mb -> ma where Source

Methods

typeCastM :: ma x -> mb xSource

Instances

TypeCastM' () ma mb => TypeCastM ma mb |

class TypeCastM' t ma mb | t ma -> mb, t mb -> ma where Source

Methods

typeCastM' :: t -> ma x -> mb xSource

Instances

TypeCastM'' t ma mb => TypeCastM' t ma mb |

class TypeCastM'' t ma mb | t ma -> mb, t mb -> ma where Source

Methods

typeCastM'' :: t -> ma x -> mb xSource

Instances

TypeCastM'' () ma ma |