18

UsingControl.Applicative对 Parsec 非常有用,但是您需要始终隐藏<|>和类似的对象,因为它们与 Parsec 自己的冲突:

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

或者,正如 Antal SZ 指出的那样,您可以隐藏 Parsec 版本。然而,据我所知,这似乎是一个不必要的限制。

为什么 parsec 不简单地从 Applicative 实现这些运算符?

4

1 回答 1

20

这是出于历史原因。Parsec 库早于应用函子的发现,因此在设计时并未考虑到它们。而且我猜没有人花时间更新 Parsec 以使用Control.Applicative. 不这样做没有根本原因。

于 2013-04-02T15:53:17.510 回答