module Text.HTML.Moe.Type where

import Data.Default
import Control.Monad.Writer

data Element = 
    Element
      {
        name :: String
      , attributes :: [Attribute]
      , elements :: [Element]
      }
  | Raw String
  | Data String
  deriving (Show)

instance Default Element where
  def = Element def def def

data Attribute = Attribute
  {
    key :: String
  , value :: String
  }
  deriving (Show)

instance Default Attribute where
  def = Attribute def def

type MoeUnitT a = Writer [Element] a
type MoeUnit = MoeUnitT ()

type MoeCombinator = [Attribute] -> MoeUnit -> MoeUnit
type MoeCombinator' = MoeUnit -> MoeUnit