相当简单的问题,但是我很难克服。我在网上找到的所有例子都没有,不确定它是否因为它们已经过时而IO中的某些内容在过去的2 - 3年内发生了变化,或者我遗漏了一些明显的东西。
我知道用readFile
读取文件会返回IO String
,并且没有简单的方法可以摆脱它,但据说将文件读入普通String
的简单方法是{{1它在命令行中工作,但我不能让它在函数中工作。
s<- readFile "filename"
相当简单,但返回getString ::IO String
getString = readFile "Input.txt"
而不是String,我无法使IO String
工作。
我真正想要的只是简单的函数,它返回String中的文件然后我可以处理该字符串中的数据。
Ps我很想看到逐行读取文件的简单方法,因为所有示例似乎都非常复杂,因为它们应该做什么以及在任何命令式编程语言中执行这些操作是多么容易。
答案 0 :(得分:6)
没有将IO String
转换为String
的功能。您可以使用这样的符号*:
main = do
s <- readFile "somefile.txt"
doSomethingWith s
doSomethingWith :: String -> IO ()
doSomethingWith str = putStrLn str
但您只能在do块内或s
中应用String
作为s
访问doSomethingWith
,如main = readFile "someFile.txt" >>= \s -> doSomethingWith s
。
*您也可以使用等效的 desugared 版本{{1}}。