Zeichenketten interpolieren

Haskell:
Zeichenketten interpolieren

How to:

In Haskell gibt es keine eingebaute String-Interpolation wie in manch anderen Sprachen. Stattdessen nutzen wir die printf-Funktion aus dem Text.Printf-Modul oder die Template-Strings aus dem interpolate-Paket. Hier sind zwei Methoden:

Mit printf:

import Text.Printf

main :: IO ()
main = do
    let name = "Welt"
    printf "Hallo, %s!\n" name

Ausgabe:

Hallo, Welt!

Mit Template-Strings:

Zuerst, fügen Sie das interpolate-Paket Ihrem Projekt hinzu, indem Sie die entsprechende Zeile in Ihrer .cabal-Datei oder stack.yaml aufnehmen. Jetzt verwenden Sie es:

{-# LANGUAGE QuasiQuotes #-}
import Data.String.Interpolate (i)

main :: IO ()
main = do
    let name = "Welt"
    putStrLn [i|Hallo, #{name}!|]

Ausgabe:

Hallo, Welt!

Deep Dive

Historisch gesehen hatte Haskell keine eingebaute String-Interpolation, hauptsächlich wegen des starken Fokus auf Typsicherheit und Funktionsreinheit. Frühe Haskeller benutzten ++ für die Verkettung von Strings oder printf für formatierte Ausgaben, ähnlich wie in C.

Das Paket Text.Printf bringt C-ähnliche printf-Funktionalität nach Haskell, während die interpolate-Bibliothek ein moderneres Gefühl mit Template-Strings bietet. Die Implementierung nutzt QuasiQuotes, eine Erweiterung, die es ermöglicht, Strings zu parsen und in Haskell-Ausdrücke umzuwandeln.

Alternativen sind Monoid-Operationen mit (++) oder concat, sowie show für die Umwandlung von Daten in Strings. Viele Haskeller verwenden auch Formatierungsbibliotheken wie formatting, die leistungsfähig sind, aber eine lernkurve haben.

See Also

Hier sind einige Ressourcen, um mehr über String-Interpolation und verwandte Themen in Haskell zu erfahren: