Yesodを使ってみて混乱したのがどこまでがHamletの構文でどこからがYesodの拡張なのだろうかというあたり。
WidgetsはYesodで追加された仕組みで、whamletとか^{footer}といった記法もYesodのものだと理解した。ついでにCore見て確認しておいた。
{-# LANGUAGE OverloadedStrings, TypeFamilies, TemplateHaskell, QuasiQuotes, MultiParamTypeClasses #-} import Yesod data Messages = Messages mkYesod "Messages" [parseRoutes| / RootR GET /set-message SetMessageR POST |] instance Yesod Messages where defaultLayout widget = do pc <- widgetToPageContent widget mmsg <- getMessage hamletToRepHtml [hamlet| $doctype 5 <html> <head> <title>#{pageTitle pc} ^{pageHead pc} <body> $maybe msg <- mmsg <p>Your message was: #{msg} ^{pageBody pc} |] instance RenderMessage Messages FormMessage where renderMessage _ _ = defaultFormMessage getRootR :: Handler RepHtml getRootR = defaultLayout $ do setTitle "My Page Title" toWidget [lucius| p { color: red; } |] toWidgetHead [hamlet| <meta name=keywords content="session sample">|] [whamlet| <form method=post action=@{SetMessageR}> My Message is: # <input type=text name=message> <input type=submit> |] postSetMessageR :: Handler () postSetMessageR = do msg <- runInputPost $ ireq textField "message" setMessage $ toHtml msg redirect RootR main :: IO () main = warpDebug 3000 Messages
Wisgetsのようにjs,css,htmlをまとめて管理できる仕組みはいいかもと思う反面、デザイナーとの分業って難しくなるんじゃないのかなぁと思うんだけどどうなんだろ?僕の場合は全部独りでやるからこういう仕組みのほうがあってるかなと思うんだけど。
それからcssの設定とか競合しないもんかね?
Developing Web Applications With Haskell and Yesod
Michael Snoyman
Oreilly & Associates Inc / 2805円 ( 2012-05-04 )
Michael Snoyman
Oreilly & Associates Inc / 2805円 ( 2012-05-04 )