MCXI

http://d.hatena.ne.jp/mzp/20070608 である。この程度のパーシングに Parsec を使うのもなぁとは思うが、あえて使ってみる。

import Text.ParserCombinators.Parsec
import Data.Char
import System
mcxi = do m <- try (p 'm') <|> return 0
          c <- try (p 'c') <|> return 0
          x <- try (p 'x') <|> return 0
          i <- try (p 'i') <|> return 0
          return $ m*1000+c*100+x*10+i
p c = do d <- digit <|> return '1'
         char c
         return $ digitToInt d
main = do (arg:_) <- getArgs
          case parse mcxi "" arg of
            Left _  -> putStrLn "Parse Error"
            Right v -> print v