2011-09-23 22 views
6

Con el lenguaje de plantillas de aldea que viene con yesod, ¿cuál es la mejor manera de imprimir una lista separada por comas?¿Cómo imprimir una lista separada por comas con aldea?

E.g. Supongamos que este código que solo imprime una entrada tras otra, ¿cómo puedo insertar comas entre los elementos? O tal vez incluso añadir una “y” antes de la última entrada:

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

Algunos lenguajes de plantillas como Template Toolkit proporcionan directrices para detectar la primera o la última iteración.

Respuesta

5

No creo que haya nada incorporado así. Afortunadamente, es fácil usar funciones de ayuda en Hamlet. Por ejemplo, si sus artículos son cadenas simples, puede simplemente usar Data.List.intercalate para agregar comas entre ellos.

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

Si quiere hacer cosas más elegantes, puede escribir funciones para trabajar con los valores de Hamlet. Por ejemplo, aquí hay una función que agrega comas y "y" entre los valores de Hamlet en una lista.

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

Este utiliza ^{...} sintaxis para insertar un valor de Hamlet en otro. Ahora, podemos usar esto para escribir una lista de palabras subrayadas separadas por comas.

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

Aquí, underline es sólo una función auxiliar pequeño para producir algo más interesante que el texto plano.

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

Cuando se procesa, esto da el siguiente resultado.

The values in the list are <u>foo</u>, <u>bar</u> and <u>baz</u> and that is it. 
+0

Gracias, supongo que es una buena colección de soluciones, aunque ninguna tan satisfactoria como lo que proporciona Template Haskell. Quizás debería enviar un parche para una variable '' 'loop''' sepecial a hamlet. –

Cuestiones relacionadas