hsp-0.10.0: Haskell Server Pages is a library for writing dynamic server-side web pages.

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
  - 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 s where
  - toName :: n -> Name s
- 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 Source |
MonadRWS r w s m => MonadRWS r w s (XMLGenT m) Source |
MonadError e m => MonadError e (XMLGenT m) Source |
MonadReader r m => MonadReader r (XMLGenT m) Source |
MonadState s m => MonadState s (XMLGenT m) Source |
MonadWriter w m => MonadWriter w (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 |
(EmbedAsAttr m (Attr a v), TypeCastM m1 m) => EmbedAsAttr m (Attr a (XMLGenT m1 v)) Source |
(XMLGen m, EmbedAsAttr m a) => EmbedAsAttr m (XMLGenT m a) Source |
(EmbedAsChild m c, (~) (* -> *) m n) => EmbedAsChild m (XMLGenT n c) 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 |
MonadCont m => MonadCont (XMLGenT m) Source |

unXMLGenT :: XMLGenT m a -> m a Source

un-lift.

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

map the inner monad

type Name a = (Maybe a, a) Source

class Monad m => XMLGen m where Source

Generate XML values in some XMLGenerator monad.

Minimal complete definition

genElement, xmlToChild, pcdataToChild

Associated Types

type XMLType m Source

type StringType m Source

data ChildType m Source

data AttributeType m Source

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 |

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 m Source

Instances

XMLGen m => EmbedAsChild m () Source |
(XMLGen m, (~) * (XMLType m) x) => EmbedAsChild m x Source |
XMLGen m => EmbedAsChild m (ChildType m) Source |
EmbedAsChild m c => EmbedAsChild m [c] Source |
(EmbedAsChild m c, (~) (* -> *) m n) => EmbedAsChild m (XMLGenT n c) Source |
(Functor m, Monad m) => EmbedAsChild (HSPT XML m) () Source |
(Functor m, Monad m) => EmbedAsChild (HSPT XML m) Char Source |
(Functor m, Monad m) => EmbedAsChild (HSPT XML m) Text Source |
(Functor m, Monad m) => EmbedAsChild (HSPT XML m) Text Source |
(Functor m, Monad m) => EmbedAsChild (HSPT XML m) String Source |
(Functor m, Monad m) => EmbedAsChild (HSPT XML m) XML Source |
(Functor m, Monad m) => EmbedAsChild (HSPT XML m) [XML] 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)) Source |
(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 |
XMLGen m => EmbedAsAttr m (AttributeType m) Source |
(EmbedAsAttr m (Attr a v), TypeCastM m1 m) => EmbedAsAttr m (Attr a (XMLGenT m1 v)) Source |
(XMLGen m, EmbedAsAttr m a) => EmbedAsAttr m (XMLGenT m a) 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

Instances

(Functor m, Monad m) => XMLGenerator (HSPT XML m) Source |

class XMLGen m => SetAttr m elem where Source

Set attributes on XML elements

Minimal complete definition

setAll

Methods

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

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

Instances

(TypeCastM m1 m, SetAttr m x) => SetAttr m (XMLGenT m1 x) Source |
(Functor m, Monad m) => SetAttr (HSPT XML m) XML 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

appAll

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.

Methods

toName :: n -> Name s Source

Instances

IsName String String Source | Strings can represent names, meaning a simple name with no domain.
IsName String Text Source | Strings can represent names, meaning a simple name with no domain.
IsName Text Text Source | Strings can represent names, meaning a simple name with no domain.
IsName Text Text Source | strings can represent names, meaning a simple name with no domain.
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.
IsName (Text, Text) Text Source | Pairs of strings can represent names, meaning a name qualified with a domain.
IsName (Text, Text) Text Source | 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 -> b Source

Instances

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

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

Methods

typeCast' :: t -> a -> b Source

Instances

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

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

Methods

typeCast'' :: t -> a -> b Source

Instances

TypeCast'' () a a Source |

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

Methods

typeCastM :: ma x -> mb x Source

Instances

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

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 |

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 |