Re: Сам разобрался
От: AltCtrlDel  
Дата: 26.05.14 15:08
Оценка:
Почти два дня мучений и вот, пример, как с помощью 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.