我想解析第一行的CSV文件并获得解析器列表,并且失败了。
经过一些简化后,我得到的代码我认为应该有效,但事实并非如此,我不明白为什么。
这是:
{-# LANGUAGE OverloadedStrings #-}
import Data.Text
import Data.Attoparsec.Text
import Control.Applicative
doTestSep :: [String] -> Parser [String]
doTestSep t = do
(endOfLine >> return t)
<|> (char ';' *> doTestParse t)
doTestParse :: [String] -> Parser [String]
doTestParse t = do
(string "<FIELD1>" *> doTestSep ("field1" : t))
<|> (string "<FIELD2>" *> doTestSep ("field2" : t))
test = parseOnly (doTestParse []) "<FIELD1>"
我打电话给test
,希望得到类似
> Right ["field1"]
但我得到了
> Left "Failed reading: takeWith"
我做错了什么?
答案 0 :(得分:0)
问题输入错误:我的标题行肯定会有\n
或\r\n
,endOfLine
会抓住,我的示例输入没有\n
在它。
工作版本是
test = parseOnly (doTestParse []) "<FIELD1>\n"