30 lines
631 B
Haskell
30 lines
631 B
Haskell
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
|