2012-01-21 11 views

Respuesta

11

Me tomó un vistazo a toda la interpolación quasiquoter bibliotecas que pude encontrar en Hackage.

bibliotecas de interpolación utilizando un valor de:

  • interpolatedstring-perl6: Soporta la interpolación de código arbitrario con Haskell sintaxis razonable, pero requiere Haskell-src-exts. Si solo quieres una sintaxis de interpolación de cadenas general, usaría esto.

  • shakespeare-text: Basado en la familia de plantillas de Shakespeare, y tiene dependencias mínimas; la mayoría de los otros paquetes de cadenas interpoladas dependen de haskell-src-exts, que es un paquete bastante pesado y puede tomar mucho tiempo y recursos para compilarse. Si usas cualquier otra plantilla de Shakespeare, te sugiero que vayas con esta.

    Sin embargo, no es compatible con la interpolación de código Haskell arbitrario, aunque admite más que una simple expansión variable; también funciona la aplicación, los operadores, etc. Creo que también usa Text en lugar de String; No estoy seguro de si se puede usar con String s mirando desde el código fuente, aunque hay un código de soporte para sugerir que puede ser.

  • Interpolation: Admite expresiones arbitrarias (de nuevo con haskell-src-exts), y también tiene recursos incorporados de bucle. Si desea más características tipo "plantilla" que simplemente interpolación, vale la pena considerarlas, aunque personalmente encuentro la sintaxis bastante fea.

bibliotecas de interpolación probablemente no vale la pena utilizar:

  • interpolatedstring-qq: parece estar basado en interpolatedstring-Perl6; no se ha actualizado durante más de un año, y parece tener menos funcionalidad que interpolatedstring-perl6. A menos que esté realmente apegado a la sintaxis #{expr}, no consideraría este.

  • interpol: Implementado como un preprocesador, da {foo} significado especial en cadenas; Una solución demasiado pesada de la OMI, y con una sintaxis tan ligera, es probable que rompa el código existente.

En resumen, me gustaría sugerir interpolatedstring-Perl6 si no te importa la dependencia Haskell-src-exts, y Shakespeare en texto si lo hace (o ya están usando plantillas de Shakespeare).

Otra opción podría ser utilizar el paquete string-qq con un motor de plantillas más general; es compatible con String, Text y ByteString, que debe cubrir todos los usos.Sin embargo, esto obviamente no es compatible con la incrustación del código Haskell, y deberá especificar las variables por separado, por lo que probablemente solo sea útil en determinadas situaciones.

+2

shakespeare-text no tiene soporte de expresión de Haskell completo, pero tiene mucho. Puede aplicar funciones y usar operadores, por ejemplo. –

+0

@MichaelSnoyman: Gracias; Actualizaré mi respuesta pronto. Algo que no pude deducir de la documentación: ¿el texto de Shakespeare admite condicionalidades y bucles? – ehird

Cuestiones relacionadas