読者です 読者をやめる 読者になる 読者になる

Parsec カンマ区切り文字列のパース

Haskell

カンマ区切りで書かれた整数のリストをパースします。
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]