module Main where import System import Text.ParserCombinators.Parsec close "[" = "]" close "(" = ")" close "{" = "}" openParens = foldl1 (<|>) $ map string ["[", "(", "{"] closeParens p = string (close p) emptySequence = return () nonEmptySequence = do p <- openParens parentheses closeParens p parentheses parentheses = nonEmptySequence <|> emptySequence main = do args <- getArgs putStrLn (check (args !! 0)) where check input = case parse parentheses "stdin" input of Left err -> "False: " ++ show err Right _ -> "True"