Haskell 什么';s Text.ParserCombinators.Parsec和Text.Parsec之间的差异

Haskell 什么';s Text.ParserCombinators.Parsec和Text.Parsec之间的差异,haskell,parsec,Haskell,Parsec,它们是一样的吗?我相信后者是Parsec 2的向后兼容层,用较新的API实现。目前,Parsec有两个广泛使用的主要版本:Parsec 2和 解析C 3 我的建议只是使用最新版本的Parsec 3。但是如果你想 认真选择,继续读下去 parsec3中的新特性 单子变压器 Parsec3引入了一个monad转换器,ParsecT,可用于组合 解析与其他一元效应 溪流 尽管Parsec2允许您选择令牌类型(这在您 如果要将词法分析与解析分离,标记总是 排列成列表。列表可能不是最有效的存储数据结构 大

它们是一样的吗?

我相信后者是Parsec 2的向后兼容层,用较新的API实现。

目前,Parsec有两个广泛使用的主要版本:Parsec 2和 解析C 3

我的建议只是使用最新版本的Parsec 3。但是如果你想 认真选择,继续读下去

parsec3中的新特性 单子变压器 Parsec3引入了一个monad转换器,
ParsecT
,可用于组合 解析与其他一元效应

溪流 尽管Parsec2允许您选择令牌类型(这在您 如果要将词法分析与解析分离,标记总是 排列成列表。列表可能不是最有效的存储数据结构 大文本

Parsec3可以处理任意流——具有如下列表的数据结构 界面您可以定义自己的流,但是Parsec3还包括一个流行的 以及基于ByteString(对于基于
Char
)的高效流实现 解析),通过模块
Text.Parsec.ByteString
Text.Parsec.ByteString.Lazy

选择ParseC2的原因 需要的扩展更少 Parsec 3提供的高级功能不是免费的;实施它们 需要几个语言扩展

这两个版本都不是Haskell-2010(即都使用扩展),但是 Parsec2比Parsec3使用更少的扩展,因此任何给定的编译器 可以编译的Parsec 2高于Parsec 3

此时,两个版本都可以使用GHC,而Parsec2也可以使用 使用JHC构建,并作为JHC的标准库之一包含

表演 最初(即从3.0版开始),Parsec 3比 解析C 2。但是,, 从版本3.1开始,Parsec3只比Parsec2稍微慢一点 (基准:,)

兼容层 可以在Parsec3中“重新实现”所有的Parsec2API。这 兼容层由模块层次结构下的Parsec 3包提供
Text.parsercompbinators.Parsec
(与Parsec2使用的层次结构相同), 而新的Parsec3API在
Text.Parsec
层次结构下可用


这意味着您可以使用Parsec 3作为Parsec 2的替代品。

关于变压器的链接现在似乎失败了。感谢您的通知,我已经删除了它。是Text.Parsec==Parsec 3和Text.ParserCombinators.Parsec==Parsec 2吗?
Text
    Text.Parsec
        Text.Parsec.ByteString
            Text.Parsec.ByteString.Lazy
        Text.Parsec.Char
        Text.Parsec.Combinator
        Text.Parsec.Error
        Text.Parsec.Expr
        Text.Parsec.Language
        Text.Parsec.Perm
        Text.Parsec.Pos
        Text.Parsec.Prim
        Text.Parsec.String
        Text.Parsec.Token
    ParserCombinators
        Text.ParserCombinators.Parsec
            Text.ParserCombinators.Parsec.Char
            Text.ParserCombinators.Parsec.Combinator
            Text.ParserCombinators.Parsec.Error
            Text.ParserCombinators.Parsec.Expr
            Text.ParserCombinators.Parsec.Language
            Text.ParserCombinators.Parsec.Perm
            Text.ParserCombinators.Parsec.Pos
            Text.ParserCombinators.Parsec.Prim
            Text.ParserCombinators.Parsec.Token