我需要在一个页面中添加两个小部件,如下所示:
getPageR :: Handler Html
getPageR = defaultLayout $ do
aDomId <- newIdent
setTitle "Titre de la page"
$(widgetFile "rightzone" ++ "leftzone")
但这给了我一个错误。
答案 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")
对小部件意味着什么,但它应该有正确的类型才能尝试并查找。