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.