我有使用 Haskell parsec 库的经验,在 Haskell 中,我们只是在任何地方都使用函数。
Rust nom 提供Parser
trait 并且任何实现它的类型都可以像instance.parse(intput)
.
但是像map
不返回的组合器Parser
pub fn map<I, O1, O2, E, F, G>(
first: F,
second: G
) -> impl FnMut(I) -> IResult<I, O2, E>
where
F: Parser<I, O1, E>,
G: FnMut(O1) -> O2,
我想知道,什么时候我们应该更喜欢Parser
trait,什么时候应该更喜欢impl FnMut(I) -> IResult<I, O2, E>
.
我的猜测是,我们总是更喜欢使用Parser
trait 作为参数(所以我们对参数的限制较少)和impl FnMut
返回(这样用户使用起来更方便)。