module DialogueTree where import Text.Blaze.Html.Renderer.String import Text.Blaze.Html5 data DTree = T Html | O Html [(Html, DTree)] ht :: (ToMarkup a) => a -> Html ht = preEscapedToHtml normalizeOption :: (Html, DTree) -> Html normalizeOption (h, t) = details . ht $ [summary h, normalize t] normalize :: DTree -> Html normalize (T s) = s normalize (O response things) = details . ht $ summary response : (normalizeOption <$> things) render :: DTree -> String render = renderHtml . normalize put :: DTree -> IO () put = putStrLn . render