module Text.XML.WraXML.Document where import qualified Text.XML.WraXML.Tree as XmlTree import qualified Text.XML.Basic.Attribute as Attr import qualified Text.XML.Basic.Name as Name import qualified Text.XML.Basic.Format as Format import Control.Applicative (Applicative, liftA2, ) import Data.Traversable (traverse, ) data T i name str = Cons { forall i name str. T i name str -> Maybe [T name str] xmlDeclaration :: Maybe [Attr.T name str], forall i name str. T i name str -> Maybe String docType :: Maybe String, forall i name str. T i name str -> [T i name str] content :: [XmlTree.T i name str] } deriving Int -> T i name str -> ShowS forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a forall i name str. (Attribute name, Show str, Show i, Show name) => Int -> T i name str -> ShowS forall i name str. (Attribute name, Show str, Show i, Show name) => [T i name str] -> ShowS forall i name str. (Attribute name, Show str, Show i, Show name) => T i name str -> String showList :: [T i name str] -> ShowS $cshowList :: forall i name str. (Attribute name, Show str, Show i, Show name) => [T i name str] -> ShowS show :: T i name str -> String $cshow :: forall i name str. (Attribute name, Show str, Show i, Show name) => T i name str -> String showsPrec :: Int -> T i name str -> ShowS $cshowsPrec :: forall i name str. (Attribute name, Show str, Show i, Show name) => Int -> T i name str -> ShowS Show instance (Name.Tag name, Name.Attribute name) => Functor (T i name) where fmap :: forall a b. (a -> b) -> T i name a -> T i name b fmap a -> b f = forall name str0 str1 i. (Tag name, Attribute name) => (str0 -> str1) -> ([T i name str0] -> [T i name str1]) -> T i name str0 -> T i name str1 lift a -> b f (forall a b. (a -> b) -> [a] -> [b] map (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap a -> b f)) lift :: (Name.Tag name, Name.Attribute name) => (str0 -> str1) -> ([XmlTree.T i name str0] -> [XmlTree.T i name str1]) -> T i name str0 -> T i name str1 lift :: forall name str0 str1 i. (Tag name, Attribute name) => (str0 -> str1) -> ([T i name str0] -> [T i name str1]) -> T i name str0 -> T i name str1 lift str0 -> str1 g [T i name str0] -> [T i name str1] f (Cons Maybe [T name str0] xml Maybe String dtd [T i name str0] trees) = forall i name str. Maybe [T name str] -> Maybe String -> [T i name str] -> T i name str Cons (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (forall a b. (a -> b) -> [a] -> [b] map (forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap str0 -> str1 g)) Maybe [T name str0] xml) Maybe String dtd forall a b. (a -> b) -> a -> b $ [T i name str0] -> [T i name str1] f [T i name str0] trees liftA :: (Name.Tag name, Name.Attribute name, Applicative m) => (str0 -> m str1) -> ([XmlTree.T i name str0] -> m [XmlTree.T i name str1]) -> T i name str0 -> m (T i name str1) liftA :: forall name (m :: * -> *) str0 str1 i. (Tag name, Attribute name, Applicative m) => (str0 -> m str1) -> ([T i name str0] -> m [T i name str1]) -> T i name str0 -> m (T i name str1) liftA str0 -> m str1 g [T i name str0] -> m [T i name str1] f (Cons Maybe [T name str0] xml Maybe String dtd [T i name str0] trees) = forall (f :: * -> *) a b c. Applicative f => (a -> b -> c) -> f a -> f b -> f c liftA2 (\Maybe [T name str1] xmlDecl [T i name str1] cnt -> forall i name str. Maybe [T name str] -> Maybe String -> [T i name str] -> T i name str Cons Maybe [T name str1] xmlDecl Maybe String dtd [T i name str1] cnt) (forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) traverse (forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) traverse (forall (t :: * -> *) (f :: * -> *) a b. (Traversable t, Applicative f) => (a -> f b) -> t a -> f (t b) traverse str0 -> m str1 g)) Maybe [T name str0] xml) ([T i name str0] -> m [T i name str1] f [T i name str0] trees) formatXMLDeclaration :: (Name.Tag name, Name.Attribute name, Format.C string) => [Attr.T name string] -> ShowS formatXMLDeclaration :: forall name string. (Tag name, Attribute name, C string) => [T name string] -> ShowS formatXMLDeclaration [T name string] attrs = String -> ShowS showString String "<?xml" forall b c a. (b -> c) -> (a -> b) -> a -> c . forall name string. (Attribute name, C string) => [T name string] -> ShowS Attr.formatListBlankHead [T name string] attrs forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> ShowS showString String "?>" forall b c a. (b -> c) -> (a -> b) -> a -> c . ShowS Format.nl formatDocType :: String -> ShowS formatDocType :: String -> ShowS formatDocType String dtdStr = ShowS -> ShowS Format.angle (String -> ShowS showString String "!DOCTYPE " forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> ShowS showString String dtdStr) forall b c a. (b -> c) -> (a -> b) -> a -> c . ShowS Format.nl format :: (Name.Tag name, Name.Attribute name, Format.C string) => T i name string -> ShowS format :: forall name string i. (Tag name, Attribute name, C string) => T i name string -> ShowS format (Cons Maybe [T name string] xml Maybe String dtd [T i name string] trees) = forall b a. b -> (a -> b) -> Maybe a -> b maybe forall a. a -> a id forall name string. (Tag name, Attribute name, C string) => [T name string] -> ShowS formatXMLDeclaration Maybe [T name string] xml forall b c a. (b -> c) -> (a -> b) -> a -> c . forall b a. b -> (a -> b) -> Maybe a -> b maybe forall a. a -> a id String -> ShowS formatDocType Maybe String dtd forall b c a. (b -> c) -> (a -> b) -> a -> c . forall name string i. (Tag name, Attribute name, C string) => [T i name string] -> ShowS XmlTree.formatMany [T i name string] trees instance (Name.Tag name, Name.Attribute name, Format.C string) => Format.C (T i name string) where run :: T i name string -> ShowS run = forall name string i. (Tag name, Attribute name, C string) => T i name string -> ShowS format