2012-01-21 17 views

risposta

11

ho preso uno sguardo a tutti l'interpolazione quasiquoter librerie ho potuto trovare su Hackage.

librerie di interpolazione vale la pena utilizzare:

  • interpolatedstring-perl6: Supporta l'interpolazione di codice arbitrario con la sintassi Haskell ragionevole, ma richiede Haskell-src-exts. Se si desidera una sintassi di interpolazione di stringa generale, lo userei.

  • shakespeare-text: basato sulla famiglia di modelli Shakespeare e con dipendenze minime; la maggior parte degli altri pacchetti di stringhe interpolati dipende da haskell-src-exts, che è un pacchetto piuttosto pesante e può richiedere molto tempo e molte risorse per essere compilato. Se usi altri modelli di Shakespeare, suggerirei di andare con questo.

    Tuttavia, non supporta l'interpolazione del codice Haskell arbitrario, sebbene supporti più di una semplice espansione di variabile; funziona anche con applicazioni, operatori, ecc. Penso che usi anche Text anziché String; Non sono sicuro se possa essere utilizzato con String s guardando dal codice sorgente, anche se c'è un codice di supporto che potrebbe suggerire che possa esserlo.

  • Interpolation: supporta le espressioni arbitrarie (di nuovo con haskell-src-exts) e dispone anche di funzionalità di looping incorporate. Se si desiderano più funzioni "template" piuttosto che semplici interpolazioni, vale la pena considerare, anche se personalmente trovo la sintassi abbastanza brutta.

librerie di interpolazione probabilmente non vale la pena utilizzare:

  • interpolatedstring-qq: sembra essere basata su interpolatedstring-perl6; non è stato aggiornato da più di un anno e sembra avere meno funzionalità di interpolatedstring-perl6. A meno che tu non sia realmente attaccato alla sintassi #{expr}, non lo considererei.

  • interpol: implementato come preprocessore, dà il significato speciale {foo} nelle stringhe; IMO è troppo pesante per una soluzione e con una sintassi così leggera che rischia di violare il codice esistente.

In sintesi, io suggerirei interpolatedstring-perl6 se non ti dispiace la dipendenza Haskell-src-exts e shakespeare-text se si fa (o stanno già utilizzando i modelli di Shakespeare).

Un'altra opzione potrebbe essere quella di utilizzare il pacchetto string-qq con un motore di template più generale; supporta String, Text e ByteString, che dovrebbe coprire ogni utilizzo.Tuttavia, questo ovviamente non supporta l'incorporamento del codice Haskell, e dovrai specificare le variabili separatamente, quindi probabilmente è utile solo in determinate situazioni.

+2

shakespeare-text non ha il pieno supporto per l'espressione Haskell, ma ha molto. È possibile applicare le funzioni e utilizzare gli operatori, ad esempio. –

+0

@ Michael Snoyman: Grazie; Aggiornerò presto la mia risposta Una cosa che non sono riuscito a capire dalla documentazione: shakespeare-text supporta condizionali e loop? – ehird

Problemi correlati