Yesod的莎士比亚模板(小村)和IO

时间:2014-04-27 01:40:33

标签: haskell yesod hamlet io-monad

在Hamlet中,如何在#{...}内使用IO操作的结果?

例如:

someIO :: IO String
-----------------

$with stuff <- someIO
    <p>#{stuff}

失败
No instance for (blaze-markup-0.6.0.0:Text.Blaze.ToMarkup
                       (IO String))
      arising from a use of `toHtml'

我担心我没有从正确的角度解决问题,有人可以为我解释这个问题吗?

谢谢

1 个答案:

答案 0 :(得分:3)

Hamlet只是为普通的Haskell代码提供了一种替代语法,所以像普通的Haskell一样,你必须将不纯的动作分开。换句话说,您需要在模板外部运行IO操作。