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 []