gpt4 book ai didi

haskell - 如何使用 Conduit 保存文件?

转载 作者:行者123 更新时间:2023-12-02 09:24:40 26 4
gpt4 key购买 nike

如何使用 conduit 的库保存文件?我查看了 conduit 的教程,但似乎找不到任何东西,这是我的用例:

main :: IO ()
main = do
xxs <- lines <$> (readFile filePath)
sourceList xxs =$ pipe $$ saveFile

pipe :: Monad m => Conduit String m String
pipe = undefined

所以这里有两个问题:

  1. 使用 lines 将字符串转换为列表是否有意义字符串,然后将其提供给 sourceList?

  2. 我应该如何实现 saveFile 函数,以便当字符串xxs 已完全处理,我可以将其写入磁盘吗?

最佳答案

您尝试使用 conduit 库执行的操作的一个最小示例:

#!/usr/bin/env stack
{- stack
--resolver lts-6.7
--install-ghc
runghc
--package conduit-extra
--package resourcet
--package conduit
-}

import Data.Conduit.Binary (sinkFile, sourceFile)
import Control.Monad.Trans.Resource
import Data.Conduit (($$), await, Conduit, (=$), yield)
import Data.Monoid ((<>))
import Control.Monad.IO.Class

myConduit = do
str <- await
case str of
Just x -> do
liftIO $ print "some processing"
yield x
myConduit
Nothing -> return ()


saveFile :: FilePath -> FilePath -> IO ()
saveFile f1 f2 = runResourceT $ sourceFile f1 $$ myConduit =$ sinkFile f2

main :: IO ()
main = saveFile "test.txt" "atest.txt"

How should I implement the saveFile function so that when the strings xxs are fully processed, I can write it to disk?

您在 myConduit 函数中实现它。请注意,在您的示例中,您正在使用 readFile 函数调用,它将延迟读取文件。 Conduit 为读取和写入文件提供了它自己的抽象,您应该使用它。

关于haskell - 如何使用 Conduit 保存文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38863820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com