Почти два дня мучений и вот, пример, как с помощью HSP плодить элементы в цикле. Если кому интересно, то мне не жалко.
{-# LANGUAGE FlexibleContexts, QuasiQuotes, TypeFamilies, OverloadedStrings #-}
module Main where
import Control.Monad.Identity (Identity(..))
import Data.Text.Lazy (Text)
import Language.Haskell.HSX.QQ (hsx)
import HSP
import HSP.Monad
import Happstack.Server.HSP.HTML
import Happstack.Server (ServerPartT,nullConf,simpleHTTP)
toHTML :: HSPT XML Identity XML -> ServerPartT IO XML
toHTML x = return $ runIdentity $ unHSPT x
recursiveFun :: (XMLGenerator m, StringType m ~ Text) =>
Int -> XMLGenT m [ChildType m]
recursiveFun n = do
a <- [hsx|
<%>
<div>
<% fromStringLit $ "recursiveFun " ++(show n) %>
</div>
</%>
|]
if n == 0
then return a
else do
b <- (recursiveFun (n-1))
return $ a ++ b
hello :: ServerPartT IO XML
hello = toHTML $ defaultTemplate "Hello" () $ [hsx|
<p>
<% recursiveFun 2 %>
</p>
|]
main :: IO ()
main = do simpleHTTP nullConf $ hello