Haskell Bracket
bracket :: String -> Int
bracket s = go s []
where
go [] stack = if null stack then 1 else 0
go (c : cs) stack = case c of
')' -> pop '(' cs stack
']' -> pop '[' cs stack
'}' -> pop '{' cs stack
_ -> go cs (c : stack)
pop expected cs (top : rest)
| top == expected = go cs rest
pop _ _ _ = 0
This uses a simple stack approach: open brackets go in, matching closing brackets pop them out.