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 +6/−17
- src/Html/Convert.hs +23/−25
- src/Html/Reify.hs +1/−1
- src/Html/Type.hs +16/−1389
- src/Html/Type/Internal.hs +1389/−0
- type-of-html.cabal +5/−4
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