如何使用 Conduit 保存文件?

2024-03-09

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

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"

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Conduit 保存文件? 的相关文章

随机推荐

  • Visual Studio 的调试器/交互式窗口如何转储 .NET 中 COM 对象的属性?

    In this 相关问题 https stackoverflow com q 14716871 386205 我注意到 Visual Studio 的调试器能够枚举System ComObject http msdn microsoft c
  • 所有 KIF 测试步骤都会引发相同的错误,我做错了什么?

    运行我的 KIF 目标时 无论我如何编写 KIFTestScenario 或 KIFTestStep 它们都会返回以下错误 12 20 58 434 Test that a user can successfully dismiss the
  • 如何正确连接MySQL数据库与C#应用程序?

    我正在尝试连接我的MySQL数据库与C 但它没有连接 我在用 static string connstring server my live ip userid user password 123 database db name port
  • 将鼠标悬停在饼图分段上(纯 CSS)

    我正在使用纯 HTML 和 CSS 创建饼图 我想使用纯 CSS 更改每个饼图段 切片悬停时的背景颜色 纯 Javascript 解决方案是可以接受的 但不是所期望的 我可以使用hover pseudoclass为了这 HTML div c
  • 优雅地实现 ExecutorServices 的队列长度指示器

    为什么 哦 为什么不java util concurrent为其提供队列长度指标ExecutorService是 最近我发现自己在做这样的事情 ExecutorService queue Executors newSingleThreadE
  • kable col.names 和 header 中的文本下标

    我似乎无法使用 kableExtra 包和包含下标的列名或标题生成 html 表 我尝试了多种方法 但它只是不断显示没有下标的输出 以mtcars数据集为例 data mtcars library kableExtra mtcars gt
  • 如何克服 Godot 将按钮字体更改为默认颜色的问题?

    我正在使用 Godot 4 我在容器中手动创建了很多按钮 我在主场景中设置了一个颜色变量 tempcol 当我单击带有 tempcol 设置的按钮时 比如 Color Red 按钮的字体颜色更改为白色 似乎是默认字体颜色 但是当我单击另一个
  • 银光 mpeg-4

    我目前正在开发一个项目 我需要创建一个网络视频播放器 在当前状态下 我的应用程序播放客户端提供的动态 JPEG 和 H264 AVC 格式的录音 问题是 他还想要 MPEG 4 第 2 部分 视觉 我称之为 mp4v 根据this http
  • iOS 中的精确计时

    我正在查看 iOS SDK 中的 Metronome 示例代码 http developer apple com library ios samplecode Metronome Introduction Intro html http d
  • Zend:如何在我的所有视图中添加网页标题?

    现在我必须在所有视图中分别添加标题 如下所示 and 现在如果我想改变测试项目标题的一部分 那么我必须在我的所有观点中更改它 我怎么能在BootStrap php并将其添加到所有视图中 每当我必须改变这一点时 我都会在一个地方改变它 你应该
  • 如何使用 LD_PRELOAD 运行 gdb?

    我有一个使用 LD PRELOAD 的程序 该程序应该像这样运行 这个 LD PRELOAD path to libfoo so qemu U LD PRELOAD a out 如果 没有 gdb 这是我在运行 gdb 时所做的事情 gdb
  • PHPMailer 显示为 root 用户

    我正在使用 PHP Mailer 发送电子邮件 并且我正在使用 SMTP 这是我正在使用的代码 email new PHPMailer email gt IsSMTP telling the class to use SMTP email
  • 是否有使用 javascript 生成 html 的最佳实践

    我正在调用一个 Web 服务 该服务返回 JSON 格式的对象数组 我想获取这些对象并用 HTML 填充 div 假设每个对象都包含一个 url 和一个名称 如果我想为每个对象生成以下 HTML div img src the name d
  • 如何通过在 Android-Studio 中编辑 build.gradle 将我的库放在 android.jar 前面

    First Here s my Java Build Path in Eclipse common jar core jar framework jar layout jar这四个jar是从Android源代码中打包出来的 其中包含一些开发
  • 覆盖 required_without_all laravel 的单个消息

    我一直在 laravel 中至少使用一个 required without all 字段 这是我的规则代码 rental company id gt required without all camper id take over stat
  • PostgreSQL 返回查询日期的精确或最接近日期

    我有以下 postgresql 语法 它返回值 WHERE session date 匹配 date string 问题是有时 date string 在表中不可用 所以我希望返回最接近 date string 的日期 date strin
  • 模拟器中的iPhone相机

    有没有办法在模拟器中使用 iPhone 摄像头测试代码 一定有人写过一些东西 你可以有一个模拟相机的替换组件 在模拟器中 您可以访问一些示例照片库图像 使用 UIImagePickerControllerSourceTypePhotoLib
  • MySQL 何时尝试更新列的索引?

    我正在尝试确定 MySQL 在什么情况下更新索引 假设我有下表 CREATE TABLE MyTable ID INT NOT NULL AUTO INCREMENT MyIndexedColumn VARCHAR NOT NULL MyN
  • 比较 Access SQL 查询中的日期

    我在使用 Access sql 查询时遇到问题 我对此很陌生 所以作为一个菜鸟 很难弄清楚语法 以下是我的查询 SELECT FROM BookingMaster WHERE JourneyDate 01 08 2012 下面是各自的表格数
  • 如何使用 Conduit 保存文件?

    如何使用管道的库保存文件 我浏览了管道的教程 但似乎找不到任何东西 这是我的用例 main IO main do xxs lt lines lt gt readFile filePath sourceList xxs pipe saveFi