module Step_2_2 where
import Text.Html
page = thehtml <<
[ header << (thetitle << "Output")
, body <<
[ h1 << "A poem from last time:"
, pre << poemText
, h1 << "A to do list:"
, thediv << toDoHtml
]
]
-- Here's our line number function from last time:
poem :: String
poem = "`Twas brillig, and the slithy toves\n"
++ "Did gyre and gimble in the wabe;\n"
++ "All mimsy were the borogoves,\n"
++ "And the mome raths outgrabe.\n"
oneNumber :: Int -> String -> String
oneNumber n s = show n ++ ": " ++ s
lineNumbers :: Int -> [String] -> [String]
lineNumbers n xs =
if xs == []
then []
else [oneNumber n (head xs)] ++ lineNumbers (n+1) (tail xs)
poemText :: String
poemText = unlines $ lineNumbers 1 $ lines poem
-- NEXT
-- Here's a simple to do list, and some code that converts it into Html
-- It doesn't do a very nice job. Which you can see if you hit Run.
toDoItems :: [String] -- a list of strings
toDoItems = ["Pick up avacados", "Make snacks", "Clean house", "Have party"]
renderToDo :: [String] -> [Html]
renderToDo ts = [toHtml $ show ts]
toDoHtml :: [Html]
toDoHtml = renderToDo toDoItems
-- Rewrite the function renderToDo so that it builds up a ul element with
-- list of li elements as the content. You may want to make a helper function
-- like oneNumber to make the individual li elements.