[Haskell-beginners] attoparsec and EOF

Arthur Clune arthur at clune.org
Tue Jun 5 11:56:50 CEST 2012


I'm writing a simple attoparsec parser, which works fine except for
handling end of file:

value :: Parser T.Text
value = takeWhile1 (/= ' ')

accessLogLine::Parser AccessLogLine
accessLogLine = do
    lts        <- number
    lelapsed   <- skipSpace *> number
    lclientIP  <- space *> value
    -- [... more like this ...]
    lhierarchy <- space *> value
    lmimeType  <- space *> takeWhile1 (not . isEndOfLine) <* endOfLine
    return $ AccessLogLine lts lelapsed lclientIP laction lsize
lmethod lurl lident lhierarchy lmimeType

accessLogParser::Parser [AccessLogLine]
accessLogParser = do
    result <- many accessLogLine
    return result

main = do
    contents <- (S.readFile "/home/arthur/Work/data/sample_acccess_log")
    print (A.maybeResult $ (A.parse accessLogParser $ decodeUtf8 contents))

This all works, but I need to cover the case where the final line in
the file does not end with '\n' and I can't get that to work

I found http://stackoverflow.com/questions/2988988/problem-with-incomplete-input-when-using-attoparsec,
which hints at what my problem is, but I can't see how to apply that
here.

Grateful for some hints.

Arthur

--
Arthur Clune arthur at clune.org



More information about the Beginners mailing list