Parser is bad Alternative
Open
- Dominant language
- Haskell
- Stars
- 531
- Forks
- 98
- PR merge metrics
- No merged PRs in 30d
Description
`Alternative` is expected to be a monoid.
But for `Parser` we have:
``` haskell
import Prelude
import Data.Attoparsec.Text
import Control.Applicative
λ> parseOnly (fail "oops") "" == parseOnly (fail "oops" <|> empty) ""
False
λ> parseOnly (fail "oops") ""
Left "Failed reading: oops"
λ> parseOnly (fail "oops" <|> empty) ""
Left "Failed reading: empty"
```
Implications:
1. Adding `empty` erases useful error message.
2. User can't substitute `p1 <|> p2 <|> p3` with `asum [p1, p2, p3]` (`asum` always appends `empty` at the end).
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.