Haskell:
Interpolering av en streng
Hvordan:
Interpolering i Haskell kan gjøres med printf
fra Text.Printf
biblioteket eller med interpolate
fra Data.String.Interpolate
for å få en mer moderne syntaks à la template strings i JavaScript.
import Text.Printf
main :: IO ()
main = do
let navn = "Verden"
putStrLn (printf "Hei, %s!" navn)
Output:
Hei, Verden!
Eller ved hjelp av interpolate
bibilioteket:
{-# LANGUAGE QuasiQuotes #-}
import Data.String.Interpolate ( i )
main :: IO ()
main = do
let navn = "Verden"
putStrLn [i|Hei, #{navn}!|]
Output:
Hei, Verden!
Deep Dive
Tidligere i Haskell, var strengkonkatenering og ++
operatoren normen for å bygge strenger med variabler. Men det var tungvint og feilutsatt. printf
-stilen kom fra C og ble adoptert i Haskell for tradisjonell strengformatering. Den fungerer, men syntaksen er ikke ideell.
Data.String.Interpolate
er et tredjepartsbibliotek som introduserer moderne strenginterpolering. Dette biblioteket bruker en quasiquote syntaks ([i|...|]
), som gir mer lesbar kode og direkte støtte for interpolering uten å måtte bruke spesielle tegn eller formatteringsdirektiver som med printf
.
For å implementere strenginterpolering på denne måten, bruker Data.String.Interpolate
Haskell sin Template Haskell-funksjonalitet, som er en kraftig metaprogrammeringsfasilitet. Det oversetter interpolerte strenger til effektiv konkatenert kode ved kompileringstid, og sikrer god ytelse.
See Also
For videre lesning og dybdekunnskap, sjekk ut disse ressursene: