【问题标题】:Implementing skipWhile1 in attoparsec在 attoparsec 中实现 skipWhile1
【发布时间】:2014-03-24 23:35:11
【问题描述】:

Attoparsec 提供了函数takeWhile1 至少消耗一个字符。

但是,skipWhile 没有模拟。 skipWhile1这个功能怎么实现?

注意:这个问题故意显示没有研究工作,因为它是问答式回答的。

【问题讨论】:

    标签: haskell attoparsec


    【解决方案1】:

    另一种可能的实现方式:

    import Control.Applicative
    
    skipWhile1 p = skip p *> skipWhile p
    

    这实际上可能比@Uli 的答案更快,因为takeWhile 构建了一个结果字符串,而skipWhile 没有。懒惰可能会使它们等效(即,如果您不使用它,takeWhile 可能实际上不会构建字符串);我目前无法测试来验证这一点。

    【讨论】:

      【解决方案2】:

      您可以将Control.Monad.voidtakeWhile1 一起使用来简单地忽略结果:

      import Data.Attoparsec.Char8
      import Control.Monad (void)
      
      skipWhile1 :: (Char -> Bool) -> Parser ()
      skipWhile1 = void . takeWhile1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多