将文件读入字符串 haskell

Reading file into string haskell

相当简单的问题,但我很难克服。 None 我在网上找到的例子有效,不确定是不是因为它们已经过时并且 IO 中的某些内容在过去 2-3 年中发生了变化,或者我遗漏了一些明显的东西。

我知道用 readFile returns IO String 读取文件并没有简单的方法来摆脱它,但据说可以简单地将文件读入正常 String 是在命令行中工作的 s<- readFile "filename",但我不能让它在函数中工作。

getString ::IO String
getString = readFile "Input.txt"

相当简单,但是 returns IO String 而不是字符串,我在使 s<- readFile "filename" 工作时遇到了问题。 我真正想要的只是一个简单的函数,即 returns 文件在一个字符串中,然后我可以处理该字符串中的数据。

Ps 我也希望看到简单的方法来逐行读取文件功能,因为所有示例似乎都非常复杂,因为它们应该做什么以及执行这些操作有多么容易在任何命令式编程语言中。

没有将 IO String 转换为 String 的函数。您可以像这样使用 do 表示法 *:

main = do
  s <- readFile "somefile.txt"
  doSomethingWith s

doSomethingWith :: String -> IO ()
doSomethingWith str = putStrLn str

但您只能将 s 作为 do 块内的 String 访问,或者在应用于 s 的函数中访问,例如 doSomethingWith.


* 您还可以使用等效的 desugared 版本,main = readFile "someFile.txt" >>= \s -> doSomethingWith s.