-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Basic Atom feed construction -- @package atom-basic @version 0.2.0 -- | 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 feed
--
--
-- Or 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
--
module Web.Atom
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 :: (name -> [attr] -> [node] -> elem) -> (Maybe Text -> Text -> name) -> (name -> Text -> attr) -> (Text -> node) -> (elem -> node) -> XMLGen elem node name attr
xmlElem :: XMLGen elem node name attr -> name -> [attr] -> [node] -> elem
xmlName :: XMLGen elem node name attr -> Maybe Text -> Text -> name
xmlAttr :: XMLGen elem node name attr -> name -> Text -> attr
xmlTextNode :: XMLGen elem node name attr -> Text -> node
xmlElemNode :: XMLGen elem node name attr -> elem -> node
data Feed e
Feed :: URI -> Text e -> UTCTime -> Maybe (Text e) -> Maybe URI -> Maybe URI -> Maybe (Text e) -> Maybe Generator -> [Person] -> [Person] -> [Category] -> [Link] -> [Entry e] -> Feed e
feedId :: Feed e -> URI
feedTitle :: Feed e -> Text e
feedUpdated :: Feed e -> UTCTime
feedSubtitle :: Feed e -> Maybe (Text e)
feedIcon :: Feed e -> Maybe URI
feedLogo :: Feed e -> Maybe URI
feedRights :: Feed e -> Maybe (Text e)
feedGenerator :: Feed e -> Maybe Generator
feedAuthors :: Feed e -> [Person]
feedContributors :: Feed e -> [Person]
feedCategories :: Feed e -> [Category]
feedLinks :: Feed e -> [Link]
feedEntries :: Feed e -> [Entry e]
data Entry e
Entry :: URI -> (Text e) -> UTCTime -> Maybe UTCTime -> Maybe (Text e) -> Maybe (Content e) -> Maybe (Text e) -> Maybe (Source e) -> [Person] -> [Person] -> [Category] -> [Link] -> Entry e
entryId :: Entry e -> URI
entryTitle :: Entry e -> (Text e)
entryUpdated :: Entry e -> UTCTime
entryPublished :: Entry e -> Maybe UTCTime
entrySummary :: Entry e -> Maybe (Text e)
entryContent :: Entry e -> Maybe (Content e)
entryRights :: Entry e -> Maybe (Text e)
entrySource :: Entry e -> Maybe (Source e)
entryAuthors :: Entry e -> [Person]
entryContributors :: Entry e -> [Person]
entryCategories :: Entry e -> [Category]
entryLinks :: Entry e -> [Link]
data Source e
Source :: Maybe URI -> Maybe (Text e) -> Maybe UTCTime -> Maybe (Text e) -> Maybe URI -> Maybe URI -> Maybe (Text e) -> Maybe Generator -> [Person] -> [Person] -> [Category] -> [Link] -> Source e
sourceId :: Source e -> Maybe URI
sourceTitle :: Source e -> Maybe (Text e)
sourceUpdated :: Source e -> Maybe UTCTime
sourceSubtitle :: Source e -> Maybe (Text e)
sourceIcon :: Source e -> Maybe URI
sourceLogo :: Source e -> Maybe URI
sourceRights :: Source e -> Maybe (Text e)
sourceGenerator :: Source e -> Maybe Generator
sourceAuthors :: Source e -> [Person]
sourceContributors :: Source e -> [Person]
sourceCategories :: Source e -> [Category]
sourceLinks :: Source e -> [Link]
data Content e
InlinePlainContent :: Text -> Content e
InlineHTMLContent :: Text -> Content e
InlineXHTMLContent :: e -> Content e
InlineXMLContent :: e -> (Maybe MediaType) -> Content e
InlineTextContent :: Text -> (Maybe MediaType) -> Content e
InlineBase64Content :: ByteString -> (Maybe MediaType) -> Content e
OutOfLineContent :: URI -> (Maybe MediaType) -> Content e
data Category
Category :: Text -> Maybe URI -> Maybe Text -> Category
categoryTerm :: Category -> Text
categoryScheme :: Category -> Maybe URI
categoryLabel :: Category -> Maybe Text
data Generator
Generator :: Text -> Maybe URI -> Maybe Text -> Generator
generatorName :: Generator -> Text
generatorURI :: Generator -> Maybe URI
version :: Generator -> Maybe Text
data Person
Person :: Text -> Maybe URI -> Maybe Email -> Person
personName :: Person -> Text
personURI :: Person -> Maybe URI
personEmail :: Person -> Maybe Email
data Email
Email :: Text -> Email
data Rel
RelText :: Text -> Rel
RelURI :: URI -> Rel
data Text e
TextPlain :: Text -> Text e
TextHTML :: Text -> Text e
TextXHTML :: e -> Text e
data Link
Link :: URI -> Maybe Rel -> Maybe MediaType -> Maybe LanguageTag -> Maybe Text -> Maybe Integer -> Link
linkHref :: Link -> URI
linkRel :: Link -> Maybe Rel
linkType :: Link -> Maybe MediaType
linkHrefLang :: Link -> Maybe LanguageTag
linkTitle :: Link -> Maybe Text
linkLength :: Link -> Maybe Integer
data LanguageTag
LanguageTag :: Text -> LanguageTag
data MediaType
MediaType :: ByteString -> MediaType
-- | 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.
data UTCTime :: *
unsafeURI :: String -> URI
-- | Represents a general universal resource identifier using its component
-- parts.
--
-- For example, for the URI
--
-- -- foo://anonymous@www.haskell.org:42/ghc?query#frag ---- -- the components are: data URI :: * URI :: String -> Maybe URIAuth -> String -> String -> String -> URI -- |
-- foo: --uriScheme :: URI -> String -- |
-- //anonymous@www.haskell.org:42 --uriAuthority :: URI -> Maybe URIAuth -- |
-- /ghc --uriPath :: URI -> String -- |
-- ?query --uriQuery :: URI -> String -- |
-- #frag --uriFragment :: URI -> String instance Show LanguageTag instance Eq LanguageTag instance Show Email instance Eq Email instance Show MediaType instance Eq MediaType instance Eq Rel instance Show e => Show (Text e) instance Eq e => Eq (Text e) instance Show e => Show (Content e) instance Eq e => Eq (Content e) instance Show Person instance Eq Person instance Show Generator instance Eq Generator instance Show Category instance Eq Category instance Show Link instance Eq Link instance Show e => Show (Source e) instance Eq e => Eq (Source e) instance Show e => Show (Entry e) instance Eq e => Eq (Entry e) instance Show e => Show (Feed e) instance Eq e => Eq (Feed e) instance ToXML e UTCTime instance ToXML e URI instance ToXML e Link instance ToXML e Generator instance ToXML e Category instance ToXML e Person instance ToXML e (Content e) instance ToXML e (Text e) instance ToXML e (Source e) instance ToXML e (Entry e) instance ToXML e (Feed e) instance IsString (Text e) instance IsString MediaType instance Show Rel