我在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])]