为什么Data.Text.Lazy.replace和Data.Text.Lazy.append不起作用?

Jan*_*Jan 7 haskell

在下面的代码三种不同的方法(str1,str2,和str3使用替换字符串)Data.Text.Lazy.replace.他们应该提供相同的输出.

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
Run Code Online (Sandbox Code Playgroud)

然而,运行该程序的结果是:

Hello, Joyce.
Hello, <<name>>.
Hello, Joyce.
Run Code Online (Sandbox Code Playgroud)

为什么str2无法正常工作?代码有什么问题吗?

Bry*_*van 5

伙计们,感谢错误报告.我会调查一下,然后按照我的发现跟进.


Dan*_*ner 4

对我来说,这就像text图书馆里的一个错误。

(我已经在错误跟踪器中添加了一个问题,以防作者碰巧没有访问 Stack Overflow。)