参考原文:
Apply parser n times vs on the first n characters (Haskell)
在Haskell中,完成字符串解析通常有两种方法:将解析器应用于字符串的前n个字符,或者在解析器上应用n次。
第一种方法的代码示例:
import Text.Parsec
import Text.Parsec.String
-- Parses the first n characters of a string
parseN :: Int -> Parser String
parseN n = count n anyChar
main :: IO ()
main = do
let input = "abcde"
case parse (parseN 3) "" input of
Left err -> print err
Right r -> print r -- "abc"
第二种方法的代码示例:
import Text.Parsec
import Text.Parsec.String
-- Parses the given parser n times
parseN :: Int -> Parser a -> Parser [a]
parseN n p = count n p
main :: IO ()
main = do
let input = "abcabcabc"
case parse (parseN 3 (char 'a')) "" input of
Left err -> print err
Right r -> print r -- ['a', 'a', 'a']
这两种方法都有其优缺点,具体要根据实际使用情况来选择。