Haskell 带IO的递归函数

Haskell 带IO的递归函数,haskell,recursion,Haskell,Recursion,我在下一段代码中遇到了问题,我们的想法是创建一个函数,该函数返回一个元组目录文件中的单词列表 gainData:: [FilePath] -> IO [([String],String)] gainData[] = [] gainData(xz:xc) = do temp <- readFileP xz return ((temp,xz) : gainData xc) 例如,我想 [(["word","word1"],"fileAddress"),(["word",

我在下一段代码中遇到了问题,我们的想法是创建一个函数,该函数返回一个元组目录文件中的单词列表

gainData:: [FilePath] -> IO [([String],String)]
gainData[] = []
gainData(xz:xc) = do
    temp <- readFileP xz
    return ((temp,xz) : gainData xc)
例如,我想

[(["word","word1"],"fileAddress"),(["word","word1"],"fileAddress2")]
我不知道有什么问题,有人能告诉我吗?谢谢。

你不能做:

return ((temp,xz) : gainData xc)
gainData
函数返回一个
IO[something]
而不仅仅是
[something]
。 您必须首先提取返回的值:

res <- gainData xc
return $ (temp,xz) : res

return
的“反面”,我尝试在程序末尾添加这两行,现在它显示的错误与表达式中的预期类型
IO[([String],String)]与实际类型
[a0]'不匹配:[]Gainanda[]有什么问题?@seyrengille这是相反的错误
gainanda
必须返回一个
IO[something]
而不仅仅是
[something]
,因此请使用
return[]
而不是
[]
。非常感谢您的帮助
res <- gainData xc
return $ (temp,xz) : res
gainData [] = return []