【Haskell】Parsecで文字列置換してみた

青木峰郎著「ふつうのHaskellプログラミング」を読み終わったので、Parsecで文字列置換するプログラムをつくってみました。

「yyyy/mm/dd」→「日付」と置換するプログラムです。

import Text.Parsec
import Text.Parsec.String

main :: IO ()
main = do cs <- getContents
          putStr $ doSomething cs

date :: Parser String
date = do fourDigit
          char '/'
          twoDigit
          char '/'
          twoDigit
          return "日付"

fourDigit :: Parser String
fourDigit = do d1 <- digit
               d2 <- digit
               d3 <- digit
               d4 <- digit
               return [d1, d2, d3, d4]

twoDigit :: Parser String
twoDigit = do d1 <- digit
              d2 <- digit
              return [d1, d2]

text :: Parser [String]
text = many component
    where
        component = do date <- try(date)
                       return date
                <|> do c <- anyChar
                       return [c]

doSomething :: String -> String
doSomething cs = case parse text "" cs of
    Right xs -> concat xs
    Left err -> ""