Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does Parsec not use Control.Applicative operators

Using Control.Applicative is very useful with Parsec, but you need to always hide <|> and similar objects as they conflict with Parsec's own:

import Control.Applicative hiding ((<|>), many, optional)
import Text.Parsec.Combinator
import Text.Parsec

Alternatively, as Antal S-Z points out, you can hide the Parsec version. However, as far as I can tell, this seems like an unnecessary restriction.

Why did parsec not simply implement these operators from Applicative?

like image 318
luispedro Avatar asked Apr 02 '13 15:04

luispedro


1 Answers

It's for historic reasons. The Parsec library predates the discovery of applicative functors and so it wasn't designed with them in mind. And I guess no one has taken the time to update Parsec to use Control.Applicative. There is no deep fundamental reason for not doing it.

like image 75
svenningsson Avatar answered Nov 16 '22 06:11

svenningsson