我最近开始学习使用Parsec来编写解析器.我想知道以下是否属实:
尽管<*实现为(<*) = liftA2 const与parsec一起使用时,它与以下内容相同:
p1 <* p2 = do { r1 <- p1; _ <- p2; return r1 }
Run Code Online (Sandbox Code Playgroud)
它似乎是用秒差距操作时*>和>>是完全一样的,因为它们都扔掉第一分析器的结果呢?
一般来说,当一种既有的情况Applicative和Monad,它被认为是礼貌的那些情况下,在你建议的方式达成一致,至少在语义.在某些情况下,Applicative版本可能更有效(在某些情况下甚至渐近如此!),但对于parsec,至少情况并非如此; 来自消息来源:
instance Applicative.Applicative (ParsecT s u m) where
pure = return
(<*>) = ap -- TODO: Can this be optimized?
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |