Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell do块中迭代列表?_Haskell_Blaze Html - Fatal编程技术网

在Haskell do块中迭代列表?

在Haskell do块中迭代列表?,haskell,blaze-html,Haskell,Blaze Html,我为这个糟糕的标题道歉,但我不太知道如何总结这个 我是一名Haskell初学者,使用Blaze HTML中的模板在Haskell(Hakyll)中创建网站,该模板使用do符号创建HTML。以下是我的模板的一部分: defaultTemplateRaw :: Html defaultTemplateRaw = html $ do H.head $ do meta ! httpEquiv "Content-Type" ! content "text/html; charset

我为这个糟糕的标题道歉,但我不太知道如何总结这个

我是一名Haskell初学者,使用Blaze HTML中的模板在Haskell(Hakyll)中创建网站,该模板使用do符号创建HTML。以下是我的模板的一部分:

defaultTemplateRaw :: Html
defaultTemplateRaw = html $ do
    H.head $ do
        meta ! httpEquiv "Content-Type" ! content "text/html; charset=UTF-8"
        H.title "My Hakyll Blog - $title$"
        link ! rel "stylesheet" ! type_ "text/css" ! href "/css/main.css"
        link ! rel "stylesheet" ! type_ "text/css" ! href "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
        link ! rel "stylesheet" ! type_ "text/css" ! href "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" 

现在让我们假设我想在这里保持干燥,这样我就不会有所有的
链接
s,只是某种列表理解中的URL列表。我该怎么做

您可以在此处使用
mapM

thelinks :: [AttributeValue]
thelinks = ["list", "of", "hrefs"]

defaultTemplateRaw :: Html
defaultTemplateRaw = html $ do
    H.head $ do
        meta ! httpEquiv "Content-Type" ! content "text/html; charset=UTF-8"
        H.title "My Hakyll Blog - $title$"
        mapM_ ((link ! rel "stylesheet" ! type_ "text/css" !) . href) thelinks
等同于:

\x -> link ! rel "stylesheet" ! type_ "text/css" ! x
但是我们不能直接将
属性值作为
x
传递给该函数:我们需要使用
href
属性,我们通过使用
来实现。href
,因此意味着:

  (link ! rel "stylesheet" ! type_ "text/css" !) . href
-----------------------------------------------------------------------
= (\x -> link ! rel "stylesheet" ! type_ "text/css" ! x) . href
-----------------------------------------------------------------------
= \y -> (\x -> link ! rel "stylesheet" ! type_ "text/css" ! x) (href y)
-----------------------------------------------------------------------
= \y -> (link ! rel "stylesheet" ! type_ "text/css" ! (href y))
因此,在语法上调用列表项上的
href
函数是一种更方便的方法,这将导致
链接的结构

对于给定的示例列表,这将生成:

Main L R> putStrLn $ L.unpack $ R.renderHtml defaultTemplateRaw
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>My Hakyll Blog - $title$</title><link rel="stylesheet" type="text/css" href="list"><link rel="stylesheet" type="text/css" href="of"><link rel="stylesheet" type="text/css" href="hrefs"></head></html>
Main L R>putStrLn$L.unpack$R.renderHtml defaultTemplateRaw
我的Hakyll博客-$title$

太棒了。尽管你能再解释一下为什么
link
href
像那样分手吗?@Jono:我补充了一个简短的解释。
Main L R> putStrLn $ L.unpack $ R.renderHtml defaultTemplateRaw
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>My Hakyll Blog - $title$</title><link rel="stylesheet" type="text/css" href="list"><link rel="stylesheet" type="text/css" href="of"><link rel="stylesheet" type="text/css" href="hrefs"></head></html>