Haskell 测试用户是否登录到Hamlet模板

Haskell 测试用户是否登录到Hamlet模板,haskell,yesod,hamlet,Haskell,Yesod,Hamlet,我想测试用户是否经过身份验证,并根据状态显示“登录”或“注销”链接 到目前为止我有 $maybe muid <- maybeAuthId <a href=@{AuthR LogoutR} >Logout $nothing <a href=@{AuthR LoginR} >Login maybeAuthId是执行数据库和会话相关操作的一元操作。在哈姆雷特模板的定义中不能有一元动作。想象一下,如果你写了这个(类似的一元动作),会发生什么: $maybe

我想测试用户是否经过身份验证,并根据状态显示“登录”或“注销”链接

到目前为止我有

$maybe muid <- maybeAuthId
    <a href=@{AuthR LogoutR} >Logout
$nothing
    <a href=@{AuthR LoginR} >Login

maybeAuthId
是执行数据库和会话相关操作的一元操作。在哈姆雷特模板的定义中不能有一元动作。想象一下,如果你写了这个(类似的一元动作),会发生什么:

$maybea>返回(只是“Hi”)
只是#{a}
零美元
没什么
该行动应多久执行一次;每次呈现模板时?什么时候上膛?如果它不只是将“Hello World”打印到终端上,它可能会变得非常混乱,即使这样,它也不是很安全——你希望你的模板文件能够打印到终端上、发射核武器或窃取你的信用卡信息吗

这就是为什么在所有莎士比亚的模板中只允许纯值。您需要这样做:

getMyHandlerR :: Handler RepHtml
getMyHandlerR = do
  muid <- maybeAuthId
  $(widgetFile "foo")
getMyHandlerR::Handler RepHtml
getMyHandlerR=do

很酷,谢谢。总的来说,我正在慢慢掌握蒙纳德和哈斯克尔的诀窍。
$maybe a <- liftIO (putStrLn "Hello World") >> return (Just "Hi")
    <p>Just #{a}
$nothing
    <p>Nothing
getMyHandlerR :: Handler RepHtml
getMyHandlerR = do
  muid <- maybeAuthId
  $(widgetFile "foo")
$maybe uid <- muid
  <p>Foo
$nothing
  <p>Bar