<p>This question immediately reminded me of the <a href="http://arxiv.org/abs/1010.5023" rel="nofollow">Yacc is dead</a> / <a href="http://research.swtch.com/yaccalive" rel="nofollow">No, it's not</a> debate from the end of 2010. The authors of the <em>Yacc is dead</em> paper provide a <a href="http://www.ucombinator.org/projects/parsing/" rel="nofollow">library</a> in Scala (unmaintained),  Haskell and Racket. In the <em>Yacc is alive</em> response, Russ Cox points out that the code runs in exponential time for ambiguous grammars.</p>

<p>It's well-known that it is possible to parse ambiguous grammars in <code>O(n^3)</code>, although obviously it can take exponential time to enumerate all the parse trees in the case that there are exponentially many of them -- and there will be in the case of <code>x1 + x2 + x3 ... + xn</code>. <code>bison</code> implements the GLR algorithm which does so; unfortunately, while <code>bison</code> is certainly mature (if not actually moribund), it is written neither in Haskell nor in Scala.</p>

<p>Daniel Spiewak implemented a GLL parser in Scala IIRC, but last time I looked at it, it suffered from some performance issues. So I'm not sure that it could be described as mature, either.</p>
Parser library that can handle ambiguity
<p>I'm looking for a mature parser library, either for Scala or Haskell.
The most important point is, that the library can handle ambiguity. 
If an expression is ambiguous, I want every possible abstract syntax tree, that matches the expression.
Simple example: The expression <strong>a ⊗ b ⊗ c</strong> can be seen as <strong>(a ⊗ b) ⊗ c</strong> or <strong>a ⊗ (b ⊗ c)</strong>, and I need both variants. 
Thanks!</p>