Yesod's shakespearean templates (hamlet) and I

2019-02-25 05:21发布

In Hamlet, how does one uses the result of an IO operation inside #{...} ?

For instance :

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

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

Fails with

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

I fear that I have not approached the problem from the right angle, could someone shed some light on this issue for me?

Thank you

1条回答
祖国的老花朵
2楼-- · 2019-02-25 05:42

Hamlet is just providing an alternate syntax for normal Haskell code, so like normal Haskell, you have to keep your impure actions separate. In other words, you need to run the IO action outside of the template.

查看更多
登录 后发表回答