Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 为什么Parsec不使用Control.Applicative操作符_Haskell_Parsec_Alternative Functor - Fatal编程技术网

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