Как напечатать список через запятую с помощью деревушки?

С помощью языка шаблонов Гамлета, который поставляется с yesod, каков наилучший способ печати списка через запятую?

Например, предположим, что этот код просто печатает одну запись за другой, как вставить запятую между элементами? Или, может быть, даже добавить "и" перед последней записью:

The values in the list are
$ forall entry <- list
    #{entry}
and that is it.

Некоторые языки шаблонов, такие как Template Toolkit, предоставляют директивы для обнаружения первой или последней итерации.

1 ответ

Решение

Я не думаю, что есть что-то подобное. К счастью, в Hamlet легко использовать вспомогательные функции. Например, если ваши элементы представляют собой простые строки, вы можете просто использовать Data.List.intercalate добавить запятые между ними.

The values in the list are 
#{intercalate ", " list} 
and that is it.

Если вы хотите делать более причудливые вещи, вы можете написать функции для работы со значениями Гамлета. Например, вот функция, которая добавляет запятые и "и" между значениями Гамлета в списке.

commaify [x] = x
commaify [x, y] = [hamlet|^{x} and ^{y}|]
commaify (x:xs) = [hamlet|^{x}, ^{commaify xs}|]

Это использует ^{...} синтаксис для вставки одного значения Гамлета в другое. Теперь мы можем использовать это, чтобы написать разделенный запятыми список подчеркнутых слов.

The values in the list are 
^{commaify (map underline list)} 
and that is it.

Вот, underline это просто небольшая вспомогательная функция для создания чего-то более интересного, чем простой текст.

underline word = [hamlet|<u>#{word}|]

При визуализации это дает следующий результат.

The values in the list are <u>foo</u>, <u>bar</u> and <u>baz</u> and that is it.
Другие вопросы по тегам