【发布时间】:2018-03-21 12:10:16
【问题描述】:
为什么我会为 parseCSV 函数输入 Either Text.Parsec.Error.ParseError CSV,尽管在文档中说输出是 Either ParseError CSV?我想将 CSV 文件导入 Haskell,然后从中导出特定列,然后计算该列的统计信息。
我导入一个 CSV 文件,例如:
data = parseCSV "/home/user/Haskell/data/data.csv"
noEmpRows = either (const []) (filter (\row -> 2 <= length row))
readIndex :: Read cell => Either a CSV -> Int -> [cell]
readIndex csv index = map (read . (!!index)) (noEmpRows csv)
然后当我想readIndex data 9 :: [Integer] 时出现错误。
我还尝试了一个函数parseCSVFromFile。
https://hackage.haskell.org/package/csv-0.1.2/docs/Text-CSV.html#t:CSV
提前感谢您的帮助。
【问题讨论】:
-
ParseError只是Text.Parsec.Error.ParseError的简称。但我想你的问题是关于错误的?它说什么? -
无法将预期类型“Either a0 CSV”与实际类型“String -> Either Text.Parsec.Error.ParseError CSV”匹配
-
parseCSV的类型是FilePath -> String -> Either ParseError CSV,所以data的类型(它不是一个有效的标识符,所以这段代码不可能编译)是String -> Either ParseError CSV,而readIndex的第一个参数应该是Either a CSV类型。 -
我是 Haskell 的新手,那么最终的解决方案是什么?我应该使用函数 parseCSVFromFile 还是如何重写现有函数? tnx
标签: haskell