bio-0.3.3: Bio/Util/Parsex.hs
-- | Lazy "many" combinator for Parsec.
-- Courtesy of Tomasz Zielonka.
module Bio.Util.Parsex where
import Text.ParserCombinators.Parsec
lazyMany :: GenParser Char () a -> SourceName -> [Char] -> [a]
lazyMany p file contents = lm state0
where
Right state0 = parse getParserState file contents
lm state = case parse p' "" "" of
Left err -> error (show err)
Right x -> x
where
p' = do
setParserState state
choice
[ do
eof
return []
, do
x <- p
state' <- getParserState
return (x : lm state')
]