fork(1) download
  1. -- http://i...content-available-to-author-only...e.com/1OIrFf
  2. import Data.List
  3. import Data.Maybe
  4. import Data.Map (keys, fromList, elems)
  5. import Data.Map as M (lookup)
  6. checkBraces "" = True
  7. checkBraces e = checkBrace e [] where
  8. braceToBraceMap = fromList [('(',')'), ('{','}'), ('[',']')]
  9. openBraces = keys braceToBraceMap
  10. closeBraces = elems braceToBraceMap
  11. braceToBrace brace = fromJust $ M.lookup brace braceToBraceMap
  12. checkBrace (c:e) s | elem c openBraces = checkBrace e ((braceToBrace c):s)
  13. checkBrace (c:e) (h:s) | (elem c closeBraces) && (h==c) = checkBrace e s
  14. checkBrace (_:e) _ = False
  15. checkBrace "" [] = True
  16. checkBrace "" _ = False
  17. main = mapM_ (print . checkBraces) bracesExpressionExamples where
  18. bracesExpressionExamples =
  19. [
  20. "({[{}]{}[]})",
  21. "({}}{[{}]{}[]})",
  22. "({[{}]{}[]}",
  23. "({[{}]{}]})",
  24. "({[{}{}[]})",
  25. "",
  26. "{}"
  27. ]
Success #stdin #stdout 0s 6268KB
stdin
Standard input is empty
stdout
True
False
False
False
False
True
True