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