将文件读入字符串haskell

Ais*_*ius 2 haskell ios

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

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

getString ::IO String
getString = readFile "Input.txt"
Run Code Online (Sandbox Code Playgroud)

相当简单,但返回IO String而不是String,我在制作s<- readFile "filename"工作时遇到了麻烦 .我真正想要的只是简单的函数,它返回String中的文件然后我可以处理该字符串中的数据.

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

Rei*_*chs 7

没有一个功能可以变成IO String一个String.您可以使用这样的符号*:

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

doSomethingWith :: String -> IO ()
doSomethingWith str = putStrLn str
Run Code Online (Sandbox Code Playgroud)

但你只需要访问s作为String该做块内,或在被应用到的功能s,像doSomethingWith.


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