gpt4 book ai didi

haskell - IO 相关任务中的函数式方式

转载 作者:行者123 更新时间:2023-12-03 07:05:25 25 4
gpt4 key购买 nike

大多数初学者以命令式方式编写与 IO 相关的任务。是否有任何一般性建议可以帮助初学者在实现 IO 相关任务时切换到更实用的方式?

作为一个具体的例子,考虑目录遍历和文件处理的任务。对我来说,命令式的方法是像 C 风格语言一样遍历目录树并处理每个文件。然后我发现了Conduit对我来说,库代表了功能方式:构建源列表然后使用该列表。

那么我可以说“管道方式”是 IO 相关任务中编程的首选功能方式吗?

最佳答案

管道方法并不是立即构建整个列表并使用它;而是立即构建整个列表并使用它。导管(和管道,这是该问题的另一种当前流行的解决方案)的要点是一次仅消耗一个元素。它与惰性 IO 类似,只不过是一种更原则性的方式,因为惰性 IO 的推理和正确性确实很烦人。

第一步是尝试将尽可能多的逻辑引入纯函数中;不要编写 parseFile::FileName -> Result,而是编写 parseContents::String -> Result 并使用 readFile (好吧,您也可能应该使用 Text 或 ByteString字符串,但这不相关)。

对于您的具体情况,您需要考虑三个问题:枚举您想要读取的文件,读取它们,然后处理内容。因此,如果您想使用conduit,您可以做的一件事是编写一个生成文件名的Source IO FilePath,一个Conduit FilePath IO Text code> 获取文件名并输出其内容,以及 Sink Text Result 获取内容并对其执行任何操作。然后,您使用 (source $=conduit) $$sink 或类似的东西将它们全部连接在一起,然后您将获得 IO 结果

我相信这与响应式(Reactive)编程有关,但是我对响应式(Reactive)编程不太了解,所以我不能说太多。

关于haskell - IO 相关任务中的函数式方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21079960/

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