在 Haskell 中删除文件的最后一行

问题描述 投票:0回答:0

我是 Haskell 的初学者,我正在尝试用 Haskell 重写我的一个 shell 脚本作为测试。我想要完成的其中一件事是删除文件的最后一行并读取它的值。

我尝试使用

readFile
然后
writeFile
,但我不能,因为它很懒。 我能够使用这段代码让它工作:

import           Data.List
import qualified Data.ByteString.Char8         as B
import qualified Data.Text                     as T
import qualified Data.Text.Encoding            as TL

erase filename = do
  contents <- B.readFile filename
  let array = map (T.unpack . TL.decodeUtf8) (B.lines contents)
  B.writeFile filename $ B.pack (intercalate "\n" (init array))
  print $ last array

这会将文件的行变成一个列表,然后在没有最后一行的情况下写入文件。它使用 ByteString 所以它不会偷懒。但是,我认为这种方式非常冗长并且做得很奇怪。是否有一些函数可以从文件中删除一行或者如何改进这段代码?

haskell io bytestring
© www.soinside.com 2019 - 2024. All rights reserved.