gpt4 book ai didi

xhtml - 使用 Text.XHtml 嵌套

转载 作者:行者123 更新时间:2023-12-02 00:42:22 26 4
gpt4 key购买 nike

我有以下代码使用 Text.XHtml.Strict 库在 Haskell 中生成一个包含一系列带有 id 和类的 div 的空白 html 页面:

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

函数 dCdI 应该分别用类或 ID 做一个空。在解释器中,这些函数在连接时工作正常,如:

 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'

这就是我认为代码主要部分出现问题的原因,但我不知道如何修复它。有什么想法吗?

最佳答案

只需取出 nohtml部分,并更改签名:

dC :: String -> Html -> Html
dC x = thediv ! [theclass x]

dI :: String -> Html -> Html
dI x = thediv ! [identifier x]

!运算符(operator)不仅可以向 Html 添加属性对象,但也返回一个函数 Html . thediv是一个接受 Html 的函数并将其包裹在 <div> 中返回元素。通过申请!为此,您创建一个函数,它接受 Html并包装一个 <div class="…"> (或 id="…")围绕它。

> :type thediv
thediv :: Html -> Html

> let dC c = thediv ! [theclass c]
> let dI i = thediv ! [identifier i]

> :type dC
dC :: String -> Html -> Html
> :type dI
dI :: String -> Html -> Html

> putStr $ prettyHtmlFragment $ body << dC "main" << dI "window" << dI "content" << "Hi"
<body>
<div class="main">
<div id="window">
<div id="content">
Hi
</div>
</div>
</div>
</body>

请注意,您不需要额外的括号。

关于xhtml - 使用 Text.XHtml 嵌套,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206486/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com