2012-01-21 15 views

Odpowiedz

11

Wziąłem spojrzeć na wszystkie interpolacji quasiquoter bibliotekach udało mi się znaleźć na Hackage.

biblioteki interpolacji warto stosować:

  • interpolatedstring-perl6: Obsługuje interpolację dowolnego kodu Haskell w rozsądnej składni, ale wymaga Haskell-src-ekstrahowane. Jeśli chcesz tylko ogólnej składni interpolacji napisów, użyłbym tego.

  • shakespeare-text: oparty na rodzinie szablonów Shakespeare i mający minimalne zależności; większość innych interpolowanych pakietów napisów zależy od haskell-src-exts, co jest dość ciężkim pakietem i może wymagać wiele czasu i zasobów do kompilacji. Jeśli korzystasz z innych szablonów Szekspira, proponuję pójść z tym.

    Jednak nie obsługuje interpolacji arbitralnego kodu Haskella, mimo że obsługuje więcej niż proste rozszerzanie zmiennych; to także działa funkcja, operatory, itp. Myślę, że to także używa Text zamiast String; Nie jestem pewien, czy można go używać z String s patrząc z kodu źródłowego, chociaż istnieje kod wsparcia sugerujący, że może być.

  • Interpolation: Obsługuje dowolne wyrażenia (ponownie z haskell-src-exts), a także ma wbudowane funkcje pętli. Jeśli chcesz uzyskać więcej funkcji podobnych do "szablonu" niż zwykłą interpolację, warto wziąć pod uwagę, chociaż osobiście uważam, że składnia jest dość brzydka.

biblioteki interpolacji prawdopodobnie nie warto stosować:

  • interpolatedstring-qq: wydaje się być oparty na interpolatedstring-perl6; nie był aktualizowany przez ponad rok i wydaje się mieć mniejszą funkcjonalność niż interpolatedstring-perl6. O ile nie jesteś naprawdę przywiązany do składni #{expr}, nie rozważałbym tego.

  • : Wdrożony jako preprocesor, nadaje {foo} specjalne znaczenie w ciągach; IMO zbyt ciężkie rozwiązanie, a przy tak lekkiej składni może złamać istniejący kod.

Podsumowując, sugeruję interpolatedstring-perl6 jeśli nie przeszkadza zależność Haskell-src-ekstrahowane, i Shakespeare-tekst, jeśli nie (lub już przy użyciu szablonów Szekspira).

Inną opcją może być użycie pakietu string-qq z bardziej ogólnym silnikiem szablonów; obsługuje String, Text i ByteString, które powinny obejmować każde użycie.Jednak to oczywiście nie obsługuje osadzania kodu Haskella, a będziesz musiał określić zmienne osobno, więc prawdopodobnie będzie to przydatne tylko w pewnych sytuacjach.

+2

Shakespeare-text nie ma pełnej obsługi wyrażenia Haskell, ale ma dużo. Możesz na przykład zastosować funkcje i użyć operatorów. –

+0

@MichaelSnoyman: Dzięki; Niedługo zaktualizuję swoją odpowiedź. Jednej rzeczy nie mogłem zrozumieć z dokumentacji: czy warianty i pętle wspierają tekst szekspirowski? – ehird