Interpolacja łańcuchów znaków

Haskell:
Interpolacja łańcuchów znaków

Jak to zrobić:

W Haskellu, interpolacja nie jest wbudowana jak w innych językach. Musimy użyć biblioteki, takiej jak text i jej quasi-quoterów. Oto jak:

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes       #-}

import Data.Text
import Data.Text.IO as T
import Text.Shakespeare.Text (lt)

name = "świat"
age = 30

main = T.putStrLn [lt|Cześć, #{name}! Masz już #{age} lat.|]

Po uruchomieniu otrzymasz:

Cześć, świat! Masz już 30 lat.

Głębsze spojrzenie

Haskell początkowo nie miał wbudowanej interpolacji ciągów znaków. Musieliśmy używać konkatenacji i funkcji show. Doprowadziło to do powstania różnych bibliotek, które to upraszczały, jak text i interpolate.

Alternatywą dla Shakespeare’a jest fmt, który używa type-safe formatowania, również wart uwagi. Jego użycie wygląda tak:

import Fmt

main = putStrLn (format "Cześć, {}! Masz już {} lat." name age)

Co do implementacji, text używa quasi-quoterów ([lt|...|]) do analizowania tekstów i zastępowania wyrażeń zawartych w #{}. fmt korzysta z type-safe DSL, który sprawdzi poprawność typów podczas kompilacji.

Zobacz także