Haskell 为什么Parsec不使用Control.Applicative操作符
使用Haskell 为什么Parsec不使用Control.Applicative操作符,haskell,parsec,alternative-functor,Haskell,Parsec,Alternative Functor,使用Control.Applicative对Parsec非常有用,但您需要始终隐藏和类似对象,因为它们与Parsec自己的对象冲突: import Control.Applicative hiding ((<|>), many, optional) import Text.Parsec.Combinator import Text.Parsec 导入控件。应用程序隐藏((),多个,可选) 导入Text.Parsec.Combinator 导入文本.Parsec 或者,正如Anta
Control.Applicative
对Parsec非常有用,但您需要始终隐藏
和类似对象,因为它们与Parsec自己的对象冲突:
import Control.Applicative hiding ((<|>), many, optional)
import Text.Parsec.Combinator
import Text.Parsec
导入控件。应用程序隐藏((),多个,可选)
导入Text.Parsec.Combinator
导入文本.Parsec
或者,正如Antal S-Z指出的,您可以隐藏Parsec版本。然而,据我所知,这似乎是一个不必要的限制
为什么parsec不简单地从Applicative实现这些操作符?这是出于历史原因。Parsec库早于应用函子的发现,因此在设计时没有考虑它们。我猜没有人花时间更新Parsec以使用
Control.Applicative
。不这样做没有什么深层次的根本原因。请注意,您可以对Parsec隐藏运算符,从而只使用code.Tx中的普通运算符。我在主文本中添加了此注释我认为固定性也有问题,例如,Parsec的
具有infixr 1
,而Alternative的具有infixl 4
。