我正在编写一个程序,它将文本文件列表作为参数并输出一个文件,其中每一行是文件中相应行之间的选项卡的插入。
假设所有字符都是 ASCII 编码的
import GHC.IO.Handle
import System.IO
import System.Environment
import Data.List
main = do
(out:files) <- getArgs
hs <- mapM (`openFile` ReadMode) files
txts <- mapM B.hGetContents hs
let final = map (B.intercalate (B.singleton '\t')) . transpose
. map (B.lines . B.filter (/= '\t')) $ txts
withFile out WriteMode $ \out ->
B.hPutStr out (B.unlines final)
putStrLn "Completed successfully"
问题是它输出:
file1row1
file2row1
file1row2
file2row2
file1row3
file2row3
代替:
file1row1 file2row1
file1row2 file2row2
file1row3 file2row3
通过在 ghci 中手动定义函数进行测试时,相同的逻辑可以正常工作。Data.Text.Lazy
当使用而不是惰性Bytestring
s时,相同的代码可以正常工作。
我的方法有什么问题?