Maybe this is something you do not even want to use a parser combinator library for. The package
http://hackage.haskell.org/packages/archive/list-grouping/0.1.1/doc/html/Data-List-Grouping.html contains a function breakBefore, so you can write main = do inp <- readFile ... let result = map mkSection . breakBefore ((= ':').last)). lines $ inp mkSection (l:ll) = Section (Top l) (Contents ll) Doaitse On Mar 3, 2013, at 16:44 , Immanuel Normann <immanuel.norm...@googlemail.com> wrote: > Hi, > > I am trying to parse a semi structured text with parsec that basically should > identify sections. Each section starts with a headline and has an > unstructured content - that's all. For instance, consider the following > example text (inside the dashed lines): > > --------------------------- > > top 1: > > some text ... bla > > top 2: > > more text ... bla bla > > > --------------------------- > > This should be parsed into a structure like this: > > [Section (Top 1) (Content "some text ... bla"), Section (Top 1) (Content > "more text ... bla")] > > Say, I have a parser "headline", but the content after a headline could be > anything that is different from what "headline" parses. > How could the "section" parser making use of "headline" look like? > My idea would be to use the "manyTill" combinator, but I don"t find an easy > solution. > > Many thanks for any hint > > Immanuel > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe