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