haskell 如何将IO字符串转换为字符串[duplicate]

2ledvvac  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(190)
    • 此问题在此处已有答案**:

A Haskell function of type: IO String-> String(4个答案)
Converting IO Int to Int(3个答案)
2天前关闭。
我有一个包含以下数据的文本文件:

3
7 4
2 4 6
8 5 9 3

实际上,我想提取这些数据并以如下形式返回:

["3", "7 4", "2 4 6", "8 5 9 3"]

我使用readFile将整个文件作为单个字符串获取,然后使用lines根据'\n'字符解析单独的行。我尝试这样做,但问题是readFile返回IO String,但我希望使用String。以下是代码:

readLines :: FilePath -> [String]
readLines str = do
                  file <- readFile str
                  let list = lines (file :: String) 
                  list

我该如何处理这个问题?

qmb5sa22

qmb5sa221#

IO的目的是 * 防止 * 从I/O操作中提取数据,相反,您的函数 * 也 * 返回一个IO操作,当在 runtime 执行时,将产生一个值列表。

readLines :: FilePath -> IO [String]
readLines str = do
                   file <- readFile str
                   let list = lines (file :: String)
                   return list

或者更简单地说,因为IO(像任何单子一样)是函子,

readLines :: FilePath -> IO [String]
readLines str = lines <$> readFile str

相关问题