这两种函数如何工作并在Haskell中正确使用?

时间:2015-10-10 11:54:23

标签: haskell error-handling either

我正在尝试用Learning Haskell Data Analysis学习Haskell(我之前读过其他一些东西,例如Learn You a Haskell ......)。有一个列表可以解析和修改csv数据,这些数据与本书提出的方式不同,即。它通过一个错误。不幸的是,我不能很好地纠正上市。我不知何故得到了什么不起作用,但不知道正确的版本会是什么样子。我也没有真正找到使用hello.ts函数的表达式示例,看看我是否可以从中获取正确的版本

either

将其加载到ghci时得到的错误消息是:

module LearningDataAnalysis02 where

import Data.List
import Data.Either
import Text.CSV

-- compute the average of List values
average' :: Fractional a => [a] -> a
average' xs = sum xs / genericLength xs

readColumn :: [String] -> [Double]
readColumn xs = map read xs

getColumnInCSV :: CSV -> String -> Either String Integer
getColumnInCSV csv columnName = case lookupResponse of
    Nothing -> Left "The column does not exist in this csv file."
    Just x  -> Right (fromIntegral x)
  where
    lookupResponse = findIndex (== columnName) (head csv)

applyToColumnInCSV :: ([String] -> b) -> CSV -> String -> Either String b
applyToColumnInCSV func csv column = either
    Left
    Right . func . elements columnIndex
  where
    columnIndex = getColumnInCSV csv column
    nfieldsInFile = length $ head csv
    records = tail $ filter (\record -> nfieldsInFile == length record) csv
    elements ci = map (\record -> genericIndex record ci) records

有没有人这么善良,可以向我解释我如何修改列表以使其发挥作用以及为什么它不像图书建议的那样工作?

0 个答案:

没有答案