在yesod中在一个页面上制作两个小部件

时间:2013-11-17 17:38:57

标签: haskell yesod

我需要在一个页面中添加两个小部件,如下所示:

getPageR :: Handler Html
getPageR = defaultLayout $ do
        aDomId <- newIdent
        setTitle "Titre de la page"
    $(widgetFile "rightzone" ++ "leftzone")

但这给了我一个错误。

1 个答案:

答案 0 :(得分:2)

我不使用yesod,但快速Hayoo!表示widgetFile的类型为String -> Q Exp。这是一个模板Haskell表达式。我猜您的错误是,您无法将++运算符应用于来自Q Exp的{​​{1}}和来自widgetFile "rightzone"的{​​{1}}。

String"leftzone",因此defaultLayout应为WidgetT site IO () -> HandlerT site IO Html类型的模板Haskell表达式。因此,要组合两个小部件,您可能正在寻找类型为$(widgetFile ...)的函数。 WidgetT site IO ()有一个WidgetT site IO () -> WidgetT site IO () -> WidgetT site IO ()实例WidgetT,因此Monad的{​​{1}}运算符应该具有将两个小部件组合在一起的正确类型。如果你的两个小部件是“rightzone”和“leftzone”,你可能想要做Monad m => Monad (WidgetT site m)之类的事情。您可以将其写为

Monad

>>

我不知道$(widgetFile "rightzone") >> $(widgetFile "leftZone")对小部件意味着什么,但它应该有正确的类型才能尝试并查找。