[Haskell-cafe] All-fail case in asum

Юрий Сыровецкий (Yuriy Syrovetskiy) cblp at cblp.su
Fri Jun 10 14:37:41 UTC 2016


I want to define some parser such way:

    myParser = tryA <|> tryB <|> fail "input must be either A or B"

It works. But then I want to rewrite it with asum:

    myParser = asum [tryA, tryB, fail "must be A or B"]

It works, but the wrong way. Instead of my error it writes "empty".
Just "empty".

It is so because in base library

    asum = foldr (<|>) empty

What if it was defined

    asum [] = empty
    asum [x:xs] = x <|> asum xs

It would help me with my parser. But what can this break? Why isn't
this done yet?

Yuriy Syrovetskiy, http://cblp.su

More information about the Haskell-Cafe mailing list