{-# language FlexibleContexts #-}
{-# language FlexibleInstances #-}
{-# language UndecidableInstances #-}
{-# language QuasiQuotes #-}
module TPDB.Data.Xml where
import TPDB.Data
import TPDB.Xml
import Text.Hamlet.XML
import Data.String
import Data.Typeable
instance XmlContent Identifier where
parseContents :: Cursor -> [Identifier]
parseContents = Cursor -> [Text]
content (Cursor -> [Text])
-> (Text -> Identifier) -> Cursor -> [Identifier]
forall node a b.
(Cursor node -> [a]) -> (a -> b) -> Cursor node -> [b]
&| \ Text
c -> Text -> Identifier
mknullary Text
c
toContents :: Identifier -> [Node]
toContents Identifier
i =
[xml|#{fromString $ escape $ show i}|]
instance ( TermC v c, Show v, XmlContent v, XmlContent c )
=> XmlContent ( Term v c ) where
toContents :: Term v c -> [Node]
toContents ( Var v
v ) = [xml|<var>#{fromString $ show v}|]
toContents ( Node c
f [Term v c]
args ) =
[xml|<funapp>
^{no_sharp_name_HACK ( toContents f )}
$forall arg <- args
<arg>^{toContents arg}
|]
no_sharp_name_HACK :: p -> p
no_sharp_name_HACK p
e = p
e
instance ( TermC v c, XmlContent ( Term v c ) )
=> XmlContent ( Rule ( Term v c ) ) where
toContents :: Rule (Term v c) -> [Node]
toContents Rule (Term v c)
u =
[xml|<rule>
<lhs>^{toContents $ lhs u}
<rhs>^{toContents $ rhs u}
|]