リストのフラット化
http://karetta.jp/article/blog/oneline/013581より。今ひとつ題意が掴めてません。あとParsec使ったぜ?
import Text.ParserCombinators.Parsec data Exp = Exp Char | End type Row = [Exp] instance Show Exp where show (Exp c) = c:" " show End = "" s_exp = do exs <- (try (char '0') >> return [Exp '0']) <|> s_list return exs s_list = do char '(' row <- s_row char ')' return row s_row = do ex1 <- s_exp row <- (try spaces >> s_row) <|> return [End] return $ ex1 ++ row t_exp = do ex1 <- t_val row <- (try spaces >> t_exp) <|> return [End] return $ ex1:row t_val = (try (char '0') >> return (Exp '0')) <|> (char '1' >> return (Exp '1')) s2t = init . concatMap show . run s_exp run f s = case runParser f "" "" s of Right x -> x Left _ -> error "Parse Error!"