module WebBits.Html.Instances() where
import qualified Prelude as Prelude
import Prelude (Functor,map,fmap)
import qualified Data.List as List
import qualified Data.Char as Char
import Data.Foldable
import Data.Traversable
import Control.Applicative
import WebBits.Html.Syntax
ltraverse:: (Traversable t, Applicative f) => (a -> f b) -> [t a] -> f [t b]
ltraverse f [] = pure []
ltraverse f (x:xs) = pure (:) <*> (traverse f x) <*> ltraverse f xs
instance Functor (Attribute a) where
fmap f (Attribute id val a) = Attribute id val a
fmap f (AttributeExpr a id script def) = AttributeExpr a id (f script) def
instance Functor (Html a) where
fmap f (Element id attrs children a) =
Element id (map (fmap f) attrs) (map (fmap f) children) a
fmap f (Text str a) = Text str a
fmap f (Comment str a) = Comment str a
fmap f (HtmlSeq xs) = HtmlSeq (map (fmap f) xs)
fmap f (ProcessingInstruction str a) = ProcessingInstruction str a
fmap f (InlineScript script a def) = InlineScript (f script) a def
fmap f (Script script a) = Script (f script) a
instance Foldable (Attribute a) where
foldr f x (Attribute id val a) = x
foldr f x (AttributeExpr a id script def) = f script x
instance Foldable (Html a) where
foldr f x (Element id attrs children a) =
Prelude.foldr (\child x' -> foldr f x' child) x children
foldr f x (Text str a) = x
foldr f x (Comment str a) = x
foldr f x (HtmlSeq ys) =
Prelude.foldr (\child x' -> foldr f x' child) x ys
foldr f x (ProcessingInstruction str a) = x
foldr f x (InlineScript script a def) = f script x
foldr f x (Script script a) = f script x
instance Traversable (Attribute a) where
traverse f (Attribute id val a) =
pure (Attribute id val a)
traverse f (AttributeExpr a id script def) =
(AttributeExpr a id) <$> (f script) <*> pure def
instance Traversable (Html a) where
traverse f (Element id attrs children a) =
(Element id) <$> ltraverse f attrs <*> ltraverse f children <*> pure a
traverse f (Text str a) =
pure (Text str a)
traverse f (Comment str a) =
pure (Comment str a)
traverse f (HtmlSeq xs) =
HtmlSeq <$> ltraverse f xs
traverse f (ProcessingInstruction str a) =
pure (ProcessingInstruction str a)
traverse f (InlineScript script a def) =
InlineScript <$> (f script) <*> pure a <*> pure def
traverse f (Script script a) =
Script <$> (f script) <*> pure a