非常によく似た次の 3 つのページを考えてみてください。
{-# LANGUAGE OverloadedStrings, TypeFamilies, QuasiQuotes,
TemplateHaskell, MultiParamTypeClasses #-}
import Yesod
import Control.Applicative
import Data.Text (Text)
import Text.Hamlet
data Example = Example
mkYesod "Example" [parseRoutes|
/ RootR GET
/page PageR GET
/page2 Page2R GET
|]
instance Yesod Example
getRootR :: GHandler sub Example RepHtml
getRootR = do
defaultLayout [whamlet|
$doctype 5
<html>
<head>
<title>Tutorial, hello root
<body>
<h1 id="greeting">Hello root
|]
getPageR :: GHandler sub Example RepHtml
getPageR = defaultLayout $ do
toWidgetHead [hamlet| <meta charset="utf-8"> |]
setTitle "hello page"
toWidget [hamlet|
<h1 id="greetings2">Hello page
|]
getPage2R :: GHandler sub Example RepHtml
getPage2R = defaultLayout $ do
toWidget [hamlet|
$doctype 5
<html>
<head>
<title>Tutorial, hello page2
<body>
<h1 id="greeting">Hello page2
|]
main :: IO ()
main = warpDebug 3000 Example
RootR と page2 は同じ出力 (タグと構造を意味します) を提供しますが、「ページ」は 2 つとは少し異なります。出力は、最初の「root」と「page2」です。
<!DOCTYPE html>
<html><head><title></title></head><body><!DOCTYPE html>
<html><head><title>Tutorial, hello page2</title>
</head>
<body><h1 id="greeting">Hello page2</h1>
</body>
</html>
</body></html>
「ページ」の出力は
<!DOCTYPE html>
<html><head><title>hello page</title><meta charset="utf-8"> </meta>
</head><body><h1 id="greetings2">Hello page</h1>
</body></html>
「root」と「page2」に余分な & タグがあるのはなぜですか? コードに何かを追加するか、何かを削除する必要がありますか?
助けてくれてありがとう!