내 유형 :에서 첫 번째 줄을 건너 뛰는 파이프 - attoparsec
data Test = Test {
a :: Int,
b :: Int
} deriving (Show)
내 파서 :
이testParser :: Parser Test
testParser = do
a <- decimal
tab
b <- decimal
return $ Test a b
tab = char '\t'
이제 첫 줄을 건너 뛸하기 위해, 나는 같은 것을 할 :
import qualified System.IO as IO
parser :: Parser Test
parser = manyTill anyChar endOfLine *> testParser
main = IO.withFile testFile IO.ReadMode $ \testHandle -> runEffect $
for (parsed (parser <* endOfLine) (fromHandle testHandle)) (lift . print)
그러나 위의 parser
함수는 모든 대체 링크를 건너 뜁니다 (이는 명백합니다). 파이프 생태계 (Producer
값을 생성해야합니다)와 같은 방식으로 첫 번째 줄을 건너 뛰는 방법. 이것은 내가 원하지 않는 명백한 해결책입니다 (아래 코드는 testParser를 다음과 같이 수정 한 경우에만 작동합니다. 그것은 하나의 값 대신 전체 [Test]
을 반환하기 때문에) 줄 바꿈을 읽어
tests :: Parser [Test]
tests = manyTill anyChar endOfLine *>
many1 testParser
어떤 아이디어이 문제를 해결하기 위해? 첫 번째 줄은 유효한 Test
를 포함하지 않는 경우
을 그건 그렇고, 당신은 Test'와'Link''전환 할 수 있습니다. – Zeta
@Zeta 죄송합니다. 제 실수입니다. 'Test'가되도록 업데이트되었습니다. (원래의 데이터 구조는 사실 더 많은 필드를 가진'Link'입니다.이 질문에 대해서는'Test'로 간단하게했습니다.) – Sibi