Interpolering av en streng

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: