gpt4 book ai didi

haskell : not getting this with IO [FilePath]

转载 作者:行者123 更新时间:2023-12-02 02:51:21 25 4
gpt4 key购买 nike

在 ghci 中完成教程等工作 - 到目前为止一切都很好。不过,我完全错过了一些东西:我的函数构建了一个 IO [FilePath] “事物”。在 ghci 中它是这样的:
["xml","velocity.log.1","velocity.log"] (为简洁起见,列表被截断)

我看到该功能正在做我想做的事。下一步是我想自己“打印”出来。

我做什么都不能让我打印结果。我不想在 Haskell 中延续我的 Java/C#/Python 习惯——这没有意义。我相信 Haskell 有充分的理由做不同的事情,但我看不出如何从这个函数中获得(有限的)值(value)。

module Main (
main
) where

import RecursiveContents

main = do putStrLn "this"
getRecursiveContents "/home/xyz/myDir"

这行得通。但是如果我想让 main 打印 getRecursiveContents "/home/xyz/myDir" 的结果怎么办? ?

在 ghci 中,我可以输入/粘贴 getRecursiveContents "/home/xyz/myDir"东西喷出来了——我自己要怎么做才能打印出来?

如果我做 :
let xyz = getRecursiveContents "/home/xyz/myDir"在 ghci 中,我唯一能做的就是 xyz是类型: xyz <enter>看看结果。

我不能做头、尾等。我知道 IO [FilePath]是特殊的东西,与数组或列表不同 [a] - 但我所做的一切都无法帮助我理解如何克服这一点。

我一定遗漏了一些东西——我在 Learn You a Haskell 中找不到的东西, 或 Real World Haskell .我不是在正确的地方进行 rtfm-ing 吗?

任何反馈或兴奋剂都表示赞赏。

最佳答案

要获取 IO 操作的结果(即运行操作),您需要绑定(bind) IO 的结果。计算变量:

假设:

getRecursiveContents :: FilePath -> IO String

然后你可以打印结果:
main = do str <- getRecursiveContents "/home/xyz/myDir"
print str

显然这只是一个例子,但是当函数真的只有两行时,人们通常不会使用 do符号并避免显式命名 str 的中间变量:
main = getRecursiveContents "/home/xyz/myDir" >>= print

关于 haskell : not getting this with IO [FilePath],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006374/

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