En el siguiente código hay tres formas diferentes (str1
, str2
y str3
) de reemplazar una cadena usando Data.Text.Lazy.replace
. Deberían dar el mismo resultado.¿Por qué no funcionan Data.Text.Lazy.replace y Data.Text.Lazy.append?
import Data.Text.Lazy as DTL
str1 :: String
str1 = DTL.unpack $ DTL.replace key value text
where key = DTL.pack "<<name>>"
value = DTL.pack "Joyce"
text = DTL.pack "Hello, <<name>>."
str2 :: String
str2 = DTL.unpack $ DTL.replace key value text
where key = DTL.pack "<<" `DTL.append` DTL.pack "name"
`DTL.append` DTL.pack ">>"
value = DTL.pack "Joyce"
text = DTL.pack "Hello, <<name>>."
str3 :: String
str3 = DTL.unpack $ DTL.replace key value text
where key = DTL.pack $ "<<" ++ "name" ++ ">>"
value = DTL.pack "Joyce"
text = DTL.pack "Hello, <<name>>."
main :: IO()
main = do putStrLn str1
putStrLn str2
putStrLn str3
Sin embargo, el resultado de la ejecución del programa es:
Hello, Joyce.
Hello, <<name>>.
Hello, Joyce.
¿Por qué str2 no funciona correctamente? ¿Hay algo mal con el código?
En str2 ¿puede intentar usar $ after DTL.pack para obtener el valor clave? – Ankur