カンマ区切りで書かれた整数のリストをパースします。
sepBy, sepBy1関数がちょうど「x区切りでyパーサーを実行する」ということができるので使えそうです。
C++のBoost.Spirit.Qiでいうところの、operator%()です。
import Text.Parsec import Text.Parsec.String parseInt :: Parser Int parseInt = do value <- many1 digit return (read value) parseText :: Parser [Int] parseText = parseInt `sepBy1` (char ',') run :: Show a => Parser a -> String -> IO () run p input = case (parse p "" input) of Left err -> do{ putStr "parse error at " ; print err } Right x -> print x main = do run parseText "123,456,789"
[123,456,789]