我在Haskell中编写了一堆代码来创建文本索引。顶部函数如下所示:

index :: String -> [(String, [Integer])]
index a = [...]

现在,我想给这个函数一个从文件中读取的字符串:
index readFile "input.txt"

这将不起作用,因为readFile的类型为FilePath-> IO String。



我看到错误,但是找不到任何类型的函数:
IO String -> String

我想成功的关键在于某些Monad,但我找不到解决问题的方法。

最佳答案

您可以轻松编写一个调用readFile Action 的函数,然后将结果传递给索引函数。

readAndIndex fileName = do
    text <- readFile fileName
    return $ index text

但是,IO monad会污染使用它的所有东西,因此此函数的类型为:
readAndIndex :: FilePath -> IO [(String, [Integer])]

09-10 03:33
查看更多