如何嵌套哈姆雷特文件?

时间:2015-12-03 01:56:12

标签: haskell yesod

我不熟悉Yesod,在嵌套两个hamlet文件时我遇到了一些问题,其中一个有一个表单。

loginForm :: Form Admin
loginForm = renderDivs $ Admin
    <$> areq textField (bfs ("Login" :: Text)) Nothing
    <*> areq passwordField (bfs ("Password" :: Text)) Nothing

Form Admin代表type Form a = Html -> MForm Handler (FormResult a, Widget),只是一个语法糖,以避免重复。

我使用辅助函数来调用hamlet文件,该文件是一个页脚并具有表单,考虑到它会出现在所有页面中。

footer widgetLogin enctypeLogin = toWidget $(hamletFile "hamlet/footer.hamlet")

我将footer.hamlet文件缩小为敏感数据。

<form role="form" method="post" enctype=#{enctypeLogin} action=@{AdminRedirectR}>
    ^{widgetLogin}
    <button type="submit" class="btn btn-default">Go

然后,一些调用页脚功能的页面:

getIndexR :: Handler Html
getIndexR = do
    generateFormPost loginForm >>= \(widgetLogin, enctypeLogin) ->
        defaultLayout $(whamletFile "hamlet/index.hamlet")

index.hamlet内,我有^{footer},但这样做会突然出现错误:

Couldn't match expected type Page with actual type ‘HandlerSite m0’
The type variable m0 is ambiguous …

类型Page是类型类Yesod的一个实例。

如果我用页脚代码本身替换^{footer},错误消失了,但它有点笨拙而且不实用。

我该如何解决?

0 个答案:

没有答案