BlazeHtml チュートリアルでは、 BlazeHtmlを使用した実際のテンプレート作成に Reader モナドを使用することを提案していますが、これを行う方法については説明していません。この推奨に従ってみました。結果は私を混乱させます。
説明のために、単純な User タイプがあり、別の関数を使用して HTML を作成したいとします。1 つはレイアウト用で、もう 1 つは HTML ページのユーザー情報を表示する部分用です。Reader モナドを使用すると、次のようになります。
data User = User {
username :: Text
, userId :: nt
} deriving (Show)
userBox :: Reader User Html
userBox = do
user <- ask
return $ do
dl $ do
dt $ "Username"
dd $ H.toHtml $ username user
dt $ "UserId"
dd $ H.toHtml $ userId user
page :: Reader User Html
page = do
user <- ask
return $ H.docTypeHtml $ do
H.head $ title "Reader Monad Blaze Example"
H.body $ do
h1 $ "Hello world"
runReader userBox user
これを Reader モナドを使用しない私のバージョンと比較してください:
userBox :: User -> Html
userBox user = do
dl $ do
dt $ "Username"
dd $ H.toHtml $ username user
dt $ "UserId"
dd $ H.toHtml $ userId user
page :: User -> Html
page user = do
H.docTypeHtml $ do
H.head $ title "Blaze Example, No Reader Monad"
H.body $ do
h1 $ "Hello world"
userBox user
そのため、実際の使用例で Reader モナドがテンプレート コードを実際にどのように強化できるかを理解するのに苦労しています。何か不足していますか?