Haskell 在hamlet中按分隔符分隔输出列表元素

Haskell 在hamlet中按分隔符分隔输出列表元素,haskell,hamlet,shakespeare-text,Haskell,Hamlet,Shakespeare Text,如果我有下面的代码,如何去掉输出中的最后一个逗号?有没有办法知道我在循环中的位置以及我是否在最后 {-# LANGUAGE QuasiQuotes #-} import Text.Blaze.Html.Renderer.String (renderHtml) import Text.Hamlet (hamlet) main = do let xs = [1 :: Int, 2, 3] putStrLn $ renderHtml $ [hamlet|

如果我有下面的代码,如何去掉输出中的最后一个逗号?有没有办法知道我在循环中的位置以及我是否在最后

{-# LANGUAGE QuasiQuotes #-}

import Text.Blaze.Html.Renderer.String (renderHtml)
import Text.Hamlet (hamlet)

main = do
  let xs = [1 :: Int, 2, 3]
  putStrLn $ renderHtml $ [hamlet|
                              $forall x <- xs
                                $if x == 1
                                  ONE,
                                $else
                                  #{x},
                              |] ()
{-#语言准语言}
导入Text.Blaze.Html.Renderer.String(renderHtml)
导入文本。哈姆雷特(哈姆雷特)
main=do
设xs=[1::Int,2,3]
putStrLn$renderHtml$[hamlet|

$forall x我认为您必须在Haskell端实现这种逻辑,例如:

import Data.List (intercalate)

main = do
  let xs = [1 :: Int, 2, 3 ]
      str = intercalate "," $ map fmt xs
      fmt 1 = "ONE"
      fmt x = show x

  ... [hamlet| #{str}] ...

一些以特殊方式处理序列的第一个或最后一个元素的视觉效果也可以使用CSS实现,即使用
  • 标记。

    您可以使用
    穿插
    功能:

    {-# LANGUAGE QuasiQuotes #-}
    
    import Text.Blaze.Html.Renderer.String (renderHtml)
    import Text.Hamlet (hamlet)
    import Data.List (intersperse)
    
    main = do
      let xs = intersperse "," $ map show [1 :: Int, 2, 3]
      putStrLn $ renderHtml $ [hamlet|
                                  $forall x <- xs
                                    $if x == "1"
                                      ONE
                                    $else
                                      #{x}
                                  |] ()
    
    请注意,
    interspere
    将在列表之间插入中间的
    。因此,在hamlet Quasikoter中,您只需显示列表:

    λ> intersperse "," $ map show [1,2,3]
    ["1",",","2",",","3"]
    
    λ> intersperse "," $ map show [1,2,3]
    ["1",",","2",",","3"]