| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Web.Atom
Description
You use this package by specifying XMLGen generator functions,
constructing a Feed, and then using the feedXML function to generate the
XML.
For example, using the xml package to generate our XML could look like this:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.Text as T
import Data.Time (UTCTime (..), fromGregorian)
import Text.XML.Light
import qualified Web.Atom as Atom
xmlgen :: Atom.XMLGen Element Content QName Attr
xmlgen = Atom.XMLGen
{ Atom.xmlElem = \n as ns -> Element n as ns Nothing
, Atom.xmlName = \nsMay name -> QName (T.unpack name)
(fmap T.unpack nsMay) Nothing
, Atom.xmlAttr = \k v -> Attr k (T.unpack v)
, Atom.xmlTextNode = \t -> Text $ CData CDataText (T.unpack t) Nothing
, Atom.xmlElemNode = Elem
}
feed :: Atom.Feed Element
feed = Atom.makeFeed
(Atom.unsafeURI "https://haskell.org/")
(Atom.TextHTML "The <em>Title</em>")
(UTCTime (fromGregorian 2015 7 8) 0)
main = putStrLn $ showTopElement $ Atom.feedXML xmlgen feedOr you might want to use the xml-conduit package:
{-# LANGUAGE OverloadedStrings #-}
import Data.Map.Lazy (fromList)
import qualified Data.Text as T
import qualified Data.Text.Lazy.IO as TL
import Data.Time (UTCTime (..), fromGregorian)
import Text.XML
import qualified Web.Atom as Atom
xmlgen :: Atom.XMLGen Element Node Name (Name, T.Text)
xmlgen = Atom.XMLGen
{ Atom.xmlElem = \n as ns -> Element n (fromList as) ns
, Atom.xmlName = \nsMay name -> Name name nsMay Nothing
, Atom.xmlAttr = \k v -> (k, v)
, Atom.xmlTextNode = NodeContent
, Atom.xmlElemNode = NodeElement
}
feed :: Atom.Feed Element
feed = Atom.makeFeed
(Atom.unsafeURI "https://haskell.org/")
(Atom.TextHTML "The <em>Title</em>")
(UTCTime (fromGregorian 2015 7 8) 0)
main = TL.putStrLn $ renderText def (Document (Prologue [] Nothing []) xml [])
where xml = Atom.feedXML xmlgen feed- makeFeed :: URI -> Text e -> UTCTime -> Feed e
- makeEntry :: URI -> Text e -> UTCTime -> Entry e
- feedXML :: XMLGen e node name attr -> Feed e -> e
- entryXML :: XMLGen e node name attr -> Entry e -> e
- data XMLGen elem node name attr = XMLGen {
- xmlElem :: name -> [attr] -> [node] -> elem
- xmlName :: Maybe Text -> Text -> name
- xmlAttr :: name -> Text -> attr
- xmlTextNode :: Text -> node
- xmlElemNode :: elem -> node
- data Feed e = Feed {
- feedId :: URI
- feedTitle :: Text e
- feedUpdated :: UTCTime
- feedSubtitle :: Maybe (Text e)
- feedIcon :: Maybe URI
- feedLogo :: Maybe URI
- feedRights :: Maybe (Text e)
- feedGenerator :: Maybe Generator
- feedAuthors :: [Person]
- feedContributors :: [Person]
- feedCategories :: [Category]
- feedLinks :: [Link]
- feedEntries :: [Entry e]
- data Entry e = Entry {
- entryId :: URI
- entryTitle :: Text e
- entryUpdated :: UTCTime
- entryPublished :: Maybe UTCTime
- entrySummary :: Maybe (Text e)
- entryContent :: Maybe (Content e)
- entryRights :: Maybe (Text e)
- entrySource :: Maybe (Source e)
- entryAuthors :: [Person]
- entryContributors :: [Person]
- entryCategories :: [Category]
- entryLinks :: [Link]
- data Source e = Source {
- sourceId :: Maybe URI
- sourceTitle :: Maybe (Text e)
- sourceUpdated :: Maybe UTCTime
- sourceSubtitle :: Maybe (Text e)
- sourceIcon :: Maybe URI
- sourceLogo :: Maybe URI
- sourceRights :: Maybe (Text e)
- sourceGenerator :: Maybe Generator
- sourceAuthors :: [Person]
- sourceContributors :: [Person]
- sourceCategories :: [Category]
- sourceLinks :: [Link]
- data Content e
- data Category = Category {}
- data Generator = Generator {
- generatorName :: Text
- generatorURI :: Maybe URI
- version :: Maybe Text
- data Person = Person {
- personName :: Text
- personURI :: Maybe URI
- personEmail :: Maybe Email
- data Email = Email Text
- data Rel
- data Text e
- data Link = Link {}
- data LanguageTag = LanguageTag Text
- data MediaType = MediaType ByteString
- data UTCTime :: *
- unsafeURI :: String -> URI
- data URI :: * = URI {}
Documentation
Constructors
| Feed | |
Fields
| |
Constructors
| Entry | |
Fields
| |
Constructors
| Source | |
Fields
| |
Constructors
| Category | |
Fields
| |
Constructors
| Generator | |
Fields
| |
Constructors
| Person | |
Fields
| |
Constructors
| Link | |
Constructors
| MediaType ByteString |
data UTCTime :: *
This is the simplest representation of UTC. It consists of the day number, and a time offset from midnight. Note that if a day has a leap second added to it, it will have 86401 seconds.