gpt4 book ai didi

Haskell IO(字符串)和字符串

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

我想编写函数并将结果放入字符串。

我想要功能:

read' :: FilePath -> String

我使用:

:t readFile
readFile :: FilePath -> IO String

我做:

read' :: IO ()
read' = do
str <- readFile "/home/shk/workspace/src/test.txt"
putStrLn str

我想问str是不是字符串?

我们知道:

:t putStrLn
putStrLn :: String -> IO ()

那为什么我不能:

read' :: String
read' = do
str <- readFile "/home/shk/workspace/lxmpp/src/test.txt"
str

我收到错误:

 Couldn't match expected type `[t0]' with actual type `IO String'
In the return type of a call of `readFile'
In a stmt of a 'do' expression:
str <- readFile "/home/shk/workspace/lxmpp/src/test.txt"
In the expression:
do { str <- readFile "/home/shk/workspace/src/test.txt";
str }

谢谢。

最佳答案

只是为了多争论一点,虽然其他答案完全正确,但我想强调一点:IO String 类型的东西不仅仅是类型系统不会的字符串让你直接到达。这是一种执行 I/O 来为您获取字符串的计算。将 readFile 应用于文件路径不会返回 String 值,就像将牛排放在绞肉机旁边会神奇地将它们变成汉堡包一样。

当你有这样的代码时:

foo = do let getStr = readFile "input.txt"
s1 <- getStr
s2 <- getStr
-- etc.

这并不意味着您“从 getStr 中取出字符串两次”。这意味着您要执行两次计算,并且很容易在两次之间得到不同的结果。

关于Haskell IO(字符串)和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6628748/

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