HORIZON HASKELLDocslts/ghc-10.0.x77a86622026-10-31Search packagesCtrl K
Theme: |

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 77a8662 · 2026-10-31

Moduleblaze-markup-0.8.3.0Haskell2010

Text.Blaze

BlazeMarkup is a markup combinator library. It provides a way to embed markup languages like HTML and SVG in Haskell in an efficient and convenient way, with a light-weight syntax.

To use the library, one needs to import a set of combinators. For example, you can use HTML 4 Strict from BlazeHtml package.

{-# LANGUAGE OverloadedStrings #-}
import Prelude hiding (head, id, div)
import Text.Blaze.Html4.Strict hiding (map)
import Text.Blaze.Html4.Strict.Attributes hiding (title)

To render the page later on, you need a so called Renderer. The recommended renderer is an UTF-8 renderer which produces a lazy bytestring.

import Text.Blaze.Renderer.Utf8 (renderMarkup)

Now, you can describe pages using the imported combinators.

page1 :: Markup
page1 = html $ do
    head $ do
        title "Introduction page."
        link ! rel "stylesheet" ! type_ "text/css" ! href "screen.css"
    body $ do
        div ! id "header" $ "Syntax"
        p "This is an example of BlazeMarkup syntax."
        ul $ mapM_ (li . toMarkup . show) [1, 2, 3]

The resulting HTML can now be extracted using:

renderMarkup page1
Contents
  1. Important types.
  2. Creating attributes.
  3. Converting values to Markup.
  4. Comments
  5. Creating tags.
  6. Converting values to attribute values.
  7. Setting attributes
  8. Modifying Markup trees
Synopsis

Important types.

newtypenewtype Tag

Type for an HTML tag. This can be seen as an internal string type used by BlazeMarkup.

Instances1IsString
  • IsString TagDefined in blaze-markup-0.8.3.0 · Text.Blaze.Internal

Creating attributes.

valuedataAttribute
  1. :: Tag

    Name of the attribute.

  2. -> AttributeValue

    Value for the attribute.

  3. -> Attribute

    Resulting HTML attribute.

From HTML 5 onwards, the user is able to specify custom data attributes.

An example:

<p data-foo="bar">Hello.</p>

We support this in BlazeMarkup using this function. The above fragment could be described using BlazeMarkup with:

p ! dataAttribute "foo" "bar" $ "Hello."
valuecustomAttribute
  1. :: Tag

    Name of the attribute

  2. -> AttributeValue

    Value for the attribute

  3. -> Attribute

    Resulting HTML attribtue

Create a custom attribute. This is not specified in the HTML spec, but some JavaScript libraries rely on it.

An example:

<select dojoType="select">foo</select>

Can be produced using:

select ! customAttribute "dojoType" "select" $ "foo"

Converting values to Markup.

classclass ToMarkup a where

Class allowing us to use a single function for Markup values

Methods

Instances19ToMarkup, …
valuetext
  1. :: Text

    Text to render.

  2. -> Markup

    Resulting HTML fragment.

Render text. Functions like these can be used to supply content in HTML.

Comments

Creating tags.

Converting values to attribute values.

classclass ToValue a where

Class allowing us to use a single function for attribute values

Methods

Instances17ToValue, …

Setting attributes

method(!) :: h -> Attribute -> h

Apply an attribute to an element.

Example:

img ! src "foo.png"

Result:

<img src="foo.png" />

This can be used on nested elements as well.

Example:

p ! style "float: right" $ "Hello!"

Result:

<p style="float: right">Hello!</p>
value(!?) :: Attributable h => h -> (Bool, Attribute) -> h

Shorthand for setting an attribute depending on a conditional.

Example:

p !? (isBig, A.class "big") $ "Hello"

Gives the same result as:

(if isBig then p ! A.class "big" else p) "Hello"

Modifying Markup trees

valuecontents :: MarkupM a -> MarkupM a

Take only the text content of an HTML tree.

contents $ do
    p ! $ "Hello "
    p ! $ "Word!"

Result:

Hello World!