packages feed

type-of-html 1.0.1.0 → 1.0.1.1

raw patch · 6 files changed

+1440/−1436 lines, 6 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Html: (#) :: a -> b -> a # b
- Html: (:#:) :: a -> b -> (#) a b
- Html: A :: Element
- Html: AT :: b -> (:=) b
- Html: Abbr :: Element
- Html: AcceptA :: Attribute
- Html: AcceptCharsetA :: Attribute
- Html: AccesskeyA :: Attribute
- Html: Acronym :: Element
- Html: ActionA :: Attribute
- Html: Address :: Element
- Html: AlignA :: Attribute
- Html: AltA :: Attribute
- Html: Applet :: Element
- Html: Area :: Element
- Html: Article :: Element
- Html: Aside :: Element
- Html: AsyncA :: Attribute
- Html: Audio :: Element
- Html: AutocompleteA :: Attribute
- Html: AutofocusA :: Attribute
- Html: AutoplayA :: Attribute
- Html: AutosaveA :: Attribute
- Html: B :: Element
- Html: Base :: Element
- Html: Basefont :: Element
- Html: Bdi :: Element
- Html: Bdo :: Element
- Html: BgcolorA :: Attribute
- Html: Bgsound :: Element
- Html: Big :: Element
- Html: Blink :: Element
- Html: Blockquote :: Element
- Html: Body :: Element
- Html: BorderA :: Attribute
- Html: Br :: Element
- Html: BufferedA :: Attribute
- Html: Button :: Element
- Html: Canvas :: Element
- Html: Caption :: Element
- Html: Center :: Element
- Html: ChallengeA :: Attribute
- Html: CharsetA :: Attribute
- Html: CheckedA :: Attribute
- Html: Cite :: Element
- Html: CiteA :: Attribute
- Html: ClassA :: Attribute
- Html: Code :: Element
- Html: CodeA :: Attribute
- Html: CodebaseA :: Attribute
- Html: Col :: Element
- Html: Colgroup :: Element
- Html: ColorA :: Attribute
- Html: ColsA :: Attribute
- Html: ColspanA :: Attribute
- Html: Command :: Element
- Html: Content :: Element
- Html: ContentA :: Attribute
- Html: ContenteditableA :: Attribute
- Html: ContextmenuA :: Attribute
- Html: ControlsA :: Attribute
- Html: CoordsA :: Attribute
- Html: CrossoriginA :: Attribute
- Html: DOCTYPE :: Element
- Html: Data :: Element
- Html: DataA :: Attribute
- Html: Datalist :: Element
- Html: DatetimeA :: Attribute
- Html: Dd :: Element
- Html: DefaultA :: Attribute
- Html: DeferA :: Attribute
- Html: Del :: Element
- Html: Details :: Element
- Html: Dfn :: Element
- Html: Dialog :: Element
- Html: Dir :: Element
- Html: DirA :: Attribute
- Html: DirnameA :: Attribute
- Html: DisabledA :: Attribute
- Html: Div :: Element
- Html: Dl :: Element
- Html: DownloadA :: Attribute
- Html: DraggableA :: Attribute
- Html: DropzoneA :: Attribute
- Html: Dt :: Element
- Html: Element :: Element
- Html: Em :: Element
- Html: Embed :: Element
- Html: EnctypeA :: Attribute
- Html: Fieldset :: Element
- Html: Figcaption :: Element
- Html: Figure :: Element
- Html: Font :: Element
- Html: Footer :: Element
- Html: ForA :: Attribute
- Html: Form :: Element
- Html: FormA :: Attribute
- Html: FormactionA :: Attribute
- Html: Frame :: Element
- Html: Frameset :: Element
- Html: H1 :: Element
- Html: H2 :: Element
- Html: H3 :: Element
- Html: H4 :: Element
- Html: H5 :: Element
- Html: H6 :: Element
- Html: Head :: Element
- Html: Header :: Element
- Html: HeadersA :: Attribute
- Html: HeightA :: Attribute
- Html: Hgroup :: Element
- Html: HiddenA :: Attribute
- Html: HighA :: Attribute
- Html: Hr :: Element
- Html: HrefA :: Attribute
- Html: HreflangA :: Attribute
- Html: Html :: Element
- Html: HttpEquivA :: Attribute
- Html: I :: Element
- Html: IconA :: Attribute
- Html: IdA :: Attribute
- Html: Iframe :: Element
- Html: Image :: Element
- Html: Img :: Element
- Html: Input :: Element
- Html: Ins :: Element
- Html: IntegrityA :: Attribute
- Html: Isindex :: Element
- Html: IsmapA :: Attribute
- Html: ItempropA :: Attribute
- Html: Kbd :: Element
- Html: Keygen :: Element
- Html: KeytypeA :: Attribute
- Html: KindA :: Attribute
- Html: Label :: Element
- Html: LabelA :: Attribute
- Html: LangA :: Attribute
- Html: LanguageA :: Attribute
- Html: Legend :: Element
- Html: Li :: Element
- Html: Link :: Element
- Html: ListA :: Attribute
- Html: Listing :: Element
- Html: LoopA :: Attribute
- Html: LowA :: Attribute
- Html: Main :: Element
- Html: ManifestA :: Attribute
- Html: Map :: Element
- Html: Mark :: Element
- Html: Marquee :: Element
- Html: Math :: Element
- Html: MaxA :: Attribute
- Html: MaxlengthA :: Attribute
- Html: MediaA :: Attribute
- Html: Menu :: Element
- Html: Menuitem :: Element
- Html: Meta :: Element
- Html: Meter :: Element
- Html: MethodA :: Attribute
- Html: MinA :: Attribute
- Html: MinlengthA :: Attribute
- Html: Multicol :: Element
- Html: MultipleA :: Attribute
- Html: MutedA :: Attribute
- Html: NameA :: Attribute
- Html: Nav :: Element
- Html: Nextid :: Element
- Html: Nobr :: Element
- Html: Noembed :: Element
- Html: Noframes :: Element
- Html: Noscript :: Element
- Html: NovalidateA :: Attribute
- Html: Object :: Element
- Html: Ol :: Element
- Html: OpenA :: Attribute
- Html: Optgroup :: Element
- Html: OptimumA :: Attribute
- Html: Option :: Element
- Html: Output :: Element
- Html: P :: Element
- Html: Param :: Element
- Html: PatternA :: Attribute
- Html: Picture :: Element
- Html: PingA :: Attribute
- Html: PlaceholderA :: Attribute
- Html: Plaintext :: Element
- Html: PosterA :: Attribute
- Html: Pre :: Element
- Html: PreloadA :: Attribute
- Html: Progress :: Element
- Html: Q :: Element
- Html: RadiogroupA :: Attribute
- Html: Raw :: a -> Raw a
- Html: ReadonlyA :: Attribute
- Html: RelA :: Attribute
- Html: RequiredA :: Attribute
- Html: ReversedA :: Attribute
- Html: RowsA :: Attribute
- Html: RowspanA :: Attribute
- Html: Rp :: Element
- Html: Rt :: Element
- Html: Rtc :: Element
- Html: Ruby :: Element
- Html: S :: Element
- Html: Samp :: Element
- Html: SandboxA :: Attribute
- Html: ScopeA :: Attribute
- Html: ScopedA :: Attribute
- Html: Script :: Element
- Html: SeamlessA :: Attribute
- Html: Section :: Element
- Html: Select :: Element
- Html: SelectedA :: Attribute
- Html: Shadow :: Element
- Html: ShapeA :: Attribute
- Html: SizeA :: Attribute
- Html: SizesA :: Attribute
- Html: Slot :: Element
- Html: SlotA :: Attribute
- Html: Small :: Element
- Html: Source :: Element
- Html: Spacer :: Element
- Html: Span :: Element
- Html: SpanA :: Attribute
- Html: SpellcheckA :: Attribute
- Html: SrcA :: Attribute
- Html: SrcdocA :: Attribute
- Html: SrclangA :: Attribute
- Html: SrcsetA :: Attribute
- Html: StartA :: Attribute
- Html: StepA :: Attribute
- Html: Strike :: Element
- Html: Strong :: Element
- Html: Style :: Element
- Html: StyleA :: Attribute
- Html: Sub :: Element
- Html: Summary :: Element
- Html: SummaryA :: Attribute
- Html: Sup :: Element
- Html: Svg :: Element
- Html: TabindexA :: Attribute
- Html: Table :: Element
- Html: TargetA :: Attribute
- Html: Tbody :: Element
- Html: Td :: Element
- Html: Template :: Element
- Html: Textarea :: Element
- Html: Tfoot :: Element
- Html: Th :: Element
- Html: Thead :: Element
- Html: Time :: Element
- Html: Title :: Element
- Html: TitleA :: Attribute
- Html: Tr :: Element
- Html: Track :: Element
- Html: Tt :: Element
- Html: TypeA :: Attribute
- Html: U :: Element
- Html: Ul :: Element
- Html: UsemapA :: Attribute
- Html: ValueA :: Attribute
- Html: Var :: Element
- Html: Video :: Element
- Html: Wbr :: Element
- Html: WidthA :: Attribute
- Html: WrapA :: Attribute
- Html: Xmp :: Element
- Html: [Child] :: (a ?> b) => b -> a > b
- Html: [WithAttributes] :: (a ??> b, a ?> c) => b -> c -> (a :@: b) c
- Html: a_ :: ( 'A ?> a) => a -> 'A > a
- Html: a_A :: ( 'A ??> a, 'A ?> b) => a -> b -> ( 'A :@: a) b
- Html: abbr_ :: ( 'Abbr ?> a) => a -> 'Abbr > a
- Html: abbr_A :: ( 'Abbr ??> a, 'Abbr ?> b) => a -> b -> ( 'Abbr :@: a) b
- Html: acronym_ :: ( 'Acronym ?> a) => a -> 'Acronym > a
- Html: acronym_A :: ( 'Acronym ??> a, 'Acronym ?> b) => a -> b -> ( 'Acronym :@: a) b
- Html: address_ :: ( 'Address ?> a) => a -> 'Address > a
- Html: address_A :: ( 'Address ??> a, 'Address ?> b) => a -> b -> ( 'Address :@: a) b
- Html: applet_ :: ( 'Applet ?> a) => a -> 'Applet > a
- Html: applet_A :: ( 'Applet ??> a, 'Applet ?> b) => a -> b -> ( 'Applet :@: a) b
- Html: area_ :: 'Area > ()
- Html: area_A :: 'Area ??> a => a -> ( 'Area :@: a) ()
- Html: article_ :: ( 'Article ?> a) => a -> 'Article > a
- Html: article_A :: ( 'Article ??> a, 'Article ?> b) => a -> b -> ( 'Article :@: a) b
- Html: aside_ :: ( 'Aside ?> a) => a -> 'Aside > a
- Html: aside_A :: ( 'Aside ??> a, 'Aside ?> b) => a -> b -> ( 'Aside :@: a) b
- Html: audio_ :: ( 'Audio ?> a) => a -> 'Audio > a
- Html: audio_A :: ( 'Audio ??> a, 'Audio ?> b) => a -> b -> ( 'Audio :@: a) b
- Html: b_ :: ( 'B ?> a) => a -> 'B > a
- Html: b_A :: ( 'B ??> a, 'B ?> b) => a -> b -> ( 'B :@: a) b
- Html: base_ :: 'Base > ()
- Html: base_A :: 'Base ??> a => a -> ( 'Base :@: a) ()
- Html: basefont_ :: ( 'Basefont ?> a) => a -> 'Basefont > a
- Html: basefont_A :: ( 'Basefont ??> a, 'Basefont ?> b) => a -> b -> ( 'Basefont :@: a) b
- Html: bdi_ :: ( 'Bdi ?> a) => a -> 'Bdi > a
- Html: bdi_A :: ( 'Bdi ??> a, 'Bdi ?> b) => a -> b -> ( 'Bdi :@: a) b
- Html: bdo_ :: ( 'Bdo ?> a) => a -> 'Bdo > a
- Html: bdo_A :: ( 'Bdo ??> a, 'Bdo ?> b) => a -> b -> ( 'Bdo :@: a) b
- Html: bgsound_ :: ( 'Bgsound ?> a) => a -> 'Bgsound > a
- Html: bgsound_A :: ( 'Bgsound ??> a, 'Bgsound ?> b) => a -> b -> ( 'Bgsound :@: a) b
- Html: big_ :: ( 'Big ?> a) => a -> 'Big > a
- Html: big_A :: ( 'Big ??> a, 'Big ?> b) => a -> b -> ( 'Big :@: a) b
- Html: blink_ :: ( 'Blink ?> a) => a -> 'Blink > a
- Html: blink_A :: ( 'Blink ??> a, 'Blink ?> b) => a -> b -> ( 'Blink :@: a) b
- Html: blockquote_ :: ( 'Blockquote ?> a) => a -> 'Blockquote > a
- Html: blockquote_A :: ( 'Blockquote ??> a, 'Blockquote ?> b) => a -> b -> ( 'Blockquote :@: a) b
- Html: body_ :: ( 'Body ?> a) => a -> 'Body > a
- Html: body_A :: ( 'Body ??> a, 'Body ?> b) => a -> b -> ( 'Body :@: a) b
- Html: br_ :: 'Br > ()
- Html: br_A :: 'Br ??> a => a -> ( 'Br :@: a) ()
- Html: button_ :: ( 'Button ?> a) => a -> 'Button > a
- Html: button_A :: ( 'Button ??> a, 'Button ?> b) => a -> b -> ( 'Button :@: a) b
- Html: canvas_ :: ( 'Canvas ?> a) => a -> 'Canvas > a
- Html: canvas_A :: ( 'Canvas ??> a, 'Canvas ?> b) => a -> b -> ( 'Canvas :@: a) b
- Html: caption_ :: ( 'Caption ?> a) => a -> 'Caption > a
- Html: caption_A :: ( 'Caption ??> a, 'Caption ?> b) => a -> b -> ( 'Caption :@: a) b
- Html: center_ :: ( 'Center ?> a) => a -> 'Center > a
- Html: center_A :: ( 'Center ??> a, 'Center ?> b) => a -> b -> ( 'Center :@: a) b
- Html: cite_ :: ( 'Cite ?> a) => a -> 'Cite > a
- Html: cite_A :: ( 'Cite ??> a, 'Cite ?> b) => a -> b -> ( 'Cite :@: a) b
- Html: class Convert a
- Html: code_ :: ( 'Code ?> a) => a -> 'Code > a
- Html: code_A :: ( 'Code ??> a, 'Code ?> b) => a -> b -> ( 'Code :@: a) b
- Html: col_ :: 'Col > ()
- Html: col_A :: 'Col ??> a => a -> ( 'Col :@: a) ()
- Html: colgroup_ :: ( 'Colgroup ?> a) => a -> 'Colgroup > a
- Html: colgroup_A :: ( 'Colgroup ??> a, 'Colgroup ?> b) => a -> b -> ( 'Colgroup :@: a) b
- Html: command_ :: ( 'Command ?> a) => a -> 'Command > a
- Html: command_A :: ( 'Command ??> a, 'Command ?> b) => a -> b -> ( 'Command :@: a) b
- Html: content_ :: ( 'Content ?> a) => a -> 'Content > a
- Html: content_A :: ( 'Content ??> a, 'Content ?> b) => a -> b -> ( 'Content :@: a) b
- Html: convert :: Convert a => a -> Converted
- Html: data (#) a b
- Html: data Attribute
- Html: data Converted
- Html: data Element
- Html: data_ :: ( 'Data ?> a) => a -> 'Data > a
- Html: data_A :: ( 'Data ??> a, 'Data ?> b) => a -> b -> ( 'Data :@: a) b
- Html: datalist_ :: ( 'Datalist ?> a) => a -> 'Datalist > a
- Html: datalist_A :: ( 'Datalist ??> a, 'Datalist ?> b) => a -> b -> ( 'Datalist :@: a) b
- Html: dd_ :: ( 'Dd ?> a) => a -> 'Dd > a
- Html: dd_A :: ( 'Dd ??> a, 'Dd ?> b) => a -> b -> ( 'Dd :@: a) b
- Html: del_ :: ( 'Del ?> a) => a -> 'Del > a
- Html: del_A :: ( 'Del ??> a, 'Del ?> b) => a -> b -> ( 'Del :@: a) b
- Html: details_ :: ( 'Details ?> a) => a -> 'Details > a
- Html: details_A :: ( 'Details ??> a, 'Details ?> b) => a -> b -> ( 'Details :@: a) b
- Html: dfn_ :: ( 'Dfn ?> a) => a -> 'Dfn > a
- Html: dfn_A :: ( 'Dfn ??> a, 'Dfn ?> b) => a -> b -> ( 'Dfn :@: a) b
- Html: dialog_ :: ( 'Dialog ?> a) => a -> 'Dialog > a
- Html: dialog_A :: ( 'Dialog ??> a, 'Dialog ?> b) => a -> b -> ( 'Dialog :@: a) b
- Html: dir_ :: ( 'Dir ?> a) => a -> 'Dir > a
- Html: dir_A :: ( 'Dir ??> a, 'Dir ?> b) => a -> b -> ( 'Dir :@: a) b
- Html: div_ :: ( 'Div ?> a) => a -> 'Div > a
- Html: div_A :: ( 'Div ??> a, 'Div ?> b) => a -> b -> ( 'Div :@: a) b
- Html: dl_ :: ( 'Dl ?> a) => a -> 'Dl > a
- Html: dl_A :: ( 'Dl ??> a, 'Dl ?> b) => a -> b -> ( 'Dl :@: a) b
- Html: doctype_ :: 'DOCTYPE > ()
- Html: dt_ :: ( 'Dt ?> a) => a -> 'Dt > a
- Html: dt_A :: ( 'Dt ??> a, 'Dt ?> b) => a -> b -> ( 'Dt :@: a) b
- Html: element_ :: ( 'Element ?> a) => a -> 'Element > a
- Html: element_A :: ( 'Element ??> a, 'Element ?> b) => a -> b -> ( 'Element :@: a) b
- Html: em_ :: ( 'Em ?> a) => a -> 'Em > a
- Html: em_A :: ( 'Em ??> a, 'Em ?> b) => a -> b -> ( 'Em :@: a) b
- Html: embed_ :: 'Embed > ()
- Html: embed_A :: 'Embed ??> a => a -> ( 'Embed :@: a) ()
- Html: fieldset_ :: ( 'Fieldset ?> a) => a -> 'Fieldset > a
- Html: fieldset_A :: ( 'Fieldset ??> a, 'Fieldset ?> b) => a -> b -> ( 'Fieldset :@: a) b
- Html: figcaption_ :: ( 'Figcaption ?> a) => a -> 'Figcaption > a
- Html: figcaption_A :: ( 'Figcaption ??> a, 'Figcaption ?> b) => a -> b -> ( 'Figcaption :@: a) b
- Html: figure_ :: ( 'Figure ?> a) => a -> 'Figure > a
- Html: figure_A :: ( 'Figure ??> a, 'Figure ?> b) => a -> b -> ( 'Figure :@: a) b
- Html: font_ :: ( 'Font ?> a) => a -> 'Font > a
- Html: font_A :: ( 'Font ??> a, 'Font ?> b) => a -> b -> ( 'Font :@: a) b
- Html: footer_ :: ( 'Footer ?> a) => a -> 'Footer > a
- Html: footer_A :: ( 'Footer ??> a, 'Footer ?> b) => a -> b -> ( 'Footer :@: a) b
- Html: form_ :: ( 'Form ?> a) => a -> 'Form > a
- Html: form_A :: ( 'Form ??> a, 'Form ?> b) => a -> b -> ( 'Form :@: a) b
- Html: frame_ :: ( 'Frame ?> a) => a -> 'Frame > a
- Html: frame_A :: ( 'Frame ??> a, 'Frame ?> b) => a -> b -> ( 'Frame :@: a) b
- Html: frameset_ :: ( 'Frameset ?> a) => a -> 'Frameset > a
- Html: frameset_A :: ( 'Frameset ??> a, 'Frameset ?> b) => a -> b -> ( 'Frameset :@: a) b
- Html: h1_ :: ( 'H1 ?> a) => a -> 'H1 > a
- Html: h1_A :: ( 'H1 ??> a, 'H1 ?> b) => a -> b -> ( 'H1 :@: a) b
- Html: h2_ :: ( 'H2 ?> a) => a -> 'H2 > a
- Html: h2_A :: ( 'H2 ??> a, 'H2 ?> b) => a -> b -> ( 'H2 :@: a) b
- Html: h3_ :: ( 'H3 ?> a) => a -> 'H3 > a
- Html: h3_A :: ( 'H3 ??> a, 'H3 ?> b) => a -> b -> ( 'H3 :@: a) b
- Html: h4_ :: ( 'H4 ?> a) => a -> 'H4 > a
- Html: h4_A :: ( 'H4 ??> a, 'H4 ?> b) => a -> b -> ( 'H4 :@: a) b
- Html: h5_ :: ( 'H5 ?> a) => a -> 'H5 > a
- Html: h5_A :: ( 'H5 ??> a, 'H5 ?> b) => a -> b -> ( 'H5 :@: a) b
- Html: h6_ :: ( 'H6 ?> a) => a -> 'H6 > a
- Html: h6_A :: ( 'H6 ??> a, 'H6 ?> b) => a -> b -> ( 'H6 :@: a) b
- Html: head_ :: ( 'Head ?> a) => a -> 'Head > a
- Html: head_A :: ( 'Head ??> a, 'Head ?> b) => a -> b -> ( 'Head :@: a) b
- Html: header_ :: ( 'Header ?> a) => a -> 'Header > a
- Html: header_A :: ( 'Header ??> a, 'Header ?> b) => a -> b -> ( 'Header :@: a) b
- Html: hgroup_ :: ( 'Hgroup ?> a) => a -> 'Hgroup > a
- Html: hgroup_A :: ( 'Hgroup ??> a, 'Hgroup ?> b) => a -> b -> ( 'Hgroup :@: a) b
- Html: hr_ :: 'Hr > ()
- Html: hr_A :: 'Hr ??> a => a -> ( 'Hr :@: a) ()
- Html: html_ :: ( 'Html ?> a) => a -> 'Html > a
- Html: html_A :: ( 'Html ??> a, 'Html ?> b) => a -> b -> ( 'Html :@: a) b
- Html: i_ :: ( 'I ?> a) => a -> 'I > a
- Html: i_A :: ( 'I ??> a, 'I ?> b) => a -> b -> ( 'I :@: a) b
- Html: iframe_ :: 'Iframe > ()
- Html: iframe_A :: 'Iframe ??> a => a -> ( 'Iframe :@: a) ()
- Html: image_ :: ( 'Image ?> a) => a -> 'Image > a
- Html: image_A :: ( 'Image ??> a, 'Image ?> b) => a -> b -> ( 'Image :@: a) b
- Html: img_ :: 'Img > ()
- Html: img_A :: 'Img ??> a => a -> ( 'Img :@: a) ()
- Html: infixr 5 #
- Html: input_ :: ( 'Input ?> a) => a -> 'Input > a
- Html: input_A :: ( 'Input ??> a, 'Input ?> b) => a -> b -> ( 'Input :@: a) b
- Html: ins_ :: ( 'Ins ?> a) => a -> 'Ins > a
- Html: ins_A :: ( 'Ins ??> a, 'Ins ?> b) => a -> b -> ( 'Ins :@: a) b
- Html: instance Html.Reify.Document ((Html.Type.:@:) a b c) => GHC.Show.Show ((Html.Type.:@:) a b c)
- Html: instance Html.Reify.Document ((Html.Type.:@:) a b c) => GHC.Show.Show [(Html.Type.:@:) a b c]
- Html: instance Html.Reify.Document (a Html.Type.# b) => GHC.Show.Show (a Html.Type.# b)
- Html: instance Html.Reify.Document (a Html.Type.# b) => GHC.Show.Show [a Html.Type.# b]
- Html: instance Html.Reify.Document (a Html.Type.> b) => GHC.Show.Show (a Html.Type.> b)
- Html: instance Html.Reify.Document (a Html.Type.> b) => GHC.Show.Show [a Html.Type.> b]
- Html: isindex_ :: ( 'Isindex ?> a) => a -> 'Isindex > a
- Html: isindex_A :: ( 'Isindex ??> a, 'Isindex ?> b) => a -> b -> ( 'Isindex :@: a) b
- Html: kbd_ :: ( 'Kbd ?> a) => a -> 'Kbd > a
- Html: kbd_A :: ( 'Kbd ??> a, 'Kbd ?> b) => a -> b -> ( 'Kbd :@: a) b
- Html: keygen_ :: ( 'Keygen ?> a) => a -> 'Keygen > a
- Html: keygen_A :: ( 'Keygen ??> a, 'Keygen ?> b) => a -> b -> ( 'Keygen :@: a) b
- Html: label_ :: ( 'Label ?> a) => a -> 'Label > a
- Html: label_A :: ( 'Label ??> a, 'Label ?> b) => a -> b -> ( 'Label :@: a) b
- Html: legend_ :: ( 'Legend ?> a) => a -> 'Legend > a
- Html: legend_A :: ( 'Legend ??> a, 'Legend ?> b) => a -> b -> ( 'Legend :@: a) b
- Html: li_ :: ( 'Li ?> a) => a -> 'Li > a
- Html: li_A :: ( 'Li ??> a, 'Li ?> b) => a -> b -> ( 'Li :@: a) b
- Html: link_ :: 'Link > ()
- Html: link_A :: 'Link ??> a => a -> ( 'Link :@: a) ()
- Html: listing_ :: ( 'Listing ?> a) => a -> 'Listing > a
- Html: listing_A :: ( 'Listing ??> a, 'Listing ?> b) => a -> b -> ( 'Listing :@: a) b
- Html: main_ :: ( 'Main ?> a) => a -> 'Main > a
- Html: main_A :: ( 'Main ??> a, 'Main ?> b) => a -> b -> ( 'Main :@: a) b
- Html: map_ :: ( 'Map ?> a) => a -> 'Map > a
- Html: map_A :: ( 'Map ??> a, 'Map ?> b) => a -> b -> ( 'Map :@: a) b
- Html: mark_ :: ( 'Mark ?> a) => a -> 'Mark > a
- Html: mark_A :: ( 'Mark ??> a, 'Mark ?> b) => a -> b -> ( 'Mark :@: a) b
- Html: marquee_ :: ( 'Marquee ?> a) => a -> 'Marquee > a
- Html: marquee_A :: ( 'Marquee ??> a, 'Marquee ?> b) => a -> b -> ( 'Marquee :@: a) b
- Html: math_ :: ( 'Math ?> a) => a -> 'Math > a
- Html: math_A :: ( 'Math ??> a, 'Math ?> b) => a -> b -> ( 'Math :@: a) b
- Html: menu_ :: ( 'Menu ?> a) => a -> 'Menu > a
- Html: menu_A :: ( 'Menu ??> a, 'Menu ?> b) => a -> b -> ( 'Menu :@: a) b
- Html: menuitem_ :: 'Menuitem > ()
- Html: menuitem_A :: 'Menuitem ??> a => a -> ( 'Menuitem :@: a) ()
- Html: meta_ :: 'Meta > ()
- Html: meta_A :: 'Meta ??> a => a -> ( 'Meta :@: a) ()
- Html: meter_ :: ( 'Meter ?> a) => a -> 'Meter > a
- Html: meter_A :: ( 'Meter ??> a, 'Meter ?> b) => a -> b -> ( 'Meter :@: a) b
- Html: multicol_ :: ( 'Multicol ?> a) => a -> 'Multicol > a
- Html: multicol_A :: ( 'Multicol ??> a, 'Multicol ?> b) => a -> b -> ( 'Multicol :@: a) b
- Html: nav_ :: ( 'Nav ?> a) => a -> 'Nav > a
- Html: nav_A :: ( 'Nav ??> a, 'Nav ?> b) => a -> b -> ( 'Nav :@: a) b
- Html: newtype (:=) (a :: Attribute) b
- Html: newtype Raw a
- Html: nextid_ :: ( 'Nextid ?> a) => a -> 'Nextid > a
- Html: nextid_A :: ( 'Nextid ??> a, 'Nextid ?> b) => a -> b -> ( 'Nextid :@: a) b
- Html: nobr_ :: ( 'Nobr ?> a) => a -> 'Nobr > a
- Html: nobr_A :: ( 'Nobr ??> a, 'Nobr ?> b) => a -> b -> ( 'Nobr :@: a) b
- Html: noembed_ :: ( 'Noembed ?> a) => a -> 'Noembed > a
- Html: noembed_A :: ( 'Noembed ??> a, 'Noembed ?> b) => a -> b -> ( 'Noembed :@: a) b
- Html: noframes_ :: ( 'Noframes ?> a) => a -> 'Noframes > a
- Html: noframes_A :: ( 'Noframes ??> a, 'Noframes ?> b) => a -> b -> ( 'Noframes :@: a) b
- Html: noscript_ :: ( 'Noscript ?> a) => a -> 'Noscript > a
- Html: noscript_A :: ( 'Noscript ??> a, 'Noscript ?> b) => a -> b -> ( 'Noscript :@: a) b
- Html: object_ :: ( 'Object ?> a) => a -> 'Object > a
- Html: object_A :: ( 'Object ??> a, 'Object ?> b) => a -> b -> ( 'Object :@: a) b
- Html: ol_ :: ( 'Ol ?> a) => a -> 'Ol > a
- Html: ol_A :: ( 'Ol ??> a, 'Ol ?> b) => a -> b -> ( 'Ol :@: a) b
- Html: optgroup_ :: ( 'Optgroup ?> a) => a -> 'Optgroup > a
- Html: optgroup_A :: ( 'Optgroup ??> a, 'Optgroup ?> b) => a -> b -> ( 'Optgroup :@: a) b
- Html: option_ :: ( 'Option ?> a) => a -> 'Option > a
- Html: option_A :: ( 'Option ??> a, 'Option ?> b) => a -> b -> ( 'Option :@: a) b
- Html: output_ :: ( 'Output ?> a) => a -> 'Output > a
- Html: output_A :: ( 'Output ??> a, 'Output ?> b) => a -> b -> ( 'Output :@: a) b
- Html: p_ :: ( 'P ?> a) => a -> 'P > a
- Html: p_A :: ( 'P ??> a, 'P ?> b) => a -> b -> ( 'P :@: a) b
- Html: param_ :: 'Param > ()
- Html: param_A :: 'Param ??> a => a -> ( 'Param :@: a) ()
- Html: picture_ :: ( 'Picture ?> a) => a -> 'Picture > a
- Html: picture_A :: ( 'Picture ??> a, 'Picture ?> b) => a -> b -> ( 'Picture :@: a) b
- Html: plaintext_ :: ( 'Plaintext ?> a) => a -> 'Plaintext > a
- Html: plaintext_A :: ( 'Plaintext ??> a, 'Plaintext ?> b) => a -> b -> ( 'Plaintext :@: a) b
- Html: pre_ :: ( 'Pre ?> a) => a -> 'Pre > a
- Html: pre_A :: ( 'Pre ??> a, 'Pre ?> b) => a -> b -> ( 'Pre :@: a) b
- Html: progress_ :: ( 'Progress ?> a) => a -> 'Progress > a
- Html: progress_A :: ( 'Progress ??> a, 'Progress ?> b) => a -> b -> ( 'Progress :@: a) b
- Html: q_ :: ( 'Q ?> a) => a -> 'Q > a
- Html: q_A :: ( 'Q ??> a, 'Q ?> b) => a -> b -> ( 'Q :@: a) b
- Html: rp_ :: ( 'Rp ?> a) => a -> 'Rp > a
- Html: rp_A :: ( 'Rp ??> a, 'Rp ?> b) => a -> b -> ( 'Rp :@: a) b
- Html: rt_ :: ( 'Rt ?> a) => a -> 'Rt > a
- Html: rt_A :: ( 'Rt ??> a, 'Rt ?> b) => a -> b -> ( 'Rt :@: a) b
- Html: rtc_ :: ( 'Rtc ?> a) => a -> 'Rtc > a
- Html: rtc_A :: ( 'Rtc ??> a, 'Rtc ?> b) => a -> b -> ( 'Rtc :@: a) b
- Html: ruby_ :: ( 'Ruby ?> a) => a -> 'Ruby > a
- Html: ruby_A :: ( 'Ruby ??> a, 'Ruby ?> b) => a -> b -> ( 'Ruby :@: a) b
- Html: s_ :: ( 'S ?> a) => a -> 'S > a
- Html: s_A :: ( 'S ??> a, 'S ?> b) => a -> b -> ( 'S :@: a) b
- Html: samp_ :: ( 'Samp ?> a) => a -> 'Samp > a
- Html: samp_A :: ( 'Samp ??> a, 'Samp ?> b) => a -> b -> ( 'Samp :@: a) b
- Html: script_ :: ( 'Script ?> a) => a -> 'Script > a
- Html: script_A :: ( 'Script ??> a, 'Script ?> b) => a -> b -> ( 'Script :@: a) b
- Html: section_ :: ( 'Section ?> a) => a -> 'Section > a
- Html: section_A :: ( 'Section ??> a, 'Section ?> b) => a -> b -> ( 'Section :@: a) b
- Html: select_ :: ( 'Select ?> a) => a -> 'Select > a
- Html: select_A :: ( 'Select ??> a, 'Select ?> b) => a -> b -> ( 'Select :@: a) b
- Html: shadow_ :: ( 'Shadow ?> a) => a -> 'Shadow > a
- Html: shadow_A :: ( 'Shadow ??> a, 'Shadow ?> b) => a -> b -> ( 'Shadow :@: a) b
- Html: slot_ :: ( 'Slot ?> a) => a -> 'Slot > a
- Html: slot_A :: ( 'Slot ??> a, 'Slot ?> b) => a -> b -> ( 'Slot :@: a) b
- Html: small_ :: ( 'Small ?> a) => a -> 'Small > a
- Html: small_A :: ( 'Small ??> a, 'Small ?> b) => a -> b -> ( 'Small :@: a) b
- Html: source_ :: 'Source > ()
- Html: source_A :: 'Source ??> a => a -> ( 'Source :@: a) ()
- Html: spacer_ :: ( 'Spacer ?> a) => a -> 'Spacer > a
- Html: spacer_A :: ( 'Spacer ??> a, 'Spacer ?> b) => a -> b -> ( 'Spacer :@: a) b
- Html: span_ :: ( 'Span ?> a) => a -> 'Span > a
- Html: span_A :: ( 'Span ??> a, 'Span ?> b) => a -> b -> ( 'Span :@: a) b
- Html: strike_ :: ( 'Strike ?> a) => a -> 'Strike > a
- Html: strike_A :: ( 'Strike ??> a, 'Strike ?> b) => a -> b -> ( 'Strike :@: a) b
- Html: strong_ :: ( 'Strong ?> a) => a -> 'Strong > a
- Html: strong_A :: ( 'Strong ??> a, 'Strong ?> b) => a -> b -> ( 'Strong :@: a) b
- Html: style_ :: ( 'Style ?> a) => a -> 'Style > a
- Html: style_A :: ( 'Style ??> a, 'Style ?> b) => a -> b -> ( 'Style :@: a) b
- Html: sub_ :: ( 'Sub ?> a) => a -> 'Sub > a
- Html: sub_A :: ( 'Sub ??> a, 'Sub ?> b) => a -> b -> ( 'Sub :@: a) b
- Html: summary_ :: ( 'Summary ?> a) => a -> 'Summary > a
- Html: summary_A :: ( 'Summary ??> a, 'Summary ?> b) => a -> b -> ( 'Summary :@: a) b
- Html: sup_ :: ( 'Sup ?> a) => a -> 'Sup > a
- Html: sup_A :: ( 'Sup ??> a, 'Sup ?> b) => a -> b -> ( 'Sup :@: a) b
- Html: svg_ :: ( 'Svg ?> a) => a -> 'Svg > a
- Html: svg_A :: ( 'Svg ??> a, 'Svg ?> b) => a -> b -> ( 'Svg :@: a) b
- Html: table_ :: ( 'Table ?> a) => a -> 'Table > a
- Html: table_A :: ( 'Table ??> a, 'Table ?> b) => a -> b -> ( 'Table :@: a) b
- Html: tbody_ :: ( 'Tbody ?> a) => a -> 'Tbody > a
- Html: tbody_A :: ( 'Tbody ??> a, 'Tbody ?> b) => a -> b -> ( 'Tbody :@: a) b
- Html: td_ :: ( 'Td ?> a) => a -> 'Td > a
- Html: td_A :: ( 'Td ??> a, 'Td ?> b) => a -> b -> ( 'Td :@: a) b
- Html: template_ :: ( 'Template ?> a) => a -> 'Template > a
- Html: template_A :: ( 'Template ??> a, 'Template ?> b) => a -> b -> ( 'Template :@: a) b
- Html: textarea_ :: ( 'Textarea ?> a) => a -> 'Textarea > a
- Html: textarea_A :: ( 'Textarea ??> a, 'Textarea ?> b) => a -> b -> ( 'Textarea :@: a) b
- Html: tfoot_ :: ( 'Tfoot ?> a) => a -> 'Tfoot > a
- Html: tfoot_A :: ( 'Tfoot ??> a, 'Tfoot ?> b) => a -> b -> ( 'Tfoot :@: a) b
- Html: th_ :: ( 'Th ?> a) => a -> 'Th > a
- Html: th_A :: ( 'Th ??> a, 'Th ?> b) => a -> b -> ( 'Th :@: a) b
- Html: thead_ :: ( 'Thead ?> a) => a -> 'Thead > a
- Html: thead_A :: ( 'Thead ??> a, 'Thead ?> b) => a -> b -> ( 'Thead :@: a) b
- Html: time_ :: ( 'Time ?> a) => a -> 'Time > a
- Html: time_A :: ( 'Time ??> a, 'Time ?> b) => a -> b -> ( 'Time :@: a) b
- Html: title_ :: ( 'Title ?> a) => a -> 'Title > a
- Html: title_A :: ( 'Title ??> a, 'Title ?> b) => a -> b -> ( 'Title :@: a) b
- Html: tr_ :: ( 'Tr ?> a) => a -> 'Tr > a
- Html: tr_A :: ( 'Tr ??> a, 'Tr ?> b) => a -> b -> ( 'Tr :@: a) b
- Html: track_ :: 'Track > ()
- Html: track_A :: 'Track ??> a => a -> ( 'Track :@: a) ()
- Html: tt_ :: ( 'Tt ?> a) => a -> 'Tt > a
- Html: tt_A :: ( 'Tt ??> a, 'Tt ?> b) => a -> b -> ( 'Tt :@: a) b
- Html: u_ :: ( 'U ?> a) => a -> 'U > a
- Html: u_A :: ( 'U ??> a, 'U ?> b) => a -> b -> ( 'U :@: a) b
- Html: ul_ :: ( 'Ul ?> a) => a -> 'Ul > a
- Html: ul_A :: ( 'Ul ??> a, 'Ul ?> b) => a -> b -> ( 'Ul :@: a) b
- Html: var_ :: ( 'Var ?> a) => a -> 'Var > a
- Html: var_A :: ( 'Var ??> a, 'Var ?> b) => a -> b -> ( 'Var :@: a) b
- Html: video_ :: ( 'Video ?> a) => a -> 'Video > a
- Html: video_A :: ( 'Video ??> a, 'Video ?> b) => a -> b -> ( 'Video :@: a) b
- Html: wbr_ :: 'Wbr > ()
- Html: wbr_A :: 'Wbr ??> a => a -> ( 'Wbr :@: a) ()
- Html: xmp_ :: ( 'Xmp ?> a) => a -> 'Xmp > a
- Html: xmp_A :: ( 'Xmp ??> a, 'Xmp ?> b) => a -> b -> ( 'Xmp :@: a) b
+ Html: instance Html.Reify.Document ((Html.Type.Internal.:@:) a b c) => GHC.Show.Show ((Html.Type.Internal.:@:) a b c)
+ Html: instance Html.Reify.Document ((Html.Type.Internal.:@:) a b c) => GHC.Show.Show [(Html.Type.Internal.:@:) a b c]
+ Html: instance Html.Reify.Document (a Html.Type.Internal.# b) => GHC.Show.Show (a Html.Type.Internal.# b)
+ Html: instance Html.Reify.Document (a Html.Type.Internal.# b) => GHC.Show.Show [a Html.Type.Internal.# b]
+ Html: instance Html.Reify.Document (a Html.Type.Internal.> b) => GHC.Show.Show (a Html.Type.Internal.> b)
+ Html: instance Html.Reify.Document (a Html.Type.Internal.> b) => GHC.Show.Show [a Html.Type.Internal.> b]
+ Html.Convert: Converted :: Builder -> Converted
+ Html.Convert: [unConv] :: Converted -> Builder
+ Html.Convert: class Convert a
+ Html.Convert: convert :: Convert a => a -> Converted
+ Html.Convert: instance Data.Semigroup.Semigroup Html.Convert.Converted
+ Html.Convert: instance Data.String.IsString Html.Convert.Converted
+ Html.Convert: instance GHC.Base.Monoid Html.Convert.Converted
+ Html.Convert: instance GHC.TypeLits.KnownSymbol a => Html.Convert.Convert (Data.Proxy.Proxy a)
+ Html.Convert: instance Html.Convert.Convert (Html.Type.Internal.Raw Data.ByteString.Builder.Internal.Builder)
+ Html.Convert: instance Html.Convert.Convert (Html.Type.Internal.Raw Data.Text.Internal.Lazy.Text)
+ Html.Convert: instance Html.Convert.Convert (Html.Type.Internal.Raw Data.Text.Internal.Text)
+ Html.Convert: instance Html.Convert.Convert (Html.Type.Internal.Raw GHC.Base.String)
+ Html.Convert: instance Html.Convert.Convert (Html.Type.Internal.Raw GHC.Types.Char)
+ Html.Convert: instance Html.Convert.Convert Data.Text.Internal.Lazy.Text
+ Html.Convert: instance Html.Convert.Convert Data.Text.Internal.Text
+ Html.Convert: instance Html.Convert.Convert GHC.Base.String
+ Html.Convert: instance Html.Convert.Convert GHC.Integer.Type.Integer
+ Html.Convert: instance Html.Convert.Convert GHC.Types.Char
+ Html.Convert: instance Html.Convert.Convert GHC.Types.Double
+ Html.Convert: instance Html.Convert.Convert GHC.Types.Float
+ Html.Convert: instance Html.Convert.Convert GHC.Types.Int
+ Html.Convert: instance Html.Convert.Convert GHC.Types.Word
+ Html.Convert: instance Html.Convert.Convert b => Html.Convert.Convert (a Html.Type.Internal.:= b)
+ Html.Convert: newtype Converted
+ Html.Element: a_ :: ( 'A ?> a) => a -> 'A > a
+ Html.Element: a_A :: ( 'A ??> a, 'A ?> b) => a -> b -> ( 'A :@: a) b
+ Html.Element: abbr_ :: ( 'Abbr ?> a) => a -> 'Abbr > a
+ Html.Element: abbr_A :: ( 'Abbr ??> a, 'Abbr ?> b) => a -> b -> ( 'Abbr :@: a) b
+ Html.Element: acronym_ :: ( 'Acronym ?> a) => a -> 'Acronym > a
+ Html.Element: acronym_A :: ( 'Acronym ??> a, 'Acronym ?> b) => a -> b -> ( 'Acronym :@: a) b
+ Html.Element: address_ :: ( 'Address ?> a) => a -> 'Address > a
+ Html.Element: address_A :: ( 'Address ??> a, 'Address ?> b) => a -> b -> ( 'Address :@: a) b
+ Html.Element: applet_ :: ( 'Applet ?> a) => a -> 'Applet > a
+ Html.Element: applet_A :: ( 'Applet ??> a, 'Applet ?> b) => a -> b -> ( 'Applet :@: a) b
+ Html.Element: area_ :: 'Area > ()
+ Html.Element: area_A :: 'Area ??> a => a -> ( 'Area :@: a) ()
+ Html.Element: article_ :: ( 'Article ?> a) => a -> 'Article > a
+ Html.Element: article_A :: ( 'Article ??> a, 'Article ?> b) => a -> b -> ( 'Article :@: a) b
+ Html.Element: aside_ :: ( 'Aside ?> a) => a -> 'Aside > a
+ Html.Element: aside_A :: ( 'Aside ??> a, 'Aside ?> b) => a -> b -> ( 'Aside :@: a) b
+ Html.Element: audio_ :: ( 'Audio ?> a) => a -> 'Audio > a
+ Html.Element: audio_A :: ( 'Audio ??> a, 'Audio ?> b) => a -> b -> ( 'Audio :@: a) b
+ Html.Element: b_ :: ( 'B ?> a) => a -> 'B > a
+ Html.Element: b_A :: ( 'B ??> a, 'B ?> b) => a -> b -> ( 'B :@: a) b
+ Html.Element: base_ :: 'Base > ()
+ Html.Element: base_A :: 'Base ??> a => a -> ( 'Base :@: a) ()
+ Html.Element: basefont_ :: ( 'Basefont ?> a) => a -> 'Basefont > a
+ Html.Element: basefont_A :: ( 'Basefont ??> a, 'Basefont ?> b) => a -> b -> ( 'Basefont :@: a) b
+ Html.Element: bdi_ :: ( 'Bdi ?> a) => a -> 'Bdi > a
+ Html.Element: bdi_A :: ( 'Bdi ??> a, 'Bdi ?> b) => a -> b -> ( 'Bdi :@: a) b
+ Html.Element: bdo_ :: ( 'Bdo ?> a) => a -> 'Bdo > a
+ Html.Element: bdo_A :: ( 'Bdo ??> a, 'Bdo ?> b) => a -> b -> ( 'Bdo :@: a) b
+ Html.Element: bgsound_ :: ( 'Bgsound ?> a) => a -> 'Bgsound > a
+ Html.Element: bgsound_A :: ( 'Bgsound ??> a, 'Bgsound ?> b) => a -> b -> ( 'Bgsound :@: a) b
+ Html.Element: big_ :: ( 'Big ?> a) => a -> 'Big > a
+ Html.Element: big_A :: ( 'Big ??> a, 'Big ?> b) => a -> b -> ( 'Big :@: a) b
+ Html.Element: blink_ :: ( 'Blink ?> a) => a -> 'Blink > a
+ Html.Element: blink_A :: ( 'Blink ??> a, 'Blink ?> b) => a -> b -> ( 'Blink :@: a) b
+ Html.Element: blockquote_ :: ( 'Blockquote ?> a) => a -> 'Blockquote > a
+ Html.Element: blockquote_A :: ( 'Blockquote ??> a, 'Blockquote ?> b) => a -> b -> ( 'Blockquote :@: a) b
+ Html.Element: body_ :: ( 'Body ?> a) => a -> 'Body > a
+ Html.Element: body_A :: ( 'Body ??> a, 'Body ?> b) => a -> b -> ( 'Body :@: a) b
+ Html.Element: br_ :: 'Br > ()
+ Html.Element: br_A :: 'Br ??> a => a -> ( 'Br :@: a) ()
+ Html.Element: button_ :: ( 'Button ?> a) => a -> 'Button > a
+ Html.Element: button_A :: ( 'Button ??> a, 'Button ?> b) => a -> b -> ( 'Button :@: a) b
+ Html.Element: canvas_ :: ( 'Canvas ?> a) => a -> 'Canvas > a
+ Html.Element: canvas_A :: ( 'Canvas ??> a, 'Canvas ?> b) => a -> b -> ( 'Canvas :@: a) b
+ Html.Element: caption_ :: ( 'Caption ?> a) => a -> 'Caption > a
+ Html.Element: caption_A :: ( 'Caption ??> a, 'Caption ?> b) => a -> b -> ( 'Caption :@: a) b
+ Html.Element: center_ :: ( 'Center ?> a) => a -> 'Center > a
+ Html.Element: center_A :: ( 'Center ??> a, 'Center ?> b) => a -> b -> ( 'Center :@: a) b
+ Html.Element: cite_ :: ( 'Cite ?> a) => a -> 'Cite > a
+ Html.Element: cite_A :: ( 'Cite ??> a, 'Cite ?> b) => a -> b -> ( 'Cite :@: a) b
+ Html.Element: code_ :: ( 'Code ?> a) => a -> 'Code > a
+ Html.Element: code_A :: ( 'Code ??> a, 'Code ?> b) => a -> b -> ( 'Code :@: a) b
+ Html.Element: col_ :: 'Col > ()
+ Html.Element: col_A :: 'Col ??> a => a -> ( 'Col :@: a) ()
+ Html.Element: colgroup_ :: ( 'Colgroup ?> a) => a -> 'Colgroup > a
+ Html.Element: colgroup_A :: ( 'Colgroup ??> a, 'Colgroup ?> b) => a -> b -> ( 'Colgroup :@: a) b
+ Html.Element: command_ :: ( 'Command ?> a) => a -> 'Command > a
+ Html.Element: command_A :: ( 'Command ??> a, 'Command ?> b) => a -> b -> ( 'Command :@: a) b
+ Html.Element: content_ :: ( 'Content ?> a) => a -> 'Content > a
+ Html.Element: content_A :: ( 'Content ??> a, 'Content ?> b) => a -> b -> ( 'Content :@: a) b
+ Html.Element: data_ :: ( 'Data ?> a) => a -> 'Data > a
+ Html.Element: data_A :: ( 'Data ??> a, 'Data ?> b) => a -> b -> ( 'Data :@: a) b
+ Html.Element: datalist_ :: ( 'Datalist ?> a) => a -> 'Datalist > a
+ Html.Element: datalist_A :: ( 'Datalist ??> a, 'Datalist ?> b) => a -> b -> ( 'Datalist :@: a) b
+ Html.Element: dd_ :: ( 'Dd ?> a) => a -> 'Dd > a
+ Html.Element: dd_A :: ( 'Dd ??> a, 'Dd ?> b) => a -> b -> ( 'Dd :@: a) b
+ Html.Element: del_ :: ( 'Del ?> a) => a -> 'Del > a
+ Html.Element: del_A :: ( 'Del ??> a, 'Del ?> b) => a -> b -> ( 'Del :@: a) b
+ Html.Element: details_ :: ( 'Details ?> a) => a -> 'Details > a
+ Html.Element: details_A :: ( 'Details ??> a, 'Details ?> b) => a -> b -> ( 'Details :@: a) b
+ Html.Element: dfn_ :: ( 'Dfn ?> a) => a -> 'Dfn > a
+ Html.Element: dfn_A :: ( 'Dfn ??> a, 'Dfn ?> b) => a -> b -> ( 'Dfn :@: a) b
+ Html.Element: dialog_ :: ( 'Dialog ?> a) => a -> 'Dialog > a
+ Html.Element: dialog_A :: ( 'Dialog ??> a, 'Dialog ?> b) => a -> b -> ( 'Dialog :@: a) b
+ Html.Element: dir_ :: ( 'Dir ?> a) => a -> 'Dir > a
+ Html.Element: dir_A :: ( 'Dir ??> a, 'Dir ?> b) => a -> b -> ( 'Dir :@: a) b
+ Html.Element: div_ :: ( 'Div ?> a) => a -> 'Div > a
+ Html.Element: div_A :: ( 'Div ??> a, 'Div ?> b) => a -> b -> ( 'Div :@: a) b
+ Html.Element: dl_ :: ( 'Dl ?> a) => a -> 'Dl > a
+ Html.Element: dl_A :: ( 'Dl ??> a, 'Dl ?> b) => a -> b -> ( 'Dl :@: a) b
+ Html.Element: doctype_ :: 'DOCTYPE > ()
+ Html.Element: dt_ :: ( 'Dt ?> a) => a -> 'Dt > a
+ Html.Element: dt_A :: ( 'Dt ??> a, 'Dt ?> b) => a -> b -> ( 'Dt :@: a) b
+ Html.Element: element_ :: ( 'Element ?> a) => a -> 'Element > a
+ Html.Element: element_A :: ( 'Element ??> a, 'Element ?> b) => a -> b -> ( 'Element :@: a) b
+ Html.Element: em_ :: ( 'Em ?> a) => a -> 'Em > a
+ Html.Element: em_A :: ( 'Em ??> a, 'Em ?> b) => a -> b -> ( 'Em :@: a) b
+ Html.Element: embed_ :: 'Embed > ()
+ Html.Element: embed_A :: 'Embed ??> a => a -> ( 'Embed :@: a) ()
+ Html.Element: fieldset_ :: ( 'Fieldset ?> a) => a -> 'Fieldset > a
+ Html.Element: fieldset_A :: ( 'Fieldset ??> a, 'Fieldset ?> b) => a -> b -> ( 'Fieldset :@: a) b
+ Html.Element: figcaption_ :: ( 'Figcaption ?> a) => a -> 'Figcaption > a
+ Html.Element: figcaption_A :: ( 'Figcaption ??> a, 'Figcaption ?> b) => a -> b -> ( 'Figcaption :@: a) b
+ Html.Element: figure_ :: ( 'Figure ?> a) => a -> 'Figure > a
+ Html.Element: figure_A :: ( 'Figure ??> a, 'Figure ?> b) => a -> b -> ( 'Figure :@: a) b
+ Html.Element: font_ :: ( 'Font ?> a) => a -> 'Font > a
+ Html.Element: font_A :: ( 'Font ??> a, 'Font ?> b) => a -> b -> ( 'Font :@: a) b
+ Html.Element: footer_ :: ( 'Footer ?> a) => a -> 'Footer > a
+ Html.Element: footer_A :: ( 'Footer ??> a, 'Footer ?> b) => a -> b -> ( 'Footer :@: a) b
+ Html.Element: form_ :: ( 'Form ?> a) => a -> 'Form > a
+ Html.Element: form_A :: ( 'Form ??> a, 'Form ?> b) => a -> b -> ( 'Form :@: a) b
+ Html.Element: frame_ :: ( 'Frame ?> a) => a -> 'Frame > a
+ Html.Element: frame_A :: ( 'Frame ??> a, 'Frame ?> b) => a -> b -> ( 'Frame :@: a) b
+ Html.Element: frameset_ :: ( 'Frameset ?> a) => a -> 'Frameset > a
+ Html.Element: frameset_A :: ( 'Frameset ??> a, 'Frameset ?> b) => a -> b -> ( 'Frameset :@: a) b
+ Html.Element: h1_ :: ( 'H1 ?> a) => a -> 'H1 > a
+ Html.Element: h1_A :: ( 'H1 ??> a, 'H1 ?> b) => a -> b -> ( 'H1 :@: a) b
+ Html.Element: h2_ :: ( 'H2 ?> a) => a -> 'H2 > a
+ Html.Element: h2_A :: ( 'H2 ??> a, 'H2 ?> b) => a -> b -> ( 'H2 :@: a) b
+ Html.Element: h3_ :: ( 'H3 ?> a) => a -> 'H3 > a
+ Html.Element: h3_A :: ( 'H3 ??> a, 'H3 ?> b) => a -> b -> ( 'H3 :@: a) b
+ Html.Element: h4_ :: ( 'H4 ?> a) => a -> 'H4 > a
+ Html.Element: h4_A :: ( 'H4 ??> a, 'H4 ?> b) => a -> b -> ( 'H4 :@: a) b
+ Html.Element: h5_ :: ( 'H5 ?> a) => a -> 'H5 > a
+ Html.Element: h5_A :: ( 'H5 ??> a, 'H5 ?> b) => a -> b -> ( 'H5 :@: a) b
+ Html.Element: h6_ :: ( 'H6 ?> a) => a -> 'H6 > a
+ Html.Element: h6_A :: ( 'H6 ??> a, 'H6 ?> b) => a -> b -> ( 'H6 :@: a) b
+ Html.Element: head_ :: ( 'Head ?> a) => a -> 'Head > a
+ Html.Element: head_A :: ( 'Head ??> a, 'Head ?> b) => a -> b -> ( 'Head :@: a) b
+ Html.Element: header_ :: ( 'Header ?> a) => a -> 'Header > a
+ Html.Element: header_A :: ( 'Header ??> a, 'Header ?> b) => a -> b -> ( 'Header :@: a) b
+ Html.Element: hgroup_ :: ( 'Hgroup ?> a) => a -> 'Hgroup > a
+ Html.Element: hgroup_A :: ( 'Hgroup ??> a, 'Hgroup ?> b) => a -> b -> ( 'Hgroup :@: a) b
+ Html.Element: hr_ :: 'Hr > ()
+ Html.Element: hr_A :: 'Hr ??> a => a -> ( 'Hr :@: a) ()
+ Html.Element: html_ :: ( 'Html ?> a) => a -> 'Html > a
+ Html.Element: html_A :: ( 'Html ??> a, 'Html ?> b) => a -> b -> ( 'Html :@: a) b
+ Html.Element: i_ :: ( 'I ?> a) => a -> 'I > a
+ Html.Element: i_A :: ( 'I ??> a, 'I ?> b) => a -> b -> ( 'I :@: a) b
+ Html.Element: iframe_ :: 'Iframe > ()
+ Html.Element: iframe_A :: 'Iframe ??> a => a -> ( 'Iframe :@: a) ()
+ Html.Element: image_ :: ( 'Image ?> a) => a -> 'Image > a
+ Html.Element: image_A :: ( 'Image ??> a, 'Image ?> b) => a -> b -> ( 'Image :@: a) b
+ Html.Element: img_ :: 'Img > ()
+ Html.Element: img_A :: 'Img ??> a => a -> ( 'Img :@: a) ()
+ Html.Element: input_ :: ( 'Input ?> a) => a -> 'Input > a
+ Html.Element: input_A :: ( 'Input ??> a, 'Input ?> b) => a -> b -> ( 'Input :@: a) b
+ Html.Element: ins_ :: ( 'Ins ?> a) => a -> 'Ins > a
+ Html.Element: ins_A :: ( 'Ins ??> a, 'Ins ?> b) => a -> b -> ( 'Ins :@: a) b
+ Html.Element: isindex_ :: ( 'Isindex ?> a) => a -> 'Isindex > a
+ Html.Element: isindex_A :: ( 'Isindex ??> a, 'Isindex ?> b) => a -> b -> ( 'Isindex :@: a) b
+ Html.Element: kbd_ :: ( 'Kbd ?> a) => a -> 'Kbd > a
+ Html.Element: kbd_A :: ( 'Kbd ??> a, 'Kbd ?> b) => a -> b -> ( 'Kbd :@: a) b
+ Html.Element: keygen_ :: ( 'Keygen ?> a) => a -> 'Keygen > a
+ Html.Element: keygen_A :: ( 'Keygen ??> a, 'Keygen ?> b) => a -> b -> ( 'Keygen :@: a) b
+ Html.Element: label_ :: ( 'Label ?> a) => a -> 'Label > a
+ Html.Element: label_A :: ( 'Label ??> a, 'Label ?> b) => a -> b -> ( 'Label :@: a) b
+ Html.Element: legend_ :: ( 'Legend ?> a) => a -> 'Legend > a
+ Html.Element: legend_A :: ( 'Legend ??> a, 'Legend ?> b) => a -> b -> ( 'Legend :@: a) b
+ Html.Element: li_ :: ( 'Li ?> a) => a -> 'Li > a
+ Html.Element: li_A :: ( 'Li ??> a, 'Li ?> b) => a -> b -> ( 'Li :@: a) b
+ Html.Element: link_ :: 'Link > ()
+ Html.Element: link_A :: 'Link ??> a => a -> ( 'Link :@: a) ()
+ Html.Element: listing_ :: ( 'Listing ?> a) => a -> 'Listing > a
+ Html.Element: listing_A :: ( 'Listing ??> a, 'Listing ?> b) => a -> b -> ( 'Listing :@: a) b
+ Html.Element: main_ :: ( 'Main ?> a) => a -> 'Main > a
+ Html.Element: main_A :: ( 'Main ??> a, 'Main ?> b) => a -> b -> ( 'Main :@: a) b
+ Html.Element: map_ :: ( 'Map ?> a) => a -> 'Map > a
+ Html.Element: map_A :: ( 'Map ??> a, 'Map ?> b) => a -> b -> ( 'Map :@: a) b
+ Html.Element: mark_ :: ( 'Mark ?> a) => a -> 'Mark > a
+ Html.Element: mark_A :: ( 'Mark ??> a, 'Mark ?> b) => a -> b -> ( 'Mark :@: a) b
+ Html.Element: marquee_ :: ( 'Marquee ?> a) => a -> 'Marquee > a
+ Html.Element: marquee_A :: ( 'Marquee ??> a, 'Marquee ?> b) => a -> b -> ( 'Marquee :@: a) b
+ Html.Element: math_ :: ( 'Math ?> a) => a -> 'Math > a
+ Html.Element: math_A :: ( 'Math ??> a, 'Math ?> b) => a -> b -> ( 'Math :@: a) b
+ Html.Element: menu_ :: ( 'Menu ?> a) => a -> 'Menu > a
+ Html.Element: menu_A :: ( 'Menu ??> a, 'Menu ?> b) => a -> b -> ( 'Menu :@: a) b
+ Html.Element: menuitem_ :: 'Menuitem > ()
+ Html.Element: menuitem_A :: 'Menuitem ??> a => a -> ( 'Menuitem :@: a) ()
+ Html.Element: meta_ :: 'Meta > ()
+ Html.Element: meta_A :: 'Meta ??> a => a -> ( 'Meta :@: a) ()
+ Html.Element: meter_ :: ( 'Meter ?> a) => a -> 'Meter > a
+ Html.Element: meter_A :: ( 'Meter ??> a, 'Meter ?> b) => a -> b -> ( 'Meter :@: a) b
+ Html.Element: multicol_ :: ( 'Multicol ?> a) => a -> 'Multicol > a
+ Html.Element: multicol_A :: ( 'Multicol ??> a, 'Multicol ?> b) => a -> b -> ( 'Multicol :@: a) b
+ Html.Element: nav_ :: ( 'Nav ?> a) => a -> 'Nav > a
+ Html.Element: nav_A :: ( 'Nav ??> a, 'Nav ?> b) => a -> b -> ( 'Nav :@: a) b
+ Html.Element: nextid_ :: ( 'Nextid ?> a) => a -> 'Nextid > a
+ Html.Element: nextid_A :: ( 'Nextid ??> a, 'Nextid ?> b) => a -> b -> ( 'Nextid :@: a) b
+ Html.Element: nobr_ :: ( 'Nobr ?> a) => a -> 'Nobr > a
+ Html.Element: nobr_A :: ( 'Nobr ??> a, 'Nobr ?> b) => a -> b -> ( 'Nobr :@: a) b
+ Html.Element: noembed_ :: ( 'Noembed ?> a) => a -> 'Noembed > a
+ Html.Element: noembed_A :: ( 'Noembed ??> a, 'Noembed ?> b) => a -> b -> ( 'Noembed :@: a) b
+ Html.Element: noframes_ :: ( 'Noframes ?> a) => a -> 'Noframes > a
+ Html.Element: noframes_A :: ( 'Noframes ??> a, 'Noframes ?> b) => a -> b -> ( 'Noframes :@: a) b
+ Html.Element: noscript_ :: ( 'Noscript ?> a) => a -> 'Noscript > a
+ Html.Element: noscript_A :: ( 'Noscript ??> a, 'Noscript ?> b) => a -> b -> ( 'Noscript :@: a) b
+ Html.Element: object_ :: ( 'Object ?> a) => a -> 'Object > a
+ Html.Element: object_A :: ( 'Object ??> a, 'Object ?> b) => a -> b -> ( 'Object :@: a) b
+ Html.Element: ol_ :: ( 'Ol ?> a) => a -> 'Ol > a
+ Html.Element: ol_A :: ( 'Ol ??> a, 'Ol ?> b) => a -> b -> ( 'Ol :@: a) b
+ Html.Element: optgroup_ :: ( 'Optgroup ?> a) => a -> 'Optgroup > a
+ Html.Element: optgroup_A :: ( 'Optgroup ??> a, 'Optgroup ?> b) => a -> b -> ( 'Optgroup :@: a) b
+ Html.Element: option_ :: ( 'Option ?> a) => a -> 'Option > a
+ Html.Element: option_A :: ( 'Option ??> a, 'Option ?> b) => a -> b -> ( 'Option :@: a) b
+ Html.Element: output_ :: ( 'Output ?> a) => a -> 'Output > a
+ Html.Element: output_A :: ( 'Output ??> a, 'Output ?> b) => a -> b -> ( 'Output :@: a) b
+ Html.Element: p_ :: ( 'P ?> a) => a -> 'P > a
+ Html.Element: p_A :: ( 'P ??> a, 'P ?> b) => a -> b -> ( 'P :@: a) b
+ Html.Element: param_ :: 'Param > ()
+ Html.Element: param_A :: 'Param ??> a => a -> ( 'Param :@: a) ()
+ Html.Element: picture_ :: ( 'Picture ?> a) => a -> 'Picture > a
+ Html.Element: picture_A :: ( 'Picture ??> a, 'Picture ?> b) => a -> b -> ( 'Picture :@: a) b
+ Html.Element: plaintext_ :: ( 'Plaintext ?> a) => a -> 'Plaintext > a
+ Html.Element: plaintext_A :: ( 'Plaintext ??> a, 'Plaintext ?> b) => a -> b -> ( 'Plaintext :@: a) b
+ Html.Element: pre_ :: ( 'Pre ?> a) => a -> 'Pre > a
+ Html.Element: pre_A :: ( 'Pre ??> a, 'Pre ?> b) => a -> b -> ( 'Pre :@: a) b
+ Html.Element: progress_ :: ( 'Progress ?> a) => a -> 'Progress > a
+ Html.Element: progress_A :: ( 'Progress ??> a, 'Progress ?> b) => a -> b -> ( 'Progress :@: a) b
+ Html.Element: q_ :: ( 'Q ?> a) => a -> 'Q > a
+ Html.Element: q_A :: ( 'Q ??> a, 'Q ?> b) => a -> b -> ( 'Q :@: a) b
+ Html.Element: rp_ :: ( 'Rp ?> a) => a -> 'Rp > a
+ Html.Element: rp_A :: ( 'Rp ??> a, 'Rp ?> b) => a -> b -> ( 'Rp :@: a) b
+ Html.Element: rt_ :: ( 'Rt ?> a) => a -> 'Rt > a
+ Html.Element: rt_A :: ( 'Rt ??> a, 'Rt ?> b) => a -> b -> ( 'Rt :@: a) b
+ Html.Element: rtc_ :: ( 'Rtc ?> a) => a -> 'Rtc > a
+ Html.Element: rtc_A :: ( 'Rtc ??> a, 'Rtc ?> b) => a -> b -> ( 'Rtc :@: a) b
+ Html.Element: ruby_ :: ( 'Ruby ?> a) => a -> 'Ruby > a
+ Html.Element: ruby_A :: ( 'Ruby ??> a, 'Ruby ?> b) => a -> b -> ( 'Ruby :@: a) b
+ Html.Element: s_ :: ( 'S ?> a) => a -> 'S > a
+ Html.Element: s_A :: ( 'S ??> a, 'S ?> b) => a -> b -> ( 'S :@: a) b
+ Html.Element: samp_ :: ( 'Samp ?> a) => a -> 'Samp > a
+ Html.Element: samp_A :: ( 'Samp ??> a, 'Samp ?> b) => a -> b -> ( 'Samp :@: a) b
+ Html.Element: script_ :: ( 'Script ?> a) => a -> 'Script > a
+ Html.Element: script_A :: ( 'Script ??> a, 'Script ?> b) => a -> b -> ( 'Script :@: a) b
+ Html.Element: section_ :: ( 'Section ?> a) => a -> 'Section > a
+ Html.Element: section_A :: ( 'Section ??> a, 'Section ?> b) => a -> b -> ( 'Section :@: a) b
+ Html.Element: select_ :: ( 'Select ?> a) => a -> 'Select > a
+ Html.Element: select_A :: ( 'Select ??> a, 'Select ?> b) => a -> b -> ( 'Select :@: a) b
+ Html.Element: shadow_ :: ( 'Shadow ?> a) => a -> 'Shadow > a
+ Html.Element: shadow_A :: ( 'Shadow ??> a, 'Shadow ?> b) => a -> b -> ( 'Shadow :@: a) b
+ Html.Element: slot_ :: ( 'Slot ?> a) => a -> 'Slot > a
+ Html.Element: slot_A :: ( 'Slot ??> a, 'Slot ?> b) => a -> b -> ( 'Slot :@: a) b
+ Html.Element: small_ :: ( 'Small ?> a) => a -> 'Small > a
+ Html.Element: small_A :: ( 'Small ??> a, 'Small ?> b) => a -> b -> ( 'Small :@: a) b
+ Html.Element: source_ :: 'Source > ()
+ Html.Element: source_A :: 'Source ??> a => a -> ( 'Source :@: a) ()
+ Html.Element: spacer_ :: ( 'Spacer ?> a) => a -> 'Spacer > a
+ Html.Element: spacer_A :: ( 'Spacer ??> a, 'Spacer ?> b) => a -> b -> ( 'Spacer :@: a) b
+ Html.Element: span_ :: ( 'Span ?> a) => a -> 'Span > a
+ Html.Element: span_A :: ( 'Span ??> a, 'Span ?> b) => a -> b -> ( 'Span :@: a) b
+ Html.Element: strike_ :: ( 'Strike ?> a) => a -> 'Strike > a
+ Html.Element: strike_A :: ( 'Strike ??> a, 'Strike ?> b) => a -> b -> ( 'Strike :@: a) b
+ Html.Element: strong_ :: ( 'Strong ?> a) => a -> 'Strong > a
+ Html.Element: strong_A :: ( 'Strong ??> a, 'Strong ?> b) => a -> b -> ( 'Strong :@: a) b
+ Html.Element: style_ :: ( 'Style ?> a) => a -> 'Style > a
+ Html.Element: style_A :: ( 'Style ??> a, 'Style ?> b) => a -> b -> ( 'Style :@: a) b
+ Html.Element: sub_ :: ( 'Sub ?> a) => a -> 'Sub > a
+ Html.Element: sub_A :: ( 'Sub ??> a, 'Sub ?> b) => a -> b -> ( 'Sub :@: a) b
+ Html.Element: summary_ :: ( 'Summary ?> a) => a -> 'Summary > a
+ Html.Element: summary_A :: ( 'Summary ??> a, 'Summary ?> b) => a -> b -> ( 'Summary :@: a) b
+ Html.Element: sup_ :: ( 'Sup ?> a) => a -> 'Sup > a
+ Html.Element: sup_A :: ( 'Sup ??> a, 'Sup ?> b) => a -> b -> ( 'Sup :@: a) b
+ Html.Element: svg_ :: ( 'Svg ?> a) => a -> 'Svg > a
+ Html.Element: svg_A :: ( 'Svg ??> a, 'Svg ?> b) => a -> b -> ( 'Svg :@: a) b
+ Html.Element: table_ :: ( 'Table ?> a) => a -> 'Table > a
+ Html.Element: table_A :: ( 'Table ??> a, 'Table ?> b) => a -> b -> ( 'Table :@: a) b
+ Html.Element: tbody_ :: ( 'Tbody ?> a) => a -> 'Tbody > a
+ Html.Element: tbody_A :: ( 'Tbody ??> a, 'Tbody ?> b) => a -> b -> ( 'Tbody :@: a) b
+ Html.Element: td_ :: ( 'Td ?> a) => a -> 'Td > a
+ Html.Element: td_A :: ( 'Td ??> a, 'Td ?> b) => a -> b -> ( 'Td :@: a) b
+ Html.Element: template_ :: ( 'Template ?> a) => a -> 'Template > a
+ Html.Element: template_A :: ( 'Template ??> a, 'Template ?> b) => a -> b -> ( 'Template :@: a) b
+ Html.Element: textarea_ :: ( 'Textarea ?> a) => a -> 'Textarea > a
+ Html.Element: textarea_A :: ( 'Textarea ??> a, 'Textarea ?> b) => a -> b -> ( 'Textarea :@: a) b
+ Html.Element: tfoot_ :: ( 'Tfoot ?> a) => a -> 'Tfoot > a
+ Html.Element: tfoot_A :: ( 'Tfoot ??> a, 'Tfoot ?> b) => a -> b -> ( 'Tfoot :@: a) b
+ Html.Element: th_ :: ( 'Th ?> a) => a -> 'Th > a
+ Html.Element: th_A :: ( 'Th ??> a, 'Th ?> b) => a -> b -> ( 'Th :@: a) b
+ Html.Element: thead_ :: ( 'Thead ?> a) => a -> 'Thead > a
+ Html.Element: thead_A :: ( 'Thead ??> a, 'Thead ?> b) => a -> b -> ( 'Thead :@: a) b
+ Html.Element: time_ :: ( 'Time ?> a) => a -> 'Time > a
+ Html.Element: time_A :: ( 'Time ??> a, 'Time ?> b) => a -> b -> ( 'Time :@: a) b
+ Html.Element: title_ :: ( 'Title ?> a) => a -> 'Title > a
+ Html.Element: title_A :: ( 'Title ??> a, 'Title ?> b) => a -> b -> ( 'Title :@: a) b
+ Html.Element: tr_ :: ( 'Tr ?> a) => a -> 'Tr > a
+ Html.Element: tr_A :: ( 'Tr ??> a, 'Tr ?> b) => a -> b -> ( 'Tr :@: a) b
+ Html.Element: track_ :: 'Track > ()
+ Html.Element: track_A :: 'Track ??> a => a -> ( 'Track :@: a) ()
+ Html.Element: tt_ :: ( 'Tt ?> a) => a -> 'Tt > a
+ Html.Element: tt_A :: ( 'Tt ??> a, 'Tt ?> b) => a -> b -> ( 'Tt :@: a) b
+ Html.Element: u_ :: ( 'U ?> a) => a -> 'U > a
+ Html.Element: u_A :: ( 'U ??> a, 'U ?> b) => a -> b -> ( 'U :@: a) b
+ Html.Element: ul_ :: ( 'Ul ?> a) => a -> 'Ul > a
+ Html.Element: ul_A :: ( 'Ul ??> a, 'Ul ?> b) => a -> b -> ( 'Ul :@: a) b
+ Html.Element: var_ :: ( 'Var ?> a) => a -> 'Var > a
+ Html.Element: var_A :: ( 'Var ??> a, 'Var ?> b) => a -> b -> ( 'Var :@: a) b
+ Html.Element: video_ :: ( 'Video ?> a) => a -> 'Video > a
+ Html.Element: video_A :: ( 'Video ??> a, 'Video ?> b) => a -> b -> ( 'Video :@: a) b
+ Html.Element: wbr_ :: 'Wbr > ()
+ Html.Element: wbr_A :: 'Wbr ??> a => a -> ( 'Wbr :@: a) ()
+ Html.Element: xmp_ :: ( 'Xmp ?> a) => a -> 'Xmp > a
+ Html.Element: xmp_A :: ( 'Xmp ??> a, 'Xmp ?> b) => a -> b -> ( 'Xmp :@: a) b
+ Html.Type: (#) :: a -> b -> a # b
+ Html.Type: (:#:) :: a -> b -> (#) a b
+ Html.Type: A :: Element
+ Html.Type: AT :: b -> (:=) b
+ Html.Type: Abbr :: Element
+ Html.Type: AcceptA :: Attribute
+ Html.Type: AcceptCharsetA :: Attribute
+ Html.Type: AccesskeyA :: Attribute
+ Html.Type: Acronym :: Element
+ Html.Type: ActionA :: Attribute
+ Html.Type: Address :: Element
+ Html.Type: AlignA :: Attribute
+ Html.Type: AltA :: Attribute
+ Html.Type: Applet :: Element
+ Html.Type: Area :: Element
+ Html.Type: Article :: Element
+ Html.Type: Aside :: Element
+ Html.Type: AsyncA :: Attribute
+ Html.Type: Audio :: Element
+ Html.Type: AutocompleteA :: Attribute
+ Html.Type: AutofocusA :: Attribute
+ Html.Type: AutoplayA :: Attribute
+ Html.Type: AutosaveA :: Attribute
+ Html.Type: B :: Element
+ Html.Type: Base :: Element
+ Html.Type: Basefont :: Element
+ Html.Type: Bdi :: Element
+ Html.Type: Bdo :: Element
+ Html.Type: BgcolorA :: Attribute
+ Html.Type: Bgsound :: Element
+ Html.Type: Big :: Element
+ Html.Type: Blink :: Element
+ Html.Type: Blockquote :: Element
+ Html.Type: Body :: Element
+ Html.Type: BorderA :: Attribute
+ Html.Type: Br :: Element
+ Html.Type: BufferedA :: Attribute
+ Html.Type: Button :: Element
+ Html.Type: Canvas :: Element
+ Html.Type: Caption :: Element
+ Html.Type: Center :: Element
+ Html.Type: ChallengeA :: Attribute
+ Html.Type: CharsetA :: Attribute
+ Html.Type: CheckedA :: Attribute
+ Html.Type: Cite :: Element
+ Html.Type: CiteA :: Attribute
+ Html.Type: ClassA :: Attribute
+ Html.Type: Code :: Element
+ Html.Type: CodeA :: Attribute
+ Html.Type: CodebaseA :: Attribute
+ Html.Type: Col :: Element
+ Html.Type: Colgroup :: Element
+ Html.Type: ColorA :: Attribute
+ Html.Type: ColsA :: Attribute
+ Html.Type: ColspanA :: Attribute
+ Html.Type: Command :: Element
+ Html.Type: Content :: Element
+ Html.Type: ContentA :: Attribute
+ Html.Type: ContenteditableA :: Attribute
+ Html.Type: ContextmenuA :: Attribute
+ Html.Type: ControlsA :: Attribute
+ Html.Type: CoordsA :: Attribute
+ Html.Type: CrossoriginA :: Attribute
+ Html.Type: DOCTYPE :: Element
+ Html.Type: Data :: Element
+ Html.Type: DataA :: Attribute
+ Html.Type: Datalist :: Element
+ Html.Type: DatetimeA :: Attribute
+ Html.Type: Dd :: Element
+ Html.Type: DefaultA :: Attribute
+ Html.Type: DeferA :: Attribute
+ Html.Type: Del :: Element
+ Html.Type: Details :: Element
+ Html.Type: Dfn :: Element
+ Html.Type: Dialog :: Element
+ Html.Type: Dir :: Element
+ Html.Type: DirA :: Attribute
+ Html.Type: DirnameA :: Attribute
+ Html.Type: DisabledA :: Attribute
+ Html.Type: Div :: Element
+ Html.Type: Dl :: Element
+ Html.Type: DownloadA :: Attribute
+ Html.Type: DraggableA :: Attribute
+ Html.Type: DropzoneA :: Attribute
+ Html.Type: Dt :: Element
+ Html.Type: Element :: Element
+ Html.Type: Em :: Element
+ Html.Type: Embed :: Element
+ Html.Type: EnctypeA :: Attribute
+ Html.Type: Fieldset :: Element
+ Html.Type: Figcaption :: Element
+ Html.Type: Figure :: Element
+ Html.Type: Font :: Element
+ Html.Type: Footer :: Element
+ Html.Type: ForA :: Attribute
+ Html.Type: Form :: Element
+ Html.Type: FormA :: Attribute
+ Html.Type: FormactionA :: Attribute
+ Html.Type: Frame :: Element
+ Html.Type: Frameset :: Element
+ Html.Type: H1 :: Element
+ Html.Type: H2 :: Element
+ Html.Type: H3 :: Element
+ Html.Type: H4 :: Element
+ Html.Type: H5 :: Element
+ Html.Type: H6 :: Element
+ Html.Type: Head :: Element
+ Html.Type: Header :: Element
+ Html.Type: HeadersA :: Attribute
+ Html.Type: HeightA :: Attribute
+ Html.Type: Hgroup :: Element
+ Html.Type: HiddenA :: Attribute
+ Html.Type: HighA :: Attribute
+ Html.Type: Hr :: Element
+ Html.Type: HrefA :: Attribute
+ Html.Type: HreflangA :: Attribute
+ Html.Type: Html :: Element
+ Html.Type: HttpEquivA :: Attribute
+ Html.Type: I :: Element
+ Html.Type: IconA :: Attribute
+ Html.Type: IdA :: Attribute
+ Html.Type: Iframe :: Element
+ Html.Type: Image :: Element
+ Html.Type: Img :: Element
+ Html.Type: Input :: Element
+ Html.Type: Ins :: Element
+ Html.Type: IntegrityA :: Attribute
+ Html.Type: Isindex :: Element
+ Html.Type: IsmapA :: Attribute
+ Html.Type: ItempropA :: Attribute
+ Html.Type: Kbd :: Element
+ Html.Type: Keygen :: Element
+ Html.Type: KeytypeA :: Attribute
+ Html.Type: KindA :: Attribute
+ Html.Type: Label :: Element
+ Html.Type: LabelA :: Attribute
+ Html.Type: LangA :: Attribute
+ Html.Type: LanguageA :: Attribute
+ Html.Type: Legend :: Element
+ Html.Type: Li :: Element
+ Html.Type: Link :: Element
+ Html.Type: ListA :: Attribute
+ Html.Type: Listing :: Element
+ Html.Type: LoopA :: Attribute
+ Html.Type: LowA :: Attribute
+ Html.Type: Main :: Element
+ Html.Type: ManifestA :: Attribute
+ Html.Type: Map :: Element
+ Html.Type: Mark :: Element
+ Html.Type: Marquee :: Element
+ Html.Type: Math :: Element
+ Html.Type: MaxA :: Attribute
+ Html.Type: MaxlengthA :: Attribute
+ Html.Type: MediaA :: Attribute
+ Html.Type: Menu :: Element
+ Html.Type: Menuitem :: Element
+ Html.Type: Meta :: Element
+ Html.Type: Meter :: Element
+ Html.Type: MethodA :: Attribute
+ Html.Type: MinA :: Attribute
+ Html.Type: MinlengthA :: Attribute
+ Html.Type: Multicol :: Element
+ Html.Type: MultipleA :: Attribute
+ Html.Type: MutedA :: Attribute
+ Html.Type: NameA :: Attribute
+ Html.Type: Nav :: Element
+ Html.Type: Nextid :: Element
+ Html.Type: Nobr :: Element
+ Html.Type: Noembed :: Element
+ Html.Type: Noframes :: Element
+ Html.Type: Noscript :: Element
+ Html.Type: NovalidateA :: Attribute
+ Html.Type: Object :: Element
+ Html.Type: Ol :: Element
+ Html.Type: OpenA :: Attribute
+ Html.Type: Optgroup :: Element
+ Html.Type: OptimumA :: Attribute
+ Html.Type: Option :: Element
+ Html.Type: Output :: Element
+ Html.Type: P :: Element
+ Html.Type: Param :: Element
+ Html.Type: PatternA :: Attribute
+ Html.Type: Picture :: Element
+ Html.Type: PingA :: Attribute
+ Html.Type: PlaceholderA :: Attribute
+ Html.Type: Plaintext :: Element
+ Html.Type: PosterA :: Attribute
+ Html.Type: Pre :: Element
+ Html.Type: PreloadA :: Attribute
+ Html.Type: Progress :: Element
+ Html.Type: Q :: Element
+ Html.Type: RadiogroupA :: Attribute
+ Html.Type: Raw :: a -> Raw a
+ Html.Type: ReadonlyA :: Attribute
+ Html.Type: RelA :: Attribute
+ Html.Type: RequiredA :: Attribute
+ Html.Type: ReversedA :: Attribute
+ Html.Type: RowsA :: Attribute
+ Html.Type: RowspanA :: Attribute
+ Html.Type: Rp :: Element
+ Html.Type: Rt :: Element
+ Html.Type: Rtc :: Element
+ Html.Type: Ruby :: Element
+ Html.Type: S :: Element
+ Html.Type: Samp :: Element
+ Html.Type: SandboxA :: Attribute
+ Html.Type: ScopeA :: Attribute
+ Html.Type: ScopedA :: Attribute
+ Html.Type: Script :: Element
+ Html.Type: SeamlessA :: Attribute
+ Html.Type: Section :: Element
+ Html.Type: Select :: Element
+ Html.Type: SelectedA :: Attribute
+ Html.Type: Shadow :: Element
+ Html.Type: ShapeA :: Attribute
+ Html.Type: SizeA :: Attribute
+ Html.Type: SizesA :: Attribute
+ Html.Type: Slot :: Element
+ Html.Type: SlotA :: Attribute
+ Html.Type: Small :: Element
+ Html.Type: Source :: Element
+ Html.Type: Spacer :: Element
+ Html.Type: Span :: Element
+ Html.Type: SpanA :: Attribute
+ Html.Type: SpellcheckA :: Attribute
+ Html.Type: SrcA :: Attribute
+ Html.Type: SrcdocA :: Attribute
+ Html.Type: SrclangA :: Attribute
+ Html.Type: SrcsetA :: Attribute
+ Html.Type: StartA :: Attribute
+ Html.Type: StepA :: Attribute
+ Html.Type: Strike :: Element
+ Html.Type: Strong :: Element
+ Html.Type: Style :: Element
+ Html.Type: StyleA :: Attribute
+ Html.Type: Sub :: Element
+ Html.Type: Summary :: Element
+ Html.Type: SummaryA :: Attribute
+ Html.Type: Sup :: Element
+ Html.Type: Svg :: Element
+ Html.Type: TabindexA :: Attribute
+ Html.Type: Table :: Element
+ Html.Type: TargetA :: Attribute
+ Html.Type: Tbody :: Element
+ Html.Type: Td :: Element
+ Html.Type: Template :: Element
+ Html.Type: Textarea :: Element
+ Html.Type: Tfoot :: Element
+ Html.Type: Th :: Element
+ Html.Type: Thead :: Element
+ Html.Type: Time :: Element
+ Html.Type: Title :: Element
+ Html.Type: TitleA :: Attribute
+ Html.Type: Tr :: Element
+ Html.Type: Track :: Element
+ Html.Type: Tt :: Element
+ Html.Type: TypeA :: Attribute
+ Html.Type: U :: Element
+ Html.Type: Ul :: Element
+ Html.Type: UsemapA :: Attribute
+ Html.Type: ValueA :: Attribute
+ Html.Type: Var :: Element
+ Html.Type: Video :: Element
+ Html.Type: Wbr :: Element
+ Html.Type: WidthA :: Attribute
+ Html.Type: WrapA :: Attribute
+ Html.Type: Xmp :: Element
+ Html.Type: [Child] :: (a ?> b) => b -> a > b
+ Html.Type: [WithAttributes] :: (a ??> b, a ?> c) => b -> c -> (a :@: b) c
+ Html.Type: data (#) a b
+ Html.Type: data Attribute
+ Html.Type: data Element
+ Html.Type: infixr 5 #
+ Html.Type: newtype (:=) (a :: Attribute) b
+ Html.Type: newtype Raw a

Files

src/Html.hs view
@@ -1,29 +1,18 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} -{-# LANGUAGE UndecidableInstances      #-}-{-# LANGUAGE ExplicitNamespaces        #-}-{-# LANGUAGE FlexibleInstances         #-}-{-# LANGUAGE MonoLocalBinds            #-}-{-# LANGUAGE TypeOperators             #-}+{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE FlexibleInstances    #-}+{-# LANGUAGE MonoLocalBinds       #-}+{-# LANGUAGE TypeOperators        #-}  module Html   ( renderString   , renderText   , renderByteString   , renderBuilder-  , type (>)(..)-  , type (:@:)(..)-  , type (#)(..)-  , (#)-  , type (?>)-  , type (??>)-  , type (:=)(..)   , Document-  , Raw(..)-  , Convert(..)-  , Converted-  , Attribute(..)-  , Element(..)+  , module Html.Type+  , module Html.Convert   , module Html.Element   ) where 
src/Html/Convert.hs view
@@ -4,34 +4,32 @@ {-# LANGUAGE BangPatterns               #-} {-# LANGUAGE MagicHash                  #-} -module Html.Convert where+module Html.Convert+  ( Converted(..)+  , Convert(..)+  ) where +import Html.Type.Internal+ import Data.Word import Data.Proxy import Data.String-import GHC.TypeLits--import Html.Type-import GHC.Prim (Addr#, ord#, indexCharOffAddr#)-import GHC.Types- import Data.Char (ord)- import Data.Double.Conversion.ByteString--import qualified GHC.CString    as GHC-import qualified Data.Monoid    as M-import qualified Data.Semigroup as S+import GHC.TypeLits+import GHC.Types+import GHC.Prim (Addr#, ord#, indexCharOffAddr#)+import GHC.CString (unpackCString#, unpackCStringUtf8#) +import qualified Data.Semigroup                   as S+import qualified Data.Monoid                      as M import qualified Data.ByteString.Builder          as B import qualified Data.ByteString.Builder.Prim     as BP import qualified Data.ByteString.Builder.Internal as U--import qualified Data.Text                   as T-import qualified Data.Text.Encoding          as T--import qualified Data.Text.Lazy              as TL-import qualified Data.Text.Lazy.Encoding     as TL+import qualified Data.Text                        as T+import qualified Data.Text.Encoding               as T+import qualified Data.Text.Lazy                   as TL+import qualified Data.Text.Lazy.Encoding          as TL  escapeUtf8 :: BP.BoundedPrim Char escapeUtf8 =@@ -80,8 +78,8 @@   instances if you want use custom types in your document.  @-{\-\# LANGUAGE RecordWildCards \#-\} {\-\# LANGUAGE OverloadedStrings \#-\}+{\-\# LANGUAGE RecordWildCards   \#-\}  module Main where @@ -185,17 +183,17 @@ stringConvRaw = Converted . B.stringUtf8  {-# RULES "CONVERTED literal" forall a.-    stringConv (GHC.unpackCString# a)+    stringConv (unpackCString# a)       = builderCString# escape a #-}  {-# RULES "CONVERTED literal raw" forall a.-    stringConvRaw (GHC.unpackCString# a)+    stringConvRaw (unpackCString# a)       = builderCString# (BP.liftFixedToBounded BP.word8) a #-}  {-# RULES "CONVERTED literal utf8" forall a.-    stringConv (GHC.unpackCStringUtf8# a)-      = convert (T.pack (GHC.unpackCStringUtf8# a)) #-}+    stringConv (unpackCStringUtf8# a)+      = convert (T.pack (unpackCStringUtf8# a)) #-}  {-# RULES "CONVERTED literal utf8 raw" forall a.-    stringConvRaw (GHC.unpackCStringUtf8# a)-      = convert (Raw (T.pack (GHC.unpackCStringUtf8# a))) #-}+    stringConvRaw (unpackCStringUtf8# a)+      = convert (Raw (T.pack (unpackCStringUtf8# a))) #-}
src/Html/Reify.hs view
@@ -11,7 +11,7 @@  module Html.Reify where -import Html.Type+import Html.Type.Internal import Html.Convert  import GHC.TypeLits
src/Html/Type.hs view
@@ -1,1389 +1,16 @@-{-# OPTIONS_GHC -fno-warn-unticked-promoted-constructors #-}--{-# LANGUAGE UndecidableInstances #-}-{-# LANGUAGE TypeOperators        #-}-{-# LANGUAGE TypeFamilies         #-}-{-# LANGUAGE DataKinds            #-}-{-# LANGUAGE PolyKinds            #-}-{-# LANGUAGE GADTs                #-}--module Html.Type where--import GHC.TypeLits-import GHC.Exts-import Data.Proxy-import Data.Type.Bool--{-# DEPRECATED--  Acronym   ,-  Applet    ,-  Basefont  ,-  Big       ,-  Blink     ,-  Center    ,-  Command   ,-  Content   ,-  Dir       ,-  Font      ,-  Frame     ,-  Frameset  ,-  Isindex   ,-  Keygen    ,-  Listing   ,-  Marquee   ,-  Multicol  ,-  Noembed   ,-  Plaintext ,-  Shadow    ,-  Spacer    ,-  Strike    ,-  Tt        ,-  Xmp       ,-  Nextid-- "This is an obsolete html element and should not be used." #-}---- | The data type of all html elements and the kind of elements.-data Element-  = DOCTYPE--  | A-  | Abbr-  | Acronym-  | Address-  | Applet-  | Area-  | Article-  | Aside-  | Audio-  | B-  | Base-  | Basefont-  | Bdi-  | Bdo-  | Bgsound-  | Big-  | Blink-  | Blockquote-  | Body-  | Br-  | Button-  | Canvas-  | Caption-  | Center-  | Cite-  | Code-  | Col-  | Colgroup-  | Command-  | Content-  | Data-  | Datalist-  | Dd-  | Del-  | Details-  | Dfn-  | Dialog-  | Dir-  | Div-  | Dl-  | Dt-  | Element-  | Em-  | Embed-  | Fieldset-  | Figcaption-  | Figure-  | Font-  | Footer-  | Form-  | Frame-  | Frameset-  | H1-  | H2-  | H3-  | H4-  | H5-  | H6-  | Head-  | Header-  | Hgroup-  | Hr-  | Html-  | I-  | Iframe-  | Image-  | Img-  | Input-  | Ins-  | Isindex-  | Kbd-  | Keygen-  | Label-  | Legend-  | Li-  | Link-  | Listing-  | Main-  | Map-  | Mark-  | Marquee-  | Math-  | Menu-  | Menuitem-  | Meta-  | Meter-  | Multicol-  | Nav-  | Nextid-  | Nobr-  | Noembed-  | Noframes-  | Noscript-  | Object-  | Ol-  | Optgroup-  | Option-  | Output-  | P-  | Param-  | Picture-  | Plaintext-  | Pre-  | Progress-  | Q-  | Rp-  | Rt-  | Rtc-  | Ruby-  | S-  | Samp-  | Script-  | Section-  | Select-  | Shadow-  | Slot-  | Small-  | Source-  | Spacer-  | Span-  | Strike-  | Strong-  | Style-  | Sub-  | Summary-  | Sup-  | Svg-  | Table-  | Tbody-  | Td-  | Template-  | Textarea-  | Tfoot-  | Th-  | Thead-  | Time-  | Title-  | Tr-  | Track-  | Tt-  | U-  | Ul-  | Var-  | Video-  | Wbr-  | Xmp--data Attribute-  = AcceptA-  | AcceptCharsetA-  | AccesskeyA-  | ActionA-  | AlignA-  | AltA-  | AsyncA-  | AutocompleteA-  | AutofocusA-  | AutoplayA-  | AutosaveA-  | BgcolorA-  | BorderA-  | BufferedA-  | ChallengeA-  | CharsetA-  | CheckedA-  | CiteA-  | ClassA-  | CodeA-  | CodebaseA-  | ColorA-  | ColsA-  | ColspanA-  | ContentA-  | ContenteditableA-  | ContextmenuA-  | ControlsA-  | CoordsA-  | CrossoriginA-  | DataA-  | DatetimeA-  | DefaultA-  | DeferA-  | DirA-  | DirnameA-  | DisabledA-  | DownloadA-  | DraggableA-  | DropzoneA-  | EnctypeA-  | ForA-  | FormA-  | FormactionA-  | HeadersA-  | HeightA-  | HiddenA-  | HighA-  | HrefA-  | HreflangA-  | HttpEquivA-  | IconA-  | IdA-  | IntegrityA-  | IsmapA-  | ItempropA-  | KeytypeA-  | KindA-  | LabelA-  | LangA-  | LanguageA-  | ListA-  | LoopA-  | LowA-  | ManifestA-  | MaxA-  | MaxlengthA-  | MinlengthA-  | MediaA-  | MethodA-  | MinA-  | MultipleA-  | MutedA-  | NameA-  | NovalidateA-  | OpenA-  | OptimumA-  | PatternA-  | PingA-  | PlaceholderA-  | PosterA-  | PreloadA-  | RadiogroupA-  | ReadonlyA-  | RelA-  | RequiredA-  | ReversedA-  | RowsA-  | RowspanA-  | SandboxA-  | ScopeA-  | ScopedA-  | SeamlessA-  | SelectedA-  | ShapeA-  | SizeA-  | SizesA-  | SlotA-  | SpanA-  | SpellcheckA-  | SrcA-  | SrcdocA-  | SrclangA-  | SrcsetA-  | StartA-  | StepA-  | StyleA-  | SummaryA-  | TabindexA-  | TargetA-  | TitleA-  | TypeA-  | UsemapA-  | ValueA-  | WidthA-  | WrapA--newtype (:=) (a :: Attribute) b = AT b---- | Check whether `b` is a valid child of `a`.  You'll propably never--- need to call this directly.  Through a GADT, it is enforced that--- every child is lawful.-type family (a :: Element) ?> b :: Constraint where-  a ?> (b # c)         = (a ?> b, a ?> c)-  a ?> (b > _)         = MaybeTypeError a b (TestPaternity (SingleElement b) (GetInfo a) (GetInfo b))-  a ?> (b :@: _) _     = MaybeTypeError a b (TestPaternity (SingleElement b) (GetInfo a) (GetInfo b))-  a ?> Maybe b         = a ?> b-  a ?> Either b c      = (a ?> b, a ?> c)-  a ?> f (b > c)       = a ?> (b > c)-  a ?> f ((b :@: c) d) = a ?> (b > d)-  a ?> f (b # c)       = a ?> (b # c)-  a ?> ()              = ()-  a ?> (b -> c)        = TypeError (Text "Html elements can't contain functions")-  a ?> b               = CheckString a b--type family Null xs where-  Null '[] = True-  Null _ = False--type family (a :: Element) ??> b :: Constraint where-  a ??> (b # c)  = (a ??> b, a ??> c)-  a ??> (b := _) = If (Elem a (GetAttributeInfo b) || Null (GetAttributeInfo b))-                   (() :: Constraint)-                   (TypeError (ShowType b :<>: Text " is not a valid attribute of " :<>: ShowType a))-  a ??> b        = TypeError (ShowType b :<>: Text " is not an attribute.")---- | Combine two elements or attributes sequentially.------ >>> i_ () # div_ ()--- <i></i><div></div>------ >>> i_A (A.id_ "a" # A.class_ "b") "c"--- <i id="a" class="b">c</i>-data (#) a b = (:#:) a b-{-# INLINE (#) #-}-(#) :: a -> b -> a # b-(#) = (:#:)-infixr 5 #---- | Descend to a valid child of an element.--- It is recommended to use the predefined elements.------ >>> Child "a" :: 'Div > String--- <div>a</div>------ >>> div_ "a"--- <div>a</div>-data (>) (a :: Element) b where-  Child :: (a ?> b) => b -> a > b-infixr 8 >---- | Decorate an element with attributes and descend to a valid child.--- It is recommended to use the predefined elements.------ >>> WithAttributes (A.class_ "bar") "a" :: ('Div :@: ('ClassA := String)) String--- <div class="bar">a</div>------ >>> div_A (A.class_ "bar") "a"--- <div class="bar">a</div>-data (:@:) (a :: Element) b c where-  WithAttributes :: (a ??> b, a ?> c) => b -> c -> (a :@: b) c-infixr 8 :@:---- | Wrapper for types which won't be escaped.-newtype Raw a = Raw a--  --------------------  -- internal code ---  ---------------------type family ShowElement e where-  ShowElement DOCTYPE    = "!DOCTYPE html"-  ShowElement A          = "a"-  ShowElement Abbr       = "abbr"-  ShowElement Acronym    = "acronym"-  ShowElement Address    = "address"-  ShowElement Applet     = "applet"-  ShowElement Area       = "area"-  ShowElement Article    = "article"-  ShowElement Aside      = "aside"-  ShowElement Audio      = "audio"-  ShowElement B          = "b"-  ShowElement Base       = "base"-  ShowElement Basefont   = "basefont"-  ShowElement Bdi        = "bdi"-  ShowElement Bdo        = "bdo"-  ShowElement Bgsound    = "bgsound"-  ShowElement Big        = "big"-  ShowElement Blink      = "blink"-  ShowElement Blockquote = "blockquote"-  ShowElement Body       = "body"-  ShowElement Br         = "br"-  ShowElement Button     = "button"-  ShowElement Canvas     = "canvas"-  ShowElement Caption    = "caption"-  ShowElement Center     = "center"-  ShowElement Cite       = "cite"-  ShowElement Code       = "code"-  ShowElement Col        = "col"-  ShowElement Colgroup   = "colgroup"-  ShowElement Command    = "command"-  ShowElement Content    = "content"-  ShowElement Data       = "data"-  ShowElement Datalist   = "datalist"-  ShowElement Dd         = "dd"-  ShowElement Del        = "del"-  ShowElement Details    = "details"-  ShowElement Dfn        = "dfn"-  ShowElement Dialog     = "dialog"-  ShowElement Dir        = "dir"-  ShowElement Div        = "div"-  ShowElement Dl         = "dl"-  ShowElement Dt         = "dt"-  ShowElement 'Element   = "element"-  ShowElement Em         = "em"-  ShowElement Embed      = "embed"-  ShowElement Fieldset   = "fieldset"-  ShowElement Figcaption = "figcaption"-  ShowElement Figure     = "figure"-  ShowElement Font       = "font"-  ShowElement Footer     = "footer"-  ShowElement Form       = "form"-  ShowElement Frame      = "frame"-  ShowElement Frameset   = "frameset"-  ShowElement H1         = "h1"-  ShowElement H2         = "h2"-  ShowElement H3         = "h3"-  ShowElement H4         = "h4"-  ShowElement H5         = "h5"-  ShowElement H6         = "h6"-  ShowElement Head       = "head"-  ShowElement Header     = "header"-  ShowElement Hgroup     = "hgroup"-  ShowElement Hr         = "hr"-  ShowElement Html       = "html"-  ShowElement I          = "i"-  ShowElement Iframe     = "iframe"-  ShowElement Image      = "image"-  ShowElement Img        = "img"-  ShowElement Input      = "input"-  ShowElement Ins        = "ins"-  ShowElement Isindex    = "isindex"-  ShowElement Kbd        = "kbd"-  ShowElement Keygen     = "keygen"-  ShowElement Label      = "label"-  ShowElement Legend     = "legend"-  ShowElement Li         = "li"-  ShowElement Link       = "link"-  ShowElement Listing    = "listing"-  ShowElement Main       = "main"-  ShowElement Map        = "map"-  ShowElement Mark       = "mark"-  ShowElement Marquee    = "marquee"-  ShowElement Math       = "math"-  ShowElement Menu       = "menu"-  ShowElement Menuitem   = "menuitem"-  ShowElement Meta       = "meta"-  ShowElement Meter      = "meter"-  ShowElement Multicol   = "multicol"-  ShowElement Nav        = "nav"-  ShowElement Nextid     = "nextid"-  ShowElement Nobr       = "nobr"-  ShowElement Noembed    = "noembed"-  ShowElement Noframes   = "noframes"-  ShowElement Noscript   = "noscript"-  ShowElement Object     = "object"-  ShowElement Ol         = "ol"-  ShowElement Optgroup   = "optgroup"-  ShowElement Option     = "option"-  ShowElement Output     = "output"-  ShowElement P          = "p"-  ShowElement Param      = "param"-  ShowElement Picture    = "picture"-  ShowElement Plaintext  = "plaintext"-  ShowElement Pre        = "pre"-  ShowElement Progress   = "progress"-  ShowElement Q          = "q"-  ShowElement Rp         = "rp"-  ShowElement Rt         = "rt"-  ShowElement Rtc        = "rtc"-  ShowElement Ruby       = "ruby"-  ShowElement S          = "s"-  ShowElement Samp       = "samp"-  ShowElement Script     = "script"-  ShowElement Section    = "section"-  ShowElement Select     = "select"-  ShowElement Shadow     = "shadow"-  ShowElement Slot       = "slot"-  ShowElement Small      = "small"-  ShowElement Source     = "source"-  ShowElement Spacer     = "spacer"-  ShowElement Span       = "span"-  ShowElement Strike     = "strike"-  ShowElement Strong     = "strong"-  ShowElement Style      = "style"-  ShowElement Sub        = "sub"-  ShowElement Summary    = "summary"-  ShowElement Sup        = "sup"-  ShowElement Svg        = "svg"-  ShowElement Table      = "table"-  ShowElement Tbody      = "tbody"-  ShowElement Td         = "td"-  ShowElement Template   = "template"-  ShowElement Textarea   = "textarea"-  ShowElement Tfoot      = "tfoot"-  ShowElement Th         = "th"-  ShowElement Thead      = "thead"-  ShowElement Time       = "time"-  ShowElement Title      = "title"-  ShowElement Tr         = "tr"-  ShowElement Track      = "track"-  ShowElement Tt         = "tt"-  ShowElement U          = "u"-  ShowElement Ul         = "ul"-  ShowElement Var        = "var"-  ShowElement Video      = "video"-  ShowElement Wbr        = "wbr"-  ShowElement Xmp        = "xmp"--type family ShowAttribute (x :: Attribute) where-  ShowAttribute AcceptA          = " accept=\""-  ShowAttribute AcceptCharsetA   = " accept-charset=\""-  ShowAttribute AccesskeyA       = " accesskey=\""-  ShowAttribute ActionA          = " action=\""-  ShowAttribute AlignA           = " align=\""-  ShowAttribute AltA             = " alt=\""-  ShowAttribute AsyncA           = " async=\""-  ShowAttribute AutocompleteA    = " autocomplete=\""-  ShowAttribute AutofocusA       = " autofocus=\""-  ShowAttribute AutoplayA        = " autoplay=\""-  ShowAttribute AutosaveA        = " autosave=\""-  ShowAttribute BgcolorA         = " bgcolor=\""-  ShowAttribute BorderA          = " border=\""-  ShowAttribute BufferedA        = " buffered=\""-  ShowAttribute ChallengeA       = " challenge=\""-  ShowAttribute CharsetA         = " charset=\""-  ShowAttribute CheckedA         = " checked=\""-  ShowAttribute CiteA            = " cite=\""-  ShowAttribute ClassA           = " class=\""-  ShowAttribute CodeA            = " code=\""-  ShowAttribute CodebaseA        = " codebase=\""-  ShowAttribute ColorA           = " color=\""-  ShowAttribute ColsA            = " cols=\""-  ShowAttribute ColspanA         = " colspan=\""-  ShowAttribute ContentA         = " content=\""-  ShowAttribute ContenteditableA = " contenteditable=\""-  ShowAttribute ContextmenuA     = " contextmenu=\""-  ShowAttribute ControlsA        = " controls=\""-  ShowAttribute CoordsA          = " coords=\""-  ShowAttribute CrossoriginA     = " crossorigin=\""-  ShowAttribute DataA            = " data=\""-  ShowAttribute DatetimeA        = " datetime=\""-  ShowAttribute DefaultA         = " default=\""-  ShowAttribute DeferA           = " defer=\""-  ShowAttribute DirA             = " dir=\""-  ShowAttribute DirnameA         = " dirname=\""-  ShowAttribute DisabledA        = " disabled=\""-  ShowAttribute DownloadA        = " download=\""-  ShowAttribute DraggableA       = " draggable=\""-  ShowAttribute DropzoneA        = " dropzone=\""-  ShowAttribute EnctypeA         = " enctype=\""-  ShowAttribute ForA             = " for=\""-  ShowAttribute FormA            = " form=\""-  ShowAttribute FormactionA      = " formaction=\""-  ShowAttribute HeadersA         = " headers=\""-  ShowAttribute HeightA          = " height=\""-  ShowAttribute HiddenA          = " hidden=\""-  ShowAttribute HighA            = " high=\""-  ShowAttribute HrefA            = " href=\""-  ShowAttribute HreflangA        = " hreflang=\""-  ShowAttribute HttpEquivA       = " httpequiv=\""-  ShowAttribute IconA            = " icon=\""-  ShowAttribute IdA              = " id=\""-  ShowAttribute IntegrityA       = " integrity=\""-  ShowAttribute IsmapA           = " ismap=\""-  ShowAttribute ItempropA        = " itemprop=\""-  ShowAttribute KeytypeA         = " keytype=\""-  ShowAttribute KindA            = " kind=\""-  ShowAttribute LabelA           = " label=\""-  ShowAttribute LangA            = " lang=\""-  ShowAttribute LanguageA        = " language=\""-  ShowAttribute ListA            = " list=\""-  ShowAttribute LoopA            = " loop=\""-  ShowAttribute LowA             = " low=\""-  ShowAttribute ManifestA        = " manifest=\""-  ShowAttribute MaxA             = " max=\""-  ShowAttribute MaxlengthA       = " maxlength=\""-  ShowAttribute MinlengthA       = " minlength=\""-  ShowAttribute MediaA           = " media=\""-  ShowAttribute MethodA          = " method=\""-  ShowAttribute MinA             = " min=\""-  ShowAttribute MultipleA        = " multiple=\""-  ShowAttribute MutedA           = " muted=\""-  ShowAttribute NameA            = " name=\""-  ShowAttribute NovalidateA      = " novalidate=\""-  ShowAttribute OpenA            = " open=\""-  ShowAttribute OptimumA         = " optimum=\""-  ShowAttribute PatternA         = " pattern=\""-  ShowAttribute PingA            = " ping=\""-  ShowAttribute PlaceholderA     = " placeholder=\""-  ShowAttribute PosterA          = " poster=\""-  ShowAttribute PreloadA         = " preload=\""-  ShowAttribute RadiogroupA      = " radiogroup=\""-  ShowAttribute ReadonlyA        = " readonly=\""-  ShowAttribute RelA             = " rel=\""-  ShowAttribute RequiredA        = " required=\""-  ShowAttribute ReversedA        = " reversed=\""-  ShowAttribute RowsA            = " rows=\""-  ShowAttribute RowspanA         = " rowspan=\""-  ShowAttribute SandboxA         = " sandbox=\""-  ShowAttribute ScopeA           = " scope=\""-  ShowAttribute ScopedA          = " scoped=\""-  ShowAttribute SeamlessA        = " seamless=\""-  ShowAttribute SelectedA        = " selected=\""-  ShowAttribute ShapeA           = " shape=\""-  ShowAttribute SizeA            = " size=\""-  ShowAttribute SizesA           = " sizes=\""-  ShowAttribute SlotA            = " slot=\""-  ShowAttribute SpanA            = " span=\""-  ShowAttribute SpellcheckA      = " spellcheck=\""-  ShowAttribute SrcA             = " src=\""-  ShowAttribute SrcdocA          = " srcdoc=\""-  ShowAttribute SrclangA         = " srclang=\""-  ShowAttribute SrcsetA          = " srcset=\""-  ShowAttribute StartA           = " start=\""-  ShowAttribute StepA            = " step=\""-  ShowAttribute StyleA           = " style=\""-  ShowAttribute SummaryA         = " summary=\""-  ShowAttribute TabindexA        = " tabindex=\""-  ShowAttribute TargetA          = " target=\""-  ShowAttribute TitleA           = " title=\""-  ShowAttribute TypeA            = " type=\""-  ShowAttribute UsemapA          = " usemap=\""-  ShowAttribute ValueA           = " value=\""-  ShowAttribute WidthA           = " width=\""-  ShowAttribute WrapA            = " wrap=\""--type family OpenTag e where-  OpenTag e = AppendSymbol "<" (AppendSymbol (ShowElement e) ">")--type family CloseTag e where-  CloseTag e = AppendSymbol "</" (AppendSymbol (ShowElement e) ">")--type family CountContent c where-  CountContent (a # b)       = CountContent a + CountContent b-  CountContent (_ > b)       = CountContent b-  CountContent ((_ :@: b) c) = CountContent b + CountContent c-  CountContent (_ := b)      = CountContent b-  CountContent ()            = 0-  CountContent (Proxy _)     = 0-  CountContent _             = 1---- | We need efficient cons, snoc and append.  This API has cons(O1)--- and snoc(O1) but append(On).  Optimal would be a real 2-3--- FingerTree.-data FingerTree = FingerTree [Symbol] Symbol--type family (<|) (s :: Symbol) (t :: FingerTree) :: FingerTree where-  (<|) l ('FingerTree (s ': ss) r) = 'FingerTree (AppendSymbol l s ': ss) r-  (<|) l ('FingerTree '[] r) = 'FingerTree '[] (AppendSymbol l r)--type family (|>) (t :: FingerTree) (s :: Symbol) :: FingerTree where-  (|>) ('FingerTree ss r) rr = 'FingerTree ss (AppendSymbol r rr)--type family (><) (t1 :: FingerTree) (t2 :: FingerTree) :: FingerTree where-  (><) ('FingerTree ss r) ('FingerTree (s ': ss2) r2) = 'FingerTree (Append ss (AppendSymbol r s ': ss2)) r2-  (><) ('FingerTree ss r) ('FingerTree '[] r2) = 'FingerTree ss (AppendSymbol r r2)---- | Flatten a html tree of elements into a type list of tags.-type family ToTypeList a :: FingerTree where-  ToTypeList (a # b)        = ToTypeList a >< ToTypeList b-  ToTypeList (a > ())       = 'FingerTree '[] (If (HasContent (GetInfo a)) (AppendSymbol (OpenTag a) (CloseTag a)) (OpenTag a))-  ToTypeList ((a :@: b) ()) = AppendSymbol "<" (ShowElement a) <| ToTypeList b |> If (HasContent (GetInfo a)) (AppendSymbol ">" (CloseTag a)) ">"-  ToTypeList (a > b)        = OpenTag a <| ToTypeList b |> CloseTag a-  ToTypeList ((a :@: b) c)  = (AppendSymbol "<" (ShowElement a) <| ToTypeList b) >< (">" <| ToTypeList c |> CloseTag a)-  ToTypeList (a := b)       = ShowAttribute a <| ToTypeList b |> "\""-  ToTypeList ()             = 'FingerTree '[] ""-  ToTypeList (Proxy x)      = 'FingerTree '[] x-  ToTypeList x              = 'FingerTree '[""] ""---- | Append two type lists.------ Note that this definition is that ugly to reduce compiletimes.--- Please check whether the context reduction stack or compiletimes of--- a big html page get bigger if you try to refactor.-type family Append xs ys :: [Symbol] where--  Append (x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': x17 ': x18 ': x19 ': x20 ': x21 ': x22 ': x23 ': x24 ': x25 ': x26 ': x27 ': x28 ': x29 ': x30 ': x31 ': x32 ': x33 ': x34 ': x35 ': x36 ': x37 ': x38 ': x39 ': x40 ': x41 ': x42 ': x43 ': x44 ': x45 ': x46 ': x47 ': x48 ': x49 ': x50 ': x51 ': x52 ': x53 ': x54 ': x55 ': x56 ': x57 ': x58 ': x59 ': x60 ': x61 ': x62 ': x63 ': x64 ': xs) ys-        = x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': x17 ': x18 ': x19 ': x20 ': x21 ': x22 ': x23 ': x24 ': x25 ': x26 ': x27 ': x28 ': x29 ': x30 ': x31 ': x32 ': x33 ': x34 ': x35 ': x36 ': x37 ': x38 ': x39 ': x40 ': x41 ': x42 ': x43 ': x44 ': x45 ': x46 ': x47 ': x48 ': x49 ': x50 ': x51 ': x52 ': x53 ': x54 ': x55 ': x56 ': x57 ': x58 ': x59 ': x60 ': x61 ': x62 ': x63 ': x64 ': Append xs ys--  Append (x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': x17 ': x18 ': x19 ': x20 ': x21 ': x22 ': x23 ': x24 ': x25 ': x26 ': x27 ': x28 ': x29 ': x30 ': x31 ': x32 ': xs) ys-        = x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': x17 ': x18 ': x19 ': x20 ': x21 ': x22 ': x23 ': x24 ': x25 ': x26 ': x27 ': x28 ': x29 ': x30 ': x31 ': x32 ': Append xs ys--  Append (x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': xs) ys-        = x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': Append xs ys--  Append (x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': xs) ys-        = x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': Append xs ys--  Append (x1 ': x2 ': x3 ': x4 ': xs) ys-        = x1 ': x2 ': x3 ': x4 ': Append xs ys--  Append (x1 ': x2 ': xs) ys-        = x1 ': x2 ': Append xs ys--  Append (x1 ': xs) ys-        = x1 ': Append xs ys--  Append '[] ys-        = ys---- | Check whether an element may have content.-type family HasContent a where-  HasContent (ElementInfo _ NoContent) = False-  HasContent _                         = True---- | Type level drop.------ Note that this definition is that ugly to reduce compiletimes.--- Please check whether the context reduction stack or compiletimes of--- a big html page get bigger if you try to refactor.-type family Drop n xs :: [Symbol] where-  Drop 0 xs = xs-  Drop 1 (_ ': xs) = xs-  Drop 2 (_ ': _ ': xs) = xs-  Drop 3 (_ ': _ ': _ ': xs) = xs-  Drop 4 (_ ': _ ': _ ': _ ': xs) = xs-  Drop n (_ ': _ ': _ ': _ ': _ ': xs) = Drop (n-5) xs---- | Type level take.------ Note that this definition is that ugly to reduce compiletimes.--- Please check whether the context reduction stack or compiletimes of--- a big html page get bigger if you try to refactor.-type family Take n xs :: [Symbol] where-  Take 0 _ = '[]-  Take 1 (x1 ': _) = '[x1]-  Take 2 (x1 ': x2 ': _) = '[x1, x2]-  Take 3 (x1 ': x2 ': x3 ': _) = '[x1, x2, x3]-  Take 4 (x1 ': x2 ': x3 ': x4 ': _) = '[x1, x2, x3, x4]-  Take n (x1 ': x2 ': x3 ': x4 ': x5 ': xs) = x1 ': x2 ': x3 ': x4 ': x5 ': Take (n-5) xs---- | Type of type level information about tags.-data ElementInfo-  (contentCategories :: [ContentCategory])-  (permittedContent  :: ContentCategory)--type family TestPaternity a b c :: Bool where-  TestPaternity a (ElementInfo _ ps) (ElementInfo cs _) = CheckContentCategory ps (a ': cs)--type family CheckContentCategory (a :: ContentCategory) (b :: [ContentCategory]) :: Bool where-  CheckContentCategory (a :|: b) c = CheckContentCategory a c || CheckContentCategory b c-  CheckContentCategory (a :&: b) c = CheckContentCategory a c && CheckContentCategory b c-  CheckContentCategory (NOT a) c   = Not (CheckContentCategory a c)-  CheckContentCategory a c         = Elem a c---- | Check whether a given element may contain a string.-type family CheckString (a :: Element) b where-  CheckString a b = If (TestPaternity OnlyText (GetInfo a) (ElementInfo '[FlowContent, PhrasingContent] NoContent))-                       (() :: Constraint)-                       (TypeError (ShowType a :<>: Text " can't contain a " :<>: ShowType b))---- | Content categories according to the html spec.-data ContentCategory-  = MetadataContent-  | FlowContent-  | SectioningContent-  | HeadingContent-  | PhrasingContent-  | (:|:) ContentCategory ContentCategory-  | (:&:) ContentCategory ContentCategory-  | NOT ContentCategory-  | NoContent-  | OnlyText-  | SingleElement Element--infixr 2 :|:-infixr 3 :&:--type family MaybeTypeError (a :: Element) (b :: Element) c where-  MaybeTypeError a b c = If c (() :: Constraint)-   (TypeError (ShowType b :<>: Text " is not a valid child of " :<>: ShowType a))--type family Elem (a :: k) (xs :: [k]) where-  Elem a (a : xs) = True-  Elem a (_ : xs) = Elem a xs-  Elem a '[]      = False--newtype Tagged (proxies :: k) target = Tagged target---- | Get type list of valid elements for a given attribute.  An empty list signifies global attribute.-type family GetAttributeInfo a where-  GetAttributeInfo AcceptA          = '[Form, Input]-  GetAttributeInfo AcceptCharsetA   = '[Form]-  GetAttributeInfo AccesskeyA       = '[]-  GetAttributeInfo ActionA          = '[Form]-  GetAttributeInfo AlignA           = '[Applet, Caption, Col, Colgroup, Hr, Iframe, Img, Table, Tbody, Td, Tfoot, Th, Thead, Tr]-  GetAttributeInfo AltA             = '[Applet, Area, Img, Input]-  GetAttributeInfo AsyncA           = '[Script]-  GetAttributeInfo AutocompleteA    = '[Form, Input]-  GetAttributeInfo AutofocusA       = '[Button, Input, Keygen, Select, Textarea]-  GetAttributeInfo AutoplayA        = '[Audio, Video]-  GetAttributeInfo AutosaveA        = '[Input]-  GetAttributeInfo BgcolorA         = '[Body, Col, Colgroup, Marquee, Table, Tbody, Tfoot, Td, Th, Tr]-  GetAttributeInfo BorderA          = '[Img, Object, Table]-  GetAttributeInfo BufferedA        = '[Audio, Video]-  GetAttributeInfo ChallengeA       = '[Keygen]-  GetAttributeInfo CharsetA         = '[Meta, Script]-  GetAttributeInfo CheckedA         = '[Command, Input]-  GetAttributeInfo CiteA            = '[Blockquote, Del, Ins, Q]-  GetAttributeInfo ClassA           = '[]-  GetAttributeInfo CodeA            = '[Applet]-  GetAttributeInfo CodebaseA        = '[Applet]-  GetAttributeInfo ColorA           = '[Basefont, Font, Hr]-  GetAttributeInfo ColsA            = '[Textarea]-  GetAttributeInfo ColspanA         = '[Td, Th]-  GetAttributeInfo ContentA         = '[Meta]-  GetAttributeInfo ContenteditableA = '[]-  GetAttributeInfo ContextmenuA     = '[]-  GetAttributeInfo ControlsA        = '[Audio, Video]-  GetAttributeInfo CoordsA          = '[Area]-  GetAttributeInfo CrossoriginA     = '[Audio, Img, Link, Script, Video]-  GetAttributeInfo DataA            = '[Object]-  GetAttributeInfo DatetimeA        = '[Del, Ins, Time]-  GetAttributeInfo DefaultA         = '[Track]-  GetAttributeInfo DeferA           = '[Script]-  GetAttributeInfo DirA             = '[]-  GetAttributeInfo DirnameA         = '[Input, Textarea]-  GetAttributeInfo DisabledA        = '[Button, Command, Fieldset, Input, Keygen, Optgroup, Option, Select, Textarea]-  GetAttributeInfo DownloadA        = '[A, Area]-  GetAttributeInfo DraggableA       = '[]-  GetAttributeInfo DropzoneA        = '[]-  GetAttributeInfo EnctypeA         = '[Form]-  GetAttributeInfo ForA             = '[Label, Output]-  GetAttributeInfo FormA            = '[Button, Fieldset, Input, Keygen, Label, Meter, Object, Output, Progress, Select, Textarea]-  GetAttributeInfo FormactionA      = '[Input, Button]-  GetAttributeInfo HeadersA         = '[Td, Th]-  GetAttributeInfo HeightA          = '[Canvas, Embed, Iframe, Img, Input, Object, Video]-  GetAttributeInfo HiddenA          = '[]-  GetAttributeInfo HighA            = '[Meter]-  GetAttributeInfo HrefA            = '[A, Area, Base, Link]-  GetAttributeInfo HreflangA        = '[A, Area, Link]-  GetAttributeInfo HttpEquivA       = '[Meta]-  GetAttributeInfo IconA            = '[Command]-  GetAttributeInfo IdA              = '[]-  GetAttributeInfo IntegrityA       = '[Link, Script]-  GetAttributeInfo IsmapA           = '[Img]-  GetAttributeInfo ItempropA        = '[]-  GetAttributeInfo KeytypeA         = '[Keygen]-  GetAttributeInfo KindA            = '[Track]-  GetAttributeInfo LabelA           = '[Track]-  GetAttributeInfo LangA            = '[]-  GetAttributeInfo LanguageA        = '[Script]-  GetAttributeInfo ListA            = '[Input]-  GetAttributeInfo LoopA            = '[Audio, Bgsound, Marquee, Video]-  GetAttributeInfo LowA             = '[Meter]-  GetAttributeInfo ManifestA        = '[Html]-  GetAttributeInfo MaxA             = '[Input, Meter, Progress]-  GetAttributeInfo MaxlengthA       = '[Input, Textarea]-  GetAttributeInfo MinlengthA       = '[Input, Textarea]-  GetAttributeInfo MediaA           = '[A, Area, Link, Source, Style]-  GetAttributeInfo MethodA          = '[Form]-  GetAttributeInfo MinA             = '[Input, Meter]-  GetAttributeInfo MultipleA        = '[Input, Select]-  GetAttributeInfo MutedA           = '[Video]-  GetAttributeInfo NameA            = '[Button, Form, Fieldset, Iframe, Input, Keygen, Object, Output, Select, Textarea, Map, Meta, Param]-  GetAttributeInfo NovalidateA      = '[Form]-  GetAttributeInfo OpenA            = '[Details]-  GetAttributeInfo OptimumA         = '[Meter]-  GetAttributeInfo PatternA         = '[Input]-  GetAttributeInfo PingA            = '[A, Area]-  GetAttributeInfo PlaceholderA     = '[Input, Textarea]-  GetAttributeInfo PosterA          = '[Video]-  GetAttributeInfo PreloadA         = '[Audio, Video]-  GetAttributeInfo RadiogroupA      = '[Command]-  GetAttributeInfo ReadonlyA        = '[Input, Textarea]-  GetAttributeInfo RelA             = '[A, Area, Link]-  GetAttributeInfo RequiredA        = '[Input, Select, Textarea]-  GetAttributeInfo ReversedA        = '[Ol]-  GetAttributeInfo RowsA            = '[Textarea]-  GetAttributeInfo RowspanA         = '[Td, Th]-  GetAttributeInfo SandboxA         = '[Iframe]-  GetAttributeInfo ScopeA           = '[Th]-  GetAttributeInfo ScopedA          = '[Style]-  GetAttributeInfo SeamlessA        = '[Iframe]-  GetAttributeInfo SelectedA        = '[Option]-  GetAttributeInfo ShapeA           = '[A, Area]-  GetAttributeInfo SizeA            = '[Input, Select]-  GetAttributeInfo SizesA           = '[Link, Img, Source]-  GetAttributeInfo SlotA            = '[]-  GetAttributeInfo SpanA            = '[Col, Colgroup]-  GetAttributeInfo SpellcheckA      = '[]-  GetAttributeInfo SrcA             = '[Audio, Embed, Iframe, Img, Input, Script, Source, Track, Video]-  GetAttributeInfo SrcdocA          = '[Iframe]-  GetAttributeInfo SrclangA         = '[Track]-  GetAttributeInfo SrcsetA          = '[Img]-  GetAttributeInfo StartA           = '[Ol]-  GetAttributeInfo StepA            = '[Input]-  GetAttributeInfo StyleA           = '[]-  GetAttributeInfo SummaryA         = '[Table]-  GetAttributeInfo TabindexA        = '[]-  GetAttributeInfo TargetA          = '[A, Area, Base, Form]-  GetAttributeInfo TitleA           = '[]-  GetAttributeInfo TypeA            = '[Button, Input, Command, Embed, Object, Script, Source, Style, Menu]-  GetAttributeInfo UsemapA          = '[Img, Input, Object]-  GetAttributeInfo ValueA           = '[Button, Option, Input, Li, Meter, Progress, Param]-  GetAttributeInfo WidthA           = '[Canvas, Embed, Iframe, Img, Input, Object, Video]-  GetAttributeInfo WrapA            = '[Textarea]---- | Retrieve type level meta data about elements.-type family GetInfo a where--  GetInfo DOCTYPE = ElementInfo-    '[]-    NoContent--  GetInfo A = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (FlowContent :&: NOT (SingleElement Details) :|: PhrasingContent)--  GetInfo Abbr = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Address = ElementInfo-    '[ FlowContent ]-    (FlowContent :&: NOT (HeadingContent :|: SectioningContent :|: SingleElement Address :|: SingleElement Header :|: SingleElement Footer))--  GetInfo Area = ElementInfo-    '[ FlowContent, PhrasingContent ]-    NoContent--  GetInfo Article = ElementInfo-    '[ FlowContent, SectioningContent ]-    FlowContent--  GetInfo Aside = ElementInfo-    '[ FlowContent, SectioningContent ]-    FlowContent--  GetInfo Audio = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (SingleElement Source :|: SingleElement Track)--  GetInfo B = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Base = ElementInfo-    '[ MetadataContent ]-    NoContent--  GetInfo Bdi = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Bdo = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Blockquote = ElementInfo-    '[ FlowContent ]-    FlowContent--  GetInfo Body = ElementInfo-    '[]-    FlowContent--  GetInfo Br = ElementInfo-    '[ FlowContent, PhrasingContent ]-    NoContent--  GetInfo Button = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Canvas = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (SingleElement A :|: SingleElement Button :|: SingleElement Input)--  GetInfo Caption = ElementInfo-    '[]-    FlowContent--  GetInfo Cite = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Code = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Col = ElementInfo-    '[]-    NoContent--  GetInfo Colgroup = ElementInfo-    '[]-    (SingleElement Col)--  GetInfo Data = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Datalist = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (PhrasingContent :|: SingleElement Option)--  GetInfo Dd = ElementInfo-    '[]-    FlowContent--  GetInfo Del = ElementInfo-    '[ FlowContent, PhrasingContent ]-    OnlyText--  GetInfo Details = ElementInfo-    '[ FlowContent ]-    ( FlowContent :|: SingleElement Summary)--  GetInfo Dfn = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (PhrasingContent :&: NOT (SingleElement Dfn))--  GetInfo Dialog = ElementInfo-    '[ FlowContent ]-    FlowContent--  GetInfo Div = ElementInfo-    '[ FlowContent ]-    (FlowContent :|: SingleElement Dt :|: SingleElement Dd :|: SingleElement Script :|: SingleElement Template)--  GetInfo Dl = ElementInfo-    '[ FlowContent ]-    (SingleElement Dt :|: SingleElement Dd :|: SingleElement Script :|: SingleElement Template :|: SingleElement Div)--  GetInfo Dt = ElementInfo-    '[]-    (FlowContent :&: NOT (SingleElement Header :|: SingleElement Footer :|: SectioningContent :|: HeadingContent))--  GetInfo Em = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Embed = ElementInfo-    '[ FlowContent, PhrasingContent ]-    NoContent--  GetInfo Fieldset = ElementInfo-    '[ FlowContent ]-    (FlowContent :|: SingleElement Legend)--  GetInfo Figcaption = ElementInfo-    '[]-    FlowContent--  GetInfo Figure = ElementInfo-    '[ FlowContent ]-    (FlowContent :|: SingleElement Figcaption)--  GetInfo Footer = ElementInfo-    '[ FlowContent ]-    (FlowContent :&: NOT (SingleElement Footer :|: SingleElement Header))--  GetInfo Form = ElementInfo-    '[ FlowContent ]-    (FlowContent :&: NOT (SingleElement Form))--  GetInfo H1 = ElementInfo-    '[ FlowContent, HeadingContent ]-    PhrasingContent--  GetInfo H2 = ElementInfo-    '[ FlowContent, HeadingContent ]-    PhrasingContent--  GetInfo H3 = ElementInfo-    '[ FlowContent, HeadingContent ]-    PhrasingContent--  GetInfo H4 = ElementInfo-    '[ FlowContent, HeadingContent ]-    PhrasingContent--  GetInfo H5 = ElementInfo-    '[ FlowContent, HeadingContent ]-    PhrasingContent--  GetInfo H6 = ElementInfo-    '[ FlowContent, HeadingContent ]-    PhrasingContent--  GetInfo Head = ElementInfo-    '[]-    MetadataContent--  GetInfo Header = ElementInfo-    '[ FlowContent ]-    (FlowContent :&: NOT (SingleElement Header :|: SingleElement Footer))--  GetInfo Hgroup = ElementInfo-    '[ FlowContent, HeadingContent ]-    (SingleElement H1 :|: SingleElement H2 :|: SingleElement H3 :|: SingleElement H4 :|: SingleElement H5 :|: SingleElement H6)--  GetInfo Hr = ElementInfo-    '[ FlowContent ]-    NoContent--  GetInfo Html = ElementInfo-    '[]-    (SingleElement Head :|: SingleElement Body)--  GetInfo I = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Iframe = ElementInfo-    '[ FlowContent, PhrasingContent ]-    NoContent--  GetInfo Img = ElementInfo-    '[ FlowContent, PhrasingContent ]-    NoContent--  GetInfo Ins = ElementInfo-    '[ FlowContent, PhrasingContent ]-    OnlyText--  GetInfo Kbd = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Label = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (PhrasingContent :&: NOT (SingleElement Label))--  GetInfo Legend = ElementInfo-    '[]-    PhrasingContent--  GetInfo Li = ElementInfo-    '[]-    FlowContent--  GetInfo Link = ElementInfo-    '[ FlowContent, PhrasingContent, MetadataContent ]-    NoContent--  GetInfo Main = ElementInfo-    '[ FlowContent ]-    FlowContent--  GetInfo Map = ElementInfo-    '[ FlowContent, PhrasingContent ]-    OnlyText--  GetInfo Mark = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Menu = ElementInfo-    '[ FlowContent ]-    (FlowContent :|: SingleElement Li :|: SingleElement Script :|: SingleElement Template :|: SingleElement Menu :|: SingleElement Menuitem :|: SingleElement Hr)--  GetInfo Menuitem = ElementInfo-    '[]-    NoContent--  GetInfo Meta = ElementInfo-    '[ FlowContent, MetadataContent, PhrasingContent ]-    NoContent--  GetInfo Meter = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (PhrasingContent :&: NOT (SingleElement Meter))--  GetInfo Nav = ElementInfo-    '[ FlowContent, SectioningContent ]-    FlowContent--  GetInfo Noscript = ElementInfo-    '[ FlowContent, MetadataContent, PhrasingContent ]-    (FlowContent :|: PhrasingContent :|: SingleElement Link :|: SingleElement Style :|: SingleElement Meta)--  GetInfo Object = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (SingleElement Param)--  GetInfo Ol = ElementInfo-    '[ FlowContent ]-    (SingleElement Li)--  GetInfo Optgroup = ElementInfo-    '[]-    (SingleElement Option)--  GetInfo Option = ElementInfo-    '[]-    OnlyText--  GetInfo Output = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo P = ElementInfo-    '[ FlowContent ]-    PhrasingContent--  GetInfo Param = ElementInfo-    '[]-    NoContent--  GetInfo Picture = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (SingleElement Source :|: SingleElement Img)--  GetInfo Pre = ElementInfo-    '[ FlowContent ]-    PhrasingContent--  GetInfo Progress = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (PhrasingContent :&: NOT (SingleElement Progress))--  GetInfo Q = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Rp = ElementInfo-    '[]-    OnlyText--  GetInfo Rt = ElementInfo-    '[]-    PhrasingContent--  GetInfo Rtc = ElementInfo-    '[]-    (PhrasingContent :|: SingleElement Rt)--  GetInfo Ruby = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo S = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Samp = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Script = ElementInfo-    '[ FlowContent, MetadataContent, PhrasingContent ]-    OnlyText--  GetInfo Section = ElementInfo-    '[ FlowContent, SectioningContent ]-    FlowContent--  GetInfo Select = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (SingleElement Option :|: SingleElement Optgroup)--  GetInfo Slot = ElementInfo-    '[ FlowContent, PhrasingContent ]-    OnlyText--  GetInfo Small = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Source = ElementInfo-    '[]-    NoContent--  GetInfo Span = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Strong = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Style = ElementInfo-    '[ FlowContent, MetadataContent ]-    OnlyText--  GetInfo Sub = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Summary = ElementInfo-    '[]-    (PhrasingContent :|: HeadingContent)--  GetInfo Sup = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Table = ElementInfo-    '[FlowContent]-    (SingleElement Caption :|: SingleElement Colgroup :|: SingleElement Thead :|: SingleElement Tbody :|: SingleElement Tr :|: SingleElement Tfoot)--  GetInfo Tbody = ElementInfo-    '[]-    (SingleElement Tr)--  GetInfo Td = ElementInfo-    '[]-    FlowContent--  GetInfo Template = ElementInfo-    '[ FlowContent, MetadataContent, PhrasingContent ]-    (FlowContent :|: MetadataContent)--  GetInfo Textarea = ElementInfo-    '[ FlowContent, PhrasingContent ]-    OnlyText--  GetInfo Tfoot = ElementInfo-    '[]-    (SingleElement Tr)--  GetInfo Th = ElementInfo-    '[]-    (FlowContent :&: NOT (SingleElement Header :|: SingleElement Footer :|: SectioningContent :|: HeadingContent))--  GetInfo Thead = ElementInfo-    '[]-    (SingleElement Tr)--  GetInfo Time = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Title = ElementInfo-    '[ MetadataContent ]-    OnlyText--  GetInfo Tr = ElementInfo-    '[]-    (SingleElement Td :|: SingleElement Th)--  GetInfo Track = ElementInfo-    '[]-    NoContent--  GetInfo U = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Ul = ElementInfo-    '[ FlowContent ]-    (SingleElement Li)--  GetInfo Var = ElementInfo-    '[ FlowContent, PhrasingContent ]-    PhrasingContent--  GetInfo Video = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (SingleElement Track :|: SingleElement Source)--  GetInfo Wbr = ElementInfo-    '[ FlowContent, PhrasingContent ]-    NoContent--  GetInfo _ = ElementInfo-    '[ FlowContent, PhrasingContent ]-    (FlowContent :|: PhrasingContent)+{-# LANGUAGE ExplicitNamespaces #-}++module Html.Type+  ( type (>)(..)+  , type (:@:)(..)+  , type (#)(..)+  , (#)+  , type (?>)+  , type (??>)+  , type (:=)(..)+  , Raw(..)+  , Attribute(..)+  , Element(..)+  ) where++import Html.Type.Internal
+ src/Html/Type/Internal.hs view
@@ -0,0 +1,1389 @@+{-# OPTIONS_GHC -fno-warn-unticked-promoted-constructors #-}++{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE TypeOperators        #-}+{-# LANGUAGE TypeFamilies         #-}+{-# LANGUAGE DataKinds            #-}+{-# LANGUAGE PolyKinds            #-}+{-# LANGUAGE GADTs                #-}++module Html.Type.Internal where++import GHC.TypeLits+import GHC.Exts+import Data.Proxy+import Data.Type.Bool++{-# DEPRECATED++  Acronym   ,+  Applet    ,+  Basefont  ,+  Big       ,+  Blink     ,+  Center    ,+  Command   ,+  Content   ,+  Dir       ,+  Font      ,+  Frame     ,+  Frameset  ,+  Isindex   ,+  Keygen    ,+  Listing   ,+  Marquee   ,+  Multicol  ,+  Noembed   ,+  Plaintext ,+  Shadow    ,+  Spacer    ,+  Strike    ,+  Tt        ,+  Xmp       ,+  Nextid++ "This is an obsolete html element and should not be used." #-}++-- | The data type of all html elements and the kind of elements.+data Element+  = DOCTYPE++  | A+  | Abbr+  | Acronym+  | Address+  | Applet+  | Area+  | Article+  | Aside+  | Audio+  | B+  | Base+  | Basefont+  | Bdi+  | Bdo+  | Bgsound+  | Big+  | Blink+  | Blockquote+  | Body+  | Br+  | Button+  | Canvas+  | Caption+  | Center+  | Cite+  | Code+  | Col+  | Colgroup+  | Command+  | Content+  | Data+  | Datalist+  | Dd+  | Del+  | Details+  | Dfn+  | Dialog+  | Dir+  | Div+  | Dl+  | Dt+  | Element+  | Em+  | Embed+  | Fieldset+  | Figcaption+  | Figure+  | Font+  | Footer+  | Form+  | Frame+  | Frameset+  | H1+  | H2+  | H3+  | H4+  | H5+  | H6+  | Head+  | Header+  | Hgroup+  | Hr+  | Html+  | I+  | Iframe+  | Image+  | Img+  | Input+  | Ins+  | Isindex+  | Kbd+  | Keygen+  | Label+  | Legend+  | Li+  | Link+  | Listing+  | Main+  | Map+  | Mark+  | Marquee+  | Math+  | Menu+  | Menuitem+  | Meta+  | Meter+  | Multicol+  | Nav+  | Nextid+  | Nobr+  | Noembed+  | Noframes+  | Noscript+  | Object+  | Ol+  | Optgroup+  | Option+  | Output+  | P+  | Param+  | Picture+  | Plaintext+  | Pre+  | Progress+  | Q+  | Rp+  | Rt+  | Rtc+  | Ruby+  | S+  | Samp+  | Script+  | Section+  | Select+  | Shadow+  | Slot+  | Small+  | Source+  | Spacer+  | Span+  | Strike+  | Strong+  | Style+  | Sub+  | Summary+  | Sup+  | Svg+  | Table+  | Tbody+  | Td+  | Template+  | Textarea+  | Tfoot+  | Th+  | Thead+  | Time+  | Title+  | Tr+  | Track+  | Tt+  | U+  | Ul+  | Var+  | Video+  | Wbr+  | Xmp++data Attribute+  = AcceptA+  | AcceptCharsetA+  | AccesskeyA+  | ActionA+  | AlignA+  | AltA+  | AsyncA+  | AutocompleteA+  | AutofocusA+  | AutoplayA+  | AutosaveA+  | BgcolorA+  | BorderA+  | BufferedA+  | ChallengeA+  | CharsetA+  | CheckedA+  | CiteA+  | ClassA+  | CodeA+  | CodebaseA+  | ColorA+  | ColsA+  | ColspanA+  | ContentA+  | ContenteditableA+  | ContextmenuA+  | ControlsA+  | CoordsA+  | CrossoriginA+  | DataA+  | DatetimeA+  | DefaultA+  | DeferA+  | DirA+  | DirnameA+  | DisabledA+  | DownloadA+  | DraggableA+  | DropzoneA+  | EnctypeA+  | ForA+  | FormA+  | FormactionA+  | HeadersA+  | HeightA+  | HiddenA+  | HighA+  | HrefA+  | HreflangA+  | HttpEquivA+  | IconA+  | IdA+  | IntegrityA+  | IsmapA+  | ItempropA+  | KeytypeA+  | KindA+  | LabelA+  | LangA+  | LanguageA+  | ListA+  | LoopA+  | LowA+  | ManifestA+  | MaxA+  | MaxlengthA+  | MinlengthA+  | MediaA+  | MethodA+  | MinA+  | MultipleA+  | MutedA+  | NameA+  | NovalidateA+  | OpenA+  | OptimumA+  | PatternA+  | PingA+  | PlaceholderA+  | PosterA+  | PreloadA+  | RadiogroupA+  | ReadonlyA+  | RelA+  | RequiredA+  | ReversedA+  | RowsA+  | RowspanA+  | SandboxA+  | ScopeA+  | ScopedA+  | SeamlessA+  | SelectedA+  | ShapeA+  | SizeA+  | SizesA+  | SlotA+  | SpanA+  | SpellcheckA+  | SrcA+  | SrcdocA+  | SrclangA+  | SrcsetA+  | StartA+  | StepA+  | StyleA+  | SummaryA+  | TabindexA+  | TargetA+  | TitleA+  | TypeA+  | UsemapA+  | ValueA+  | WidthA+  | WrapA++newtype (:=) (a :: Attribute) b = AT b++-- | Check whether `b` is a valid child of `a`.  You'll propably never+-- need to call this directly.  Through a GADT, it is enforced that+-- every child is lawful.+type family (a :: Element) ?> b :: Constraint where+  a ?> (b # c)         = (a ?> b, a ?> c)+  a ?> (b > _)         = MaybeTypeError a b (TestPaternity (SingleElement b) (GetInfo a) (GetInfo b))+  a ?> (b :@: _) _     = MaybeTypeError a b (TestPaternity (SingleElement b) (GetInfo a) (GetInfo b))+  a ?> Maybe b         = a ?> b+  a ?> Either b c      = (a ?> b, a ?> c)+  a ?> f (b > c)       = a ?> (b > c)+  a ?> f ((b :@: c) d) = a ?> (b > d)+  a ?> f (b # c)       = a ?> (b # c)+  a ?> ()              = ()+  a ?> (b -> c)        = TypeError (Text "Html elements can't contain functions")+  a ?> b               = CheckString a b++type family (a :: Element) ??> b :: Constraint where+  a ??> (b # c)  = (a ??> b, a ??> c)+  a ??> (b := _) = If (Elem a (GetAttributeInfo b) || Null (GetAttributeInfo b))+                   (() :: Constraint)+                   (TypeError (ShowType b :<>: Text " is not a valid attribute of " :<>: ShowType a))+  a ??> b        = TypeError (ShowType b :<>: Text " is not an attribute.")++-- | Combine two elements or attributes sequentially.+--+-- >>> i_ () # div_ ()+-- <i></i><div></div>+--+-- >>> i_A (A.id_ "a" # A.class_ "b") "c"+-- <i id="a" class="b">c</i>+data (#) a b = (:#:) a b+{-# INLINE (#) #-}+(#) :: a -> b -> a # b+(#) = (:#:)+infixr 5 #++-- | Descend to a valid child of an element.+-- It is recommended to use the predefined elements.+--+-- >>> Child "a" :: 'Div > String+-- <div>a</div>+--+-- >>> div_ "a"+-- <div>a</div>+data (>) (a :: Element) b where+  Child :: (a ?> b) => b -> a > b+infixr 8 >++-- | Decorate an element with attributes and descend to a valid child.+-- It is recommended to use the predefined elements.+--+-- >>> WithAttributes (A.class_ "bar") "a" :: ('Div :@: ('ClassA := String)) String+-- <div class="bar">a</div>+--+-- >>> div_A (A.class_ "bar") "a"+-- <div class="bar">a</div>+data (:@:) (a :: Element) b c where+  WithAttributes :: (a ??> b, a ?> c) => b -> c -> (a :@: b) c+infixr 8 :@:++-- | Wrapper for types which won't be escaped.+newtype Raw a = Raw a++  -------------------+  -- internal code --+  -------------------++type family Null xs where+  Null '[] = True+  Null _ = False++type family ShowElement e where+  ShowElement DOCTYPE    = "!DOCTYPE html"+  ShowElement A          = "a"+  ShowElement Abbr       = "abbr"+  ShowElement Acronym    = "acronym"+  ShowElement Address    = "address"+  ShowElement Applet     = "applet"+  ShowElement Area       = "area"+  ShowElement Article    = "article"+  ShowElement Aside      = "aside"+  ShowElement Audio      = "audio"+  ShowElement B          = "b"+  ShowElement Base       = "base"+  ShowElement Basefont   = "basefont"+  ShowElement Bdi        = "bdi"+  ShowElement Bdo        = "bdo"+  ShowElement Bgsound    = "bgsound"+  ShowElement Big        = "big"+  ShowElement Blink      = "blink"+  ShowElement Blockquote = "blockquote"+  ShowElement Body       = "body"+  ShowElement Br         = "br"+  ShowElement Button     = "button"+  ShowElement Canvas     = "canvas"+  ShowElement Caption    = "caption"+  ShowElement Center     = "center"+  ShowElement Cite       = "cite"+  ShowElement Code       = "code"+  ShowElement Col        = "col"+  ShowElement Colgroup   = "colgroup"+  ShowElement Command    = "command"+  ShowElement Content    = "content"+  ShowElement Data       = "data"+  ShowElement Datalist   = "datalist"+  ShowElement Dd         = "dd"+  ShowElement Del        = "del"+  ShowElement Details    = "details"+  ShowElement Dfn        = "dfn"+  ShowElement Dialog     = "dialog"+  ShowElement Dir        = "dir"+  ShowElement Div        = "div"+  ShowElement Dl         = "dl"+  ShowElement Dt         = "dt"+  ShowElement 'Element   = "element"+  ShowElement Em         = "em"+  ShowElement Embed      = "embed"+  ShowElement Fieldset   = "fieldset"+  ShowElement Figcaption = "figcaption"+  ShowElement Figure     = "figure"+  ShowElement Font       = "font"+  ShowElement Footer     = "footer"+  ShowElement Form       = "form"+  ShowElement Frame      = "frame"+  ShowElement Frameset   = "frameset"+  ShowElement H1         = "h1"+  ShowElement H2         = "h2"+  ShowElement H3         = "h3"+  ShowElement H4         = "h4"+  ShowElement H5         = "h5"+  ShowElement H6         = "h6"+  ShowElement Head       = "head"+  ShowElement Header     = "header"+  ShowElement Hgroup     = "hgroup"+  ShowElement Hr         = "hr"+  ShowElement Html       = "html"+  ShowElement I          = "i"+  ShowElement Iframe     = "iframe"+  ShowElement Image      = "image"+  ShowElement Img        = "img"+  ShowElement Input      = "input"+  ShowElement Ins        = "ins"+  ShowElement Isindex    = "isindex"+  ShowElement Kbd        = "kbd"+  ShowElement Keygen     = "keygen"+  ShowElement Label      = "label"+  ShowElement Legend     = "legend"+  ShowElement Li         = "li"+  ShowElement Link       = "link"+  ShowElement Listing    = "listing"+  ShowElement Main       = "main"+  ShowElement Map        = "map"+  ShowElement Mark       = "mark"+  ShowElement Marquee    = "marquee"+  ShowElement Math       = "math"+  ShowElement Menu       = "menu"+  ShowElement Menuitem   = "menuitem"+  ShowElement Meta       = "meta"+  ShowElement Meter      = "meter"+  ShowElement Multicol   = "multicol"+  ShowElement Nav        = "nav"+  ShowElement Nextid     = "nextid"+  ShowElement Nobr       = "nobr"+  ShowElement Noembed    = "noembed"+  ShowElement Noframes   = "noframes"+  ShowElement Noscript   = "noscript"+  ShowElement Object     = "object"+  ShowElement Ol         = "ol"+  ShowElement Optgroup   = "optgroup"+  ShowElement Option     = "option"+  ShowElement Output     = "output"+  ShowElement P          = "p"+  ShowElement Param      = "param"+  ShowElement Picture    = "picture"+  ShowElement Plaintext  = "plaintext"+  ShowElement Pre        = "pre"+  ShowElement Progress   = "progress"+  ShowElement Q          = "q"+  ShowElement Rp         = "rp"+  ShowElement Rt         = "rt"+  ShowElement Rtc        = "rtc"+  ShowElement Ruby       = "ruby"+  ShowElement S          = "s"+  ShowElement Samp       = "samp"+  ShowElement Script     = "script"+  ShowElement Section    = "section"+  ShowElement Select     = "select"+  ShowElement Shadow     = "shadow"+  ShowElement Slot       = "slot"+  ShowElement Small      = "small"+  ShowElement Source     = "source"+  ShowElement Spacer     = "spacer"+  ShowElement Span       = "span"+  ShowElement Strike     = "strike"+  ShowElement Strong     = "strong"+  ShowElement Style      = "style"+  ShowElement Sub        = "sub"+  ShowElement Summary    = "summary"+  ShowElement Sup        = "sup"+  ShowElement Svg        = "svg"+  ShowElement Table      = "table"+  ShowElement Tbody      = "tbody"+  ShowElement Td         = "td"+  ShowElement Template   = "template"+  ShowElement Textarea   = "textarea"+  ShowElement Tfoot      = "tfoot"+  ShowElement Th         = "th"+  ShowElement Thead      = "thead"+  ShowElement Time       = "time"+  ShowElement Title      = "title"+  ShowElement Tr         = "tr"+  ShowElement Track      = "track"+  ShowElement Tt         = "tt"+  ShowElement U          = "u"+  ShowElement Ul         = "ul"+  ShowElement Var        = "var"+  ShowElement Video      = "video"+  ShowElement Wbr        = "wbr"+  ShowElement Xmp        = "xmp"++type family ShowAttribute (x :: Attribute) where+  ShowAttribute AcceptA          = " accept=\""+  ShowAttribute AcceptCharsetA   = " accept-charset=\""+  ShowAttribute AccesskeyA       = " accesskey=\""+  ShowAttribute ActionA          = " action=\""+  ShowAttribute AlignA           = " align=\""+  ShowAttribute AltA             = " alt=\""+  ShowAttribute AsyncA           = " async=\""+  ShowAttribute AutocompleteA    = " autocomplete=\""+  ShowAttribute AutofocusA       = " autofocus=\""+  ShowAttribute AutoplayA        = " autoplay=\""+  ShowAttribute AutosaveA        = " autosave=\""+  ShowAttribute BgcolorA         = " bgcolor=\""+  ShowAttribute BorderA          = " border=\""+  ShowAttribute BufferedA        = " buffered=\""+  ShowAttribute ChallengeA       = " challenge=\""+  ShowAttribute CharsetA         = " charset=\""+  ShowAttribute CheckedA         = " checked=\""+  ShowAttribute CiteA            = " cite=\""+  ShowAttribute ClassA           = " class=\""+  ShowAttribute CodeA            = " code=\""+  ShowAttribute CodebaseA        = " codebase=\""+  ShowAttribute ColorA           = " color=\""+  ShowAttribute ColsA            = " cols=\""+  ShowAttribute ColspanA         = " colspan=\""+  ShowAttribute ContentA         = " content=\""+  ShowAttribute ContenteditableA = " contenteditable=\""+  ShowAttribute ContextmenuA     = " contextmenu=\""+  ShowAttribute ControlsA        = " controls=\""+  ShowAttribute CoordsA          = " coords=\""+  ShowAttribute CrossoriginA     = " crossorigin=\""+  ShowAttribute DataA            = " data=\""+  ShowAttribute DatetimeA        = " datetime=\""+  ShowAttribute DefaultA         = " default=\""+  ShowAttribute DeferA           = " defer=\""+  ShowAttribute DirA             = " dir=\""+  ShowAttribute DirnameA         = " dirname=\""+  ShowAttribute DisabledA        = " disabled=\""+  ShowAttribute DownloadA        = " download=\""+  ShowAttribute DraggableA       = " draggable=\""+  ShowAttribute DropzoneA        = " dropzone=\""+  ShowAttribute EnctypeA         = " enctype=\""+  ShowAttribute ForA             = " for=\""+  ShowAttribute FormA            = " form=\""+  ShowAttribute FormactionA      = " formaction=\""+  ShowAttribute HeadersA         = " headers=\""+  ShowAttribute HeightA          = " height=\""+  ShowAttribute HiddenA          = " hidden=\""+  ShowAttribute HighA            = " high=\""+  ShowAttribute HrefA            = " href=\""+  ShowAttribute HreflangA        = " hreflang=\""+  ShowAttribute HttpEquivA       = " httpequiv=\""+  ShowAttribute IconA            = " icon=\""+  ShowAttribute IdA              = " id=\""+  ShowAttribute IntegrityA       = " integrity=\""+  ShowAttribute IsmapA           = " ismap=\""+  ShowAttribute ItempropA        = " itemprop=\""+  ShowAttribute KeytypeA         = " keytype=\""+  ShowAttribute KindA            = " kind=\""+  ShowAttribute LabelA           = " label=\""+  ShowAttribute LangA            = " lang=\""+  ShowAttribute LanguageA        = " language=\""+  ShowAttribute ListA            = " list=\""+  ShowAttribute LoopA            = " loop=\""+  ShowAttribute LowA             = " low=\""+  ShowAttribute ManifestA        = " manifest=\""+  ShowAttribute MaxA             = " max=\""+  ShowAttribute MaxlengthA       = " maxlength=\""+  ShowAttribute MinlengthA       = " minlength=\""+  ShowAttribute MediaA           = " media=\""+  ShowAttribute MethodA          = " method=\""+  ShowAttribute MinA             = " min=\""+  ShowAttribute MultipleA        = " multiple=\""+  ShowAttribute MutedA           = " muted=\""+  ShowAttribute NameA            = " name=\""+  ShowAttribute NovalidateA      = " novalidate=\""+  ShowAttribute OpenA            = " open=\""+  ShowAttribute OptimumA         = " optimum=\""+  ShowAttribute PatternA         = " pattern=\""+  ShowAttribute PingA            = " ping=\""+  ShowAttribute PlaceholderA     = " placeholder=\""+  ShowAttribute PosterA          = " poster=\""+  ShowAttribute PreloadA         = " preload=\""+  ShowAttribute RadiogroupA      = " radiogroup=\""+  ShowAttribute ReadonlyA        = " readonly=\""+  ShowAttribute RelA             = " rel=\""+  ShowAttribute RequiredA        = " required=\""+  ShowAttribute ReversedA        = " reversed=\""+  ShowAttribute RowsA            = " rows=\""+  ShowAttribute RowspanA         = " rowspan=\""+  ShowAttribute SandboxA         = " sandbox=\""+  ShowAttribute ScopeA           = " scope=\""+  ShowAttribute ScopedA          = " scoped=\""+  ShowAttribute SeamlessA        = " seamless=\""+  ShowAttribute SelectedA        = " selected=\""+  ShowAttribute ShapeA           = " shape=\""+  ShowAttribute SizeA            = " size=\""+  ShowAttribute SizesA           = " sizes=\""+  ShowAttribute SlotA            = " slot=\""+  ShowAttribute SpanA            = " span=\""+  ShowAttribute SpellcheckA      = " spellcheck=\""+  ShowAttribute SrcA             = " src=\""+  ShowAttribute SrcdocA          = " srcdoc=\""+  ShowAttribute SrclangA         = " srclang=\""+  ShowAttribute SrcsetA          = " srcset=\""+  ShowAttribute StartA           = " start=\""+  ShowAttribute StepA            = " step=\""+  ShowAttribute StyleA           = " style=\""+  ShowAttribute SummaryA         = " summary=\""+  ShowAttribute TabindexA        = " tabindex=\""+  ShowAttribute TargetA          = " target=\""+  ShowAttribute TitleA           = " title=\""+  ShowAttribute TypeA            = " type=\""+  ShowAttribute UsemapA          = " usemap=\""+  ShowAttribute ValueA           = " value=\""+  ShowAttribute WidthA           = " width=\""+  ShowAttribute WrapA            = " wrap=\""++type family OpenTag e where+  OpenTag e = AppendSymbol "<" (AppendSymbol (ShowElement e) ">")++type family CloseTag e where+  CloseTag e = AppendSymbol "</" (AppendSymbol (ShowElement e) ">")++type family CountContent c where+  CountContent (a # b)       = CountContent a + CountContent b+  CountContent (_ > b)       = CountContent b+  CountContent ((_ :@: b) c) = CountContent b + CountContent c+  CountContent (_ := b)      = CountContent b+  CountContent ()            = 0+  CountContent (Proxy _)     = 0+  CountContent _             = 1++-- | We need efficient cons, snoc and append.  This API has cons(O1)+-- and snoc(O1) but append(On).  Optimal would be a real 2-3+-- FingerTree.+data FingerTree = FingerTree [Symbol] Symbol++type family (<|) (s :: Symbol) (t :: FingerTree) :: FingerTree where+  (<|) l ('FingerTree (s ': ss) r) = 'FingerTree (AppendSymbol l s ': ss) r+  (<|) l ('FingerTree '[] r) = 'FingerTree '[] (AppendSymbol l r)++type family (|>) (t :: FingerTree) (s :: Symbol) :: FingerTree where+  (|>) ('FingerTree ss r) rr = 'FingerTree ss (AppendSymbol r rr)++type family (><) (t1 :: FingerTree) (t2 :: FingerTree) :: FingerTree where+  (><) ('FingerTree ss r) ('FingerTree (s ': ss2) r2) = 'FingerTree (Append ss (AppendSymbol r s ': ss2)) r2+  (><) ('FingerTree ss r) ('FingerTree '[] r2) = 'FingerTree ss (AppendSymbol r r2)++-- | Flatten a document into a type list of tags.+type family ToTypeList a :: FingerTree where+  ToTypeList (a # b)        = ToTypeList a >< ToTypeList b+  ToTypeList (a > ())       = 'FingerTree '[] (If (HasContent (GetInfo a)) (AppendSymbol (OpenTag a) (CloseTag a)) (OpenTag a))+  ToTypeList ((a :@: b) ()) = AppendSymbol "<" (ShowElement a) <| ToTypeList b |> If (HasContent (GetInfo a)) (AppendSymbol ">" (CloseTag a)) ">"+  ToTypeList (a > b)        = OpenTag a <| ToTypeList b |> CloseTag a+  ToTypeList ((a :@: b) c)  = (AppendSymbol "<" (ShowElement a) <| ToTypeList b) >< (">" <| ToTypeList c |> CloseTag a)+  ToTypeList (a := b)       = ShowAttribute a <| ToTypeList b |> "\""+  ToTypeList ()             = 'FingerTree '[] ""+  ToTypeList (Proxy x)      = 'FingerTree '[] x+  ToTypeList x              = 'FingerTree '[""] ""++-- | Append two type lists.+--+-- Note that this definition is that ugly to reduce compiletimes.+-- Please check whether the context reduction stack or compiletimes of+-- a big html page get bigger if you try to refactor.+type family Append xs ys :: [Symbol] where++  Append (x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': x17 ': x18 ': x19 ': x20 ': x21 ': x22 ': x23 ': x24 ': x25 ': x26 ': x27 ': x28 ': x29 ': x30 ': x31 ': x32 ': x33 ': x34 ': x35 ': x36 ': x37 ': x38 ': x39 ': x40 ': x41 ': x42 ': x43 ': x44 ': x45 ': x46 ': x47 ': x48 ': x49 ': x50 ': x51 ': x52 ': x53 ': x54 ': x55 ': x56 ': x57 ': x58 ': x59 ': x60 ': x61 ': x62 ': x63 ': x64 ': xs) ys+        = x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': x17 ': x18 ': x19 ': x20 ': x21 ': x22 ': x23 ': x24 ': x25 ': x26 ': x27 ': x28 ': x29 ': x30 ': x31 ': x32 ': x33 ': x34 ': x35 ': x36 ': x37 ': x38 ': x39 ': x40 ': x41 ': x42 ': x43 ': x44 ': x45 ': x46 ': x47 ': x48 ': x49 ': x50 ': x51 ': x52 ': x53 ': x54 ': x55 ': x56 ': x57 ': x58 ': x59 ': x60 ': x61 ': x62 ': x63 ': x64 ': Append xs ys++  Append (x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': x17 ': x18 ': x19 ': x20 ': x21 ': x22 ': x23 ': x24 ': x25 ': x26 ': x27 ': x28 ': x29 ': x30 ': x31 ': x32 ': xs) ys+        = x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': x17 ': x18 ': x19 ': x20 ': x21 ': x22 ': x23 ': x24 ': x25 ': x26 ': x27 ': x28 ': x29 ': x30 ': x31 ': x32 ': Append xs ys++  Append (x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': xs) ys+        = x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': x9 ': x10 ': x11 ': x12 ': x13 ': x14 ': x15 ': x16 ': Append xs ys++  Append (x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': xs) ys+        = x1 ': x2 ': x3 ': x4 ': x5 ': x6 ': x7 ': x8 ': Append xs ys++  Append (x1 ': x2 ': x3 ': x4 ': xs) ys+        = x1 ': x2 ': x3 ': x4 ': Append xs ys++  Append (x1 ': x2 ': xs) ys+        = x1 ': x2 ': Append xs ys++  Append (x1 ': xs) ys+        = x1 ': Append xs ys++  Append '[] ys+        = ys++-- | Check whether an element may have content.+type family HasContent a where+  HasContent (ElementInfo _ NoContent) = False+  HasContent _                         = True++-- | Type level drop.+--+-- Note that this definition is that ugly to reduce compiletimes.+-- Please check whether the context reduction stack or compiletimes of+-- a big html page get bigger if you try to refactor.+type family Drop n xs :: [Symbol] where+  Drop 0 xs = xs+  Drop 1 (_ ': xs) = xs+  Drop 2 (_ ': _ ': xs) = xs+  Drop 3 (_ ': _ ': _ ': xs) = xs+  Drop 4 (_ ': _ ': _ ': _ ': xs) = xs+  Drop n (_ ': _ ': _ ': _ ': _ ': xs) = Drop (n-5) xs++-- | Type level take.+--+-- Note that this definition is that ugly to reduce compiletimes.+-- Please check whether the context reduction stack or compiletimes of+-- a big html page get bigger if you try to refactor.+type family Take n xs :: [Symbol] where+  Take 0 _ = '[]+  Take 1 (x1 ': _) = '[x1]+  Take 2 (x1 ': x2 ': _) = '[x1, x2]+  Take 3 (x1 ': x2 ': x3 ': _) = '[x1, x2, x3]+  Take 4 (x1 ': x2 ': x3 ': x4 ': _) = '[x1, x2, x3, x4]+  Take n (x1 ': x2 ': x3 ': x4 ': x5 ': xs) = x1 ': x2 ': x3 ': x4 ': x5 ': Take (n-5) xs++-- | Type of type level information about tags.+data ElementInfo+  (contentCategories :: [ContentCategory])+  (permittedContent  :: ContentCategory)++type family TestPaternity a b c :: Bool where+  TestPaternity a (ElementInfo _ ps) (ElementInfo cs _) = CheckContentCategory ps (a ': cs)++type family CheckContentCategory (a :: ContentCategory) (b :: [ContentCategory]) :: Bool where+  CheckContentCategory (a :|: b) c = CheckContentCategory a c || CheckContentCategory b c+  CheckContentCategory (a :&: b) c = CheckContentCategory a c && CheckContentCategory b c+  CheckContentCategory (NOT a) c   = Not (CheckContentCategory a c)+  CheckContentCategory a c         = Elem a c++-- | Check whether a given element may contain a string.+type family CheckString (a :: Element) b where+  CheckString a b = If (TestPaternity OnlyText (GetInfo a) (ElementInfo '[FlowContent, PhrasingContent] NoContent))+                       (() :: Constraint)+                       (TypeError (ShowType a :<>: Text " can't contain a " :<>: ShowType b))++-- | Content categories according to the html spec.+data ContentCategory+  = MetadataContent+  | FlowContent+  | SectioningContent+  | HeadingContent+  | PhrasingContent+  | (:|:) ContentCategory ContentCategory+  | (:&:) ContentCategory ContentCategory+  | NOT ContentCategory+  | NoContent+  | OnlyText+  | SingleElement Element++infixr 2 :|:+infixr 3 :&:++type family MaybeTypeError (a :: Element) (b :: Element) c where+  MaybeTypeError a b c = If c (() :: Constraint)+   (TypeError (ShowType b :<>: Text " is not a valid child of " :<>: ShowType a))++type family Elem (a :: k) (xs :: [k]) where+  Elem a (a : xs) = True+  Elem a (_ : xs) = Elem a xs+  Elem a '[]      = False++newtype Tagged (proxies :: k) target = Tagged target++-- | Get type list of valid elements for a given attribute.  An empty list signifies global attribute.+type family GetAttributeInfo a where+  GetAttributeInfo AcceptA          = '[Form, Input]+  GetAttributeInfo AcceptCharsetA   = '[Form]+  GetAttributeInfo AccesskeyA       = '[]+  GetAttributeInfo ActionA          = '[Form]+  GetAttributeInfo AlignA           = '[Applet, Caption, Col, Colgroup, Hr, Iframe, Img, Table, Tbody, Td, Tfoot, Th, Thead, Tr]+  GetAttributeInfo AltA             = '[Applet, Area, Img, Input]+  GetAttributeInfo AsyncA           = '[Script]+  GetAttributeInfo AutocompleteA    = '[Form, Input]+  GetAttributeInfo AutofocusA       = '[Button, Input, Keygen, Select, Textarea]+  GetAttributeInfo AutoplayA        = '[Audio, Video]+  GetAttributeInfo AutosaveA        = '[Input]+  GetAttributeInfo BgcolorA         = '[Body, Col, Colgroup, Marquee, Table, Tbody, Tfoot, Td, Th, Tr]+  GetAttributeInfo BorderA          = '[Img, Object, Table]+  GetAttributeInfo BufferedA        = '[Audio, Video]+  GetAttributeInfo ChallengeA       = '[Keygen]+  GetAttributeInfo CharsetA         = '[Meta, Script]+  GetAttributeInfo CheckedA         = '[Command, Input]+  GetAttributeInfo CiteA            = '[Blockquote, Del, Ins, Q]+  GetAttributeInfo ClassA           = '[]+  GetAttributeInfo CodeA            = '[Applet]+  GetAttributeInfo CodebaseA        = '[Applet]+  GetAttributeInfo ColorA           = '[Basefont, Font, Hr]+  GetAttributeInfo ColsA            = '[Textarea]+  GetAttributeInfo ColspanA         = '[Td, Th]+  GetAttributeInfo ContentA         = '[Meta]+  GetAttributeInfo ContenteditableA = '[]+  GetAttributeInfo ContextmenuA     = '[]+  GetAttributeInfo ControlsA        = '[Audio, Video]+  GetAttributeInfo CoordsA          = '[Area]+  GetAttributeInfo CrossoriginA     = '[Audio, Img, Link, Script, Video]+  GetAttributeInfo DataA            = '[Object]+  GetAttributeInfo DatetimeA        = '[Del, Ins, Time]+  GetAttributeInfo DefaultA         = '[Track]+  GetAttributeInfo DeferA           = '[Script]+  GetAttributeInfo DirA             = '[]+  GetAttributeInfo DirnameA         = '[Input, Textarea]+  GetAttributeInfo DisabledA        = '[Button, Command, Fieldset, Input, Keygen, Optgroup, Option, Select, Textarea]+  GetAttributeInfo DownloadA        = '[A, Area]+  GetAttributeInfo DraggableA       = '[]+  GetAttributeInfo DropzoneA        = '[]+  GetAttributeInfo EnctypeA         = '[Form]+  GetAttributeInfo ForA             = '[Label, Output]+  GetAttributeInfo FormA            = '[Button, Fieldset, Input, Keygen, Label, Meter, Object, Output, Progress, Select, Textarea]+  GetAttributeInfo FormactionA      = '[Input, Button]+  GetAttributeInfo HeadersA         = '[Td, Th]+  GetAttributeInfo HeightA          = '[Canvas, Embed, Iframe, Img, Input, Object, Video]+  GetAttributeInfo HiddenA          = '[]+  GetAttributeInfo HighA            = '[Meter]+  GetAttributeInfo HrefA            = '[A, Area, Base, Link]+  GetAttributeInfo HreflangA        = '[A, Area, Link]+  GetAttributeInfo HttpEquivA       = '[Meta]+  GetAttributeInfo IconA            = '[Command]+  GetAttributeInfo IdA              = '[]+  GetAttributeInfo IntegrityA       = '[Link, Script]+  GetAttributeInfo IsmapA           = '[Img]+  GetAttributeInfo ItempropA        = '[]+  GetAttributeInfo KeytypeA         = '[Keygen]+  GetAttributeInfo KindA            = '[Track]+  GetAttributeInfo LabelA           = '[Track]+  GetAttributeInfo LangA            = '[]+  GetAttributeInfo LanguageA        = '[Script]+  GetAttributeInfo ListA            = '[Input]+  GetAttributeInfo LoopA            = '[Audio, Bgsound, Marquee, Video]+  GetAttributeInfo LowA             = '[Meter]+  GetAttributeInfo ManifestA        = '[Html]+  GetAttributeInfo MaxA             = '[Input, Meter, Progress]+  GetAttributeInfo MaxlengthA       = '[Input, Textarea]+  GetAttributeInfo MinlengthA       = '[Input, Textarea]+  GetAttributeInfo MediaA           = '[A, Area, Link, Source, Style]+  GetAttributeInfo MethodA          = '[Form]+  GetAttributeInfo MinA             = '[Input, Meter]+  GetAttributeInfo MultipleA        = '[Input, Select]+  GetAttributeInfo MutedA           = '[Video]+  GetAttributeInfo NameA            = '[Button, Form, Fieldset, Iframe, Input, Keygen, Object, Output, Select, Textarea, Map, Meta, Param]+  GetAttributeInfo NovalidateA      = '[Form]+  GetAttributeInfo OpenA            = '[Details]+  GetAttributeInfo OptimumA         = '[Meter]+  GetAttributeInfo PatternA         = '[Input]+  GetAttributeInfo PingA            = '[A, Area]+  GetAttributeInfo PlaceholderA     = '[Input, Textarea]+  GetAttributeInfo PosterA          = '[Video]+  GetAttributeInfo PreloadA         = '[Audio, Video]+  GetAttributeInfo RadiogroupA      = '[Command]+  GetAttributeInfo ReadonlyA        = '[Input, Textarea]+  GetAttributeInfo RelA             = '[A, Area, Link]+  GetAttributeInfo RequiredA        = '[Input, Select, Textarea]+  GetAttributeInfo ReversedA        = '[Ol]+  GetAttributeInfo RowsA            = '[Textarea]+  GetAttributeInfo RowspanA         = '[Td, Th]+  GetAttributeInfo SandboxA         = '[Iframe]+  GetAttributeInfo ScopeA           = '[Th]+  GetAttributeInfo ScopedA          = '[Style]+  GetAttributeInfo SeamlessA        = '[Iframe]+  GetAttributeInfo SelectedA        = '[Option]+  GetAttributeInfo ShapeA           = '[A, Area]+  GetAttributeInfo SizeA            = '[Input, Select]+  GetAttributeInfo SizesA           = '[Link, Img, Source]+  GetAttributeInfo SlotA            = '[]+  GetAttributeInfo SpanA            = '[Col, Colgroup]+  GetAttributeInfo SpellcheckA      = '[]+  GetAttributeInfo SrcA             = '[Audio, Embed, Iframe, Img, Input, Script, Source, Track, Video]+  GetAttributeInfo SrcdocA          = '[Iframe]+  GetAttributeInfo SrclangA         = '[Track]+  GetAttributeInfo SrcsetA          = '[Img]+  GetAttributeInfo StartA           = '[Ol]+  GetAttributeInfo StepA            = '[Input]+  GetAttributeInfo StyleA           = '[]+  GetAttributeInfo SummaryA         = '[Table]+  GetAttributeInfo TabindexA        = '[]+  GetAttributeInfo TargetA          = '[A, Area, Base, Form]+  GetAttributeInfo TitleA           = '[]+  GetAttributeInfo TypeA            = '[Button, Input, Command, Embed, Object, Script, Source, Style, Menu]+  GetAttributeInfo UsemapA          = '[Img, Input, Object]+  GetAttributeInfo ValueA           = '[Button, Option, Input, Li, Meter, Progress, Param]+  GetAttributeInfo WidthA           = '[Canvas, Embed, Iframe, Img, Input, Object, Video]+  GetAttributeInfo WrapA            = '[Textarea]++-- | Retrieve type level meta data about elements.+type family GetInfo a where++  GetInfo DOCTYPE = ElementInfo+    '[]+    NoContent++  GetInfo A = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (FlowContent :&: NOT (SingleElement Details) :|: PhrasingContent)++  GetInfo Abbr = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Address = ElementInfo+    '[ FlowContent ]+    (FlowContent :&: NOT (HeadingContent :|: SectioningContent :|: SingleElement Address :|: SingleElement Header :|: SingleElement Footer))++  GetInfo Area = ElementInfo+    '[ FlowContent, PhrasingContent ]+    NoContent++  GetInfo Article = ElementInfo+    '[ FlowContent, SectioningContent ]+    FlowContent++  GetInfo Aside = ElementInfo+    '[ FlowContent, SectioningContent ]+    FlowContent++  GetInfo Audio = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (SingleElement Source :|: SingleElement Track)++  GetInfo B = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Base = ElementInfo+    '[ MetadataContent ]+    NoContent++  GetInfo Bdi = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Bdo = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Blockquote = ElementInfo+    '[ FlowContent ]+    FlowContent++  GetInfo Body = ElementInfo+    '[]+    FlowContent++  GetInfo Br = ElementInfo+    '[ FlowContent, PhrasingContent ]+    NoContent++  GetInfo Button = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Canvas = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (SingleElement A :|: SingleElement Button :|: SingleElement Input)++  GetInfo Caption = ElementInfo+    '[]+    FlowContent++  GetInfo Cite = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Code = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Col = ElementInfo+    '[]+    NoContent++  GetInfo Colgroup = ElementInfo+    '[]+    (SingleElement Col)++  GetInfo Data = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Datalist = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (PhrasingContent :|: SingleElement Option)++  GetInfo Dd = ElementInfo+    '[]+    FlowContent++  GetInfo Del = ElementInfo+    '[ FlowContent, PhrasingContent ]+    OnlyText++  GetInfo Details = ElementInfo+    '[ FlowContent ]+    ( FlowContent :|: SingleElement Summary)++  GetInfo Dfn = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (PhrasingContent :&: NOT (SingleElement Dfn))++  GetInfo Dialog = ElementInfo+    '[ FlowContent ]+    FlowContent++  GetInfo Div = ElementInfo+    '[ FlowContent ]+    (FlowContent :|: SingleElement Dt :|: SingleElement Dd :|: SingleElement Script :|: SingleElement Template)++  GetInfo Dl = ElementInfo+    '[ FlowContent ]+    (SingleElement Dt :|: SingleElement Dd :|: SingleElement Script :|: SingleElement Template :|: SingleElement Div)++  GetInfo Dt = ElementInfo+    '[]+    (FlowContent :&: NOT (SingleElement Header :|: SingleElement Footer :|: SectioningContent :|: HeadingContent))++  GetInfo Em = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Embed = ElementInfo+    '[ FlowContent, PhrasingContent ]+    NoContent++  GetInfo Fieldset = ElementInfo+    '[ FlowContent ]+    (FlowContent :|: SingleElement Legend)++  GetInfo Figcaption = ElementInfo+    '[]+    FlowContent++  GetInfo Figure = ElementInfo+    '[ FlowContent ]+    (FlowContent :|: SingleElement Figcaption)++  GetInfo Footer = ElementInfo+    '[ FlowContent ]+    (FlowContent :&: NOT (SingleElement Footer :|: SingleElement Header))++  GetInfo Form = ElementInfo+    '[ FlowContent ]+    (FlowContent :&: NOT (SingleElement Form))++  GetInfo H1 = ElementInfo+    '[ FlowContent, HeadingContent ]+    PhrasingContent++  GetInfo H2 = ElementInfo+    '[ FlowContent, HeadingContent ]+    PhrasingContent++  GetInfo H3 = ElementInfo+    '[ FlowContent, HeadingContent ]+    PhrasingContent++  GetInfo H4 = ElementInfo+    '[ FlowContent, HeadingContent ]+    PhrasingContent++  GetInfo H5 = ElementInfo+    '[ FlowContent, HeadingContent ]+    PhrasingContent++  GetInfo H6 = ElementInfo+    '[ FlowContent, HeadingContent ]+    PhrasingContent++  GetInfo Head = ElementInfo+    '[]+    MetadataContent++  GetInfo Header = ElementInfo+    '[ FlowContent ]+    (FlowContent :&: NOT (SingleElement Header :|: SingleElement Footer))++  GetInfo Hgroup = ElementInfo+    '[ FlowContent, HeadingContent ]+    (SingleElement H1 :|: SingleElement H2 :|: SingleElement H3 :|: SingleElement H4 :|: SingleElement H5 :|: SingleElement H6)++  GetInfo Hr = ElementInfo+    '[ FlowContent ]+    NoContent++  GetInfo Html = ElementInfo+    '[]+    (SingleElement Head :|: SingleElement Body)++  GetInfo I = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Iframe = ElementInfo+    '[ FlowContent, PhrasingContent ]+    NoContent++  GetInfo Img = ElementInfo+    '[ FlowContent, PhrasingContent ]+    NoContent++  GetInfo Ins = ElementInfo+    '[ FlowContent, PhrasingContent ]+    OnlyText++  GetInfo Kbd = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Label = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (PhrasingContent :&: NOT (SingleElement Label))++  GetInfo Legend = ElementInfo+    '[]+    PhrasingContent++  GetInfo Li = ElementInfo+    '[]+    FlowContent++  GetInfo Link = ElementInfo+    '[ FlowContent, PhrasingContent, MetadataContent ]+    NoContent++  GetInfo Main = ElementInfo+    '[ FlowContent ]+    FlowContent++  GetInfo Map = ElementInfo+    '[ FlowContent, PhrasingContent ]+    OnlyText++  GetInfo Mark = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Menu = ElementInfo+    '[ FlowContent ]+    (FlowContent :|: SingleElement Li :|: SingleElement Script :|: SingleElement Template :|: SingleElement Menu :|: SingleElement Menuitem :|: SingleElement Hr)++  GetInfo Menuitem = ElementInfo+    '[]+    NoContent++  GetInfo Meta = ElementInfo+    '[ FlowContent, MetadataContent, PhrasingContent ]+    NoContent++  GetInfo Meter = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (PhrasingContent :&: NOT (SingleElement Meter))++  GetInfo Nav = ElementInfo+    '[ FlowContent, SectioningContent ]+    FlowContent++  GetInfo Noscript = ElementInfo+    '[ FlowContent, MetadataContent, PhrasingContent ]+    (FlowContent :|: PhrasingContent :|: SingleElement Link :|: SingleElement Style :|: SingleElement Meta)++  GetInfo Object = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (SingleElement Param)++  GetInfo Ol = ElementInfo+    '[ FlowContent ]+    (SingleElement Li)++  GetInfo Optgroup = ElementInfo+    '[]+    (SingleElement Option)++  GetInfo Option = ElementInfo+    '[]+    OnlyText++  GetInfo Output = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo P = ElementInfo+    '[ FlowContent ]+    PhrasingContent++  GetInfo Param = ElementInfo+    '[]+    NoContent++  GetInfo Picture = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (SingleElement Source :|: SingleElement Img)++  GetInfo Pre = ElementInfo+    '[ FlowContent ]+    PhrasingContent++  GetInfo Progress = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (PhrasingContent :&: NOT (SingleElement Progress))++  GetInfo Q = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Rp = ElementInfo+    '[]+    OnlyText++  GetInfo Rt = ElementInfo+    '[]+    PhrasingContent++  GetInfo Rtc = ElementInfo+    '[]+    (PhrasingContent :|: SingleElement Rt)++  GetInfo Ruby = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo S = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Samp = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Script = ElementInfo+    '[ FlowContent, MetadataContent, PhrasingContent ]+    OnlyText++  GetInfo Section = ElementInfo+    '[ FlowContent, SectioningContent ]+    FlowContent++  GetInfo Select = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (SingleElement Option :|: SingleElement Optgroup)++  GetInfo Slot = ElementInfo+    '[ FlowContent, PhrasingContent ]+    OnlyText++  GetInfo Small = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Source = ElementInfo+    '[]+    NoContent++  GetInfo Span = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Strong = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Style = ElementInfo+    '[ FlowContent, MetadataContent ]+    OnlyText++  GetInfo Sub = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Summary = ElementInfo+    '[]+    (PhrasingContent :|: HeadingContent)++  GetInfo Sup = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Table = ElementInfo+    '[FlowContent]+    (SingleElement Caption :|: SingleElement Colgroup :|: SingleElement Thead :|: SingleElement Tbody :|: SingleElement Tr :|: SingleElement Tfoot)++  GetInfo Tbody = ElementInfo+    '[]+    (SingleElement Tr)++  GetInfo Td = ElementInfo+    '[]+    FlowContent++  GetInfo Template = ElementInfo+    '[ FlowContent, MetadataContent, PhrasingContent ]+    (FlowContent :|: MetadataContent)++  GetInfo Textarea = ElementInfo+    '[ FlowContent, PhrasingContent ]+    OnlyText++  GetInfo Tfoot = ElementInfo+    '[]+    (SingleElement Tr)++  GetInfo Th = ElementInfo+    '[]+    (FlowContent :&: NOT (SingleElement Header :|: SingleElement Footer :|: SectioningContent :|: HeadingContent))++  GetInfo Thead = ElementInfo+    '[]+    (SingleElement Tr)++  GetInfo Time = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Title = ElementInfo+    '[ MetadataContent ]+    OnlyText++  GetInfo Tr = ElementInfo+    '[]+    (SingleElement Td :|: SingleElement Th)++  GetInfo Track = ElementInfo+    '[]+    NoContent++  GetInfo U = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Ul = ElementInfo+    '[ FlowContent ]+    (SingleElement Li)++  GetInfo Var = ElementInfo+    '[ FlowContent, PhrasingContent ]+    PhrasingContent++  GetInfo Video = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (SingleElement Track :|: SingleElement Source)++  GetInfo Wbr = ElementInfo+    '[ FlowContent, PhrasingContent ]+    NoContent++  GetInfo _ = ElementInfo+    '[ FlowContent, PhrasingContent ]+    (FlowContent :|: PhrasingContent)
type-of-html.cabal view
@@ -1,5 +1,5 @@ name:                 type-of-html-version:              1.0.1.0+version:              1.0.1.1 synopsis:             High performance type driven html generation. description:          This library makes most invalid html documents compile time errors and uses advanced type level features to realise compile time computations. license:              BSD3@@ -20,11 +20,12 @@  library   exposed-modules:    Html-                    , Html.Attribute-  other-modules:      Html.Type+                    , Html.Type+                    , Html.Convert                     , Html.Element+                    , Html.Attribute+  other-modules:      Html.Type.Internal                     , Html.Reify-                    , Html.Convert   hs-source-dirs:     src   default-language:   Haskell2010   ghc-options:        -Wall