У меня есть следующий код для генерации пустой HTML-страницы с серией div с идентификаторами и классами в Haskell с использованием библиотеки Text.XHtml.Strict :
module Main where
import Text.XHtml.Strict
import Text.Printf
page :: Html
page = pHeader +++ pTop +++ pBody +++ pFooter
pHeader :: Html
pHeader = header << thetitle << "Page title"
pTop :: Html
pTop = (dC "header") << (dI "title")
pFooter :: Html
pFooter = (dC "footer") << (dI "foottext")
pBody :: Html
pBody = body << (dC "main") << (dI "window") << (dI "content")
dC :: String -> Html
dC x = (thediv noHtml)! [theclass x]
dI :: String -> Html
dI x = (thediv noHtml) ! [identifier x]
main :: IO ()
main = do
printf $ prettyHtml $ page
Функции dC
и dI
должны заполнять класс или идентификатор соответственно. В интерпретаторе эти функции прекрасно работают при объединении, как в:
printf $ prettyHtmlFragment $ dC "1" +++ dC "2"
<div class="1">
</div>
<div class="2">
</div>
Но когда я пытаюсь вложить их, используя <<
вместо +++
, я получаю сообщение об ошибке:
<interactive>:1:28:
Couldn't match expected type `Html -> b'
against inferred type `Html'
Вот, как мне кажется, причина проблемы в основной части кода, но я не знаю, как ее исправить. Есть идеи?