<* 是否等同于以下关于秒差距的内容?

is <* equivalent to the following with respect to parsec?

我最近开始学习使用 Parsec 来编写解析器。我想知道以下是否属实:

即使 <* 实现为 (<*) = liftA2 const,当与 parsec 一起使用时,它是否与:

相同
p1 <* p2 = do { r1 <- p1; _ <- p2; return r1 }

似乎在使用 parsec 时,运算符 *>>> 完全相同,因为它们都丢弃了第一个解析器的结果?

通常,当一个类型同时具有 ApplicativeMonad 的实例时,这些实例至少在语义上同意您建议的方式被认为是礼貌的。在某些情况下,Applicative 版本可能更有效(在某些情况下甚至渐进地如此!),但至少对于 parsec 而言并非如此;来自来源:

instance Applicative.Applicative (ParsecT s u m) where
    pure = return
    (<*>) = ap -- TODO: Can this be optimized?