Почему Parsec не использует операторы Control.Applicative
Использование Control.Applicative
очень полезно с Parsec, но вам нужно всегда скрывать <|>
и подобные объекты, поскольку они конфликтуют с Parsec own:
import Control.Applicative hiding ((<|>), many, optional)
import Text.Parsec.Combinator
import Text.Parsec
В качестве альтернативы, как указывает Antal S-Z, вы можете скрыть версию Parsec. Однако, насколько я могу судить, это кажется ненужным ограничением.
Почему parsec не просто реализовал эти операторы из Application?
Ответы
Ответ 1
Это по историческим причинам. Библиотека Parsec предшествует открытию аппликативных функторов, и поэтому она не была разработана с их учетом. И я думаю, никто не нашел времени, чтобы обновить Parsec, чтобы использовать Control.Applicative
. Нет глубокой фундаментальной причины не делать этого.