haskell:在Parsec IO中获取数据

haskell:在Parsec IO中获取数据,haskell,extract,monads,Haskell,Extract,Monads,我已通过Parsec和Data.csv读取csv文件: import Text.ParserCombinators.Parsec -- package MissingH import Data.CSV import Data.Either.Utils myFile <- parseFromFile csvFile path 现在我想在我的清单上做很多事情。 首先,我需要在它上面映射一个分割,因为我的csv是选项卡分隔的 如何从该类型结构中提取列表? 我已经找到了 导入数据。或者 fro

我已通过Parsec和Data.csv读取csv文件:

import Text.ParserCombinators.Parsec
-- package MissingH
import Data.CSV 
import Data.Either.Utils
myFile <- parseFromFile csvFile path
现在我想在我的清单上做很多事情。 首先,我需要在它上面映射一个分割,因为我的csv是选项卡分隔的

如何从该类型结构中提取列表?

我已经找到了

导入数据。或者
fromRights

您可以在其上进行模式匹配*-您可以忽略
IO
层,因为您已经在I/O单子中工作:

main = do
  myFile <- parseFromFile csvFile path
  case myFile of
    Left _ -> error "parse error" -- do something useful here
    Right list -> print $ doMyProcessing list -- process your list here
main=do
myFile错误“parse error”--在此处执行一些有用的操作
右列表->打印$doMyProcessing列表--在此处处理您的列表

*我不确定你的知识水平,所以我给出了一个相当简单的答案。如果需要,请询问更多解释。

您是否自己实现了
csvFile
?如果是的话,告诉我们怎么做。否则,请告诉我们您是从哪里获得的(编辑您的问题并添加您的导入)。使用
fmap
>=
@rightfold,您可以给出一个应用程序示例吗?@NicolasAntor据我所知,Hackage上没有名为
Data.CSV
的模块。但是,也有一些功能和模块。你是说那两个人中的一个吗?此外,
myFile是的,在这里它可以工作。但是如果我想使用monad之外的其他函数,你不能“走出”i/O monad(这是故意的)。您可以为另一个函数(例如示例中的
doMyProcessing
)提供一个纯值
list
,或者返回一个
IO[[String]]
,并在I/O monad中的另一个函数中使用它。因此,我不能在IO中使用String->Char->[String]类型的函数。@NicolasAntor IO意味着这实际上不是任何列表,但是可以执行一个操作来获取列表。这就是IO,动作的单子。@Nicolasanto或另一种思考方式是,如何从读卡器单子中获取数据?
main = do
  myFile <- parseFromFile csvFile path
  case myFile of
    Left _ -> error "parse error" -- do something useful here
    Right list -> print $ doMyProcessing list -- process your list here