   public func traverse(_ topLevelDecl: TopLevelDeclaration) throws -> Bool {
     guard try visit(topLevelDecl) else { return false }
 
-    for stmt in topLevelDecl.statements {
-      guard try traverse(stmt) else { return false }
-    }
-
-    return true
+    return try traverse(topLevelDecl.statements)
   }
 
   public func traverse(_ codeBlock: CodeBlock) throws -> Bool {
     guard try visit(codeBlock) else { return false }
 
-    for stmt in codeBlock.statements {
-      guard try traverse(stmt) else { return false }
-    }
-
-    return true
+    return try traverse(codeBlock.statements)
   }
 
   // Declarations

  }

  public func traverse(_ stmt: ForInStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: GuardStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: IfStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: LabeledStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: RepeatWhileStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: ReturnStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: SwitchStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: ThrowStatement) throws -> Bool {
    return try visit(stmt)
  }

  public func traverse(_ stmt: WhileStatement) throws -> Bool {
    return try visit(stmt)
  }

  // Expressions

    }
  }

  private func traverse(_ statements: Statements) throws -> Bool {
    for stmt in statements {
      guard try traverse(stmt) else { return false }
    }
    return true
  }

  public func traverse(_ stmt: BreakStatement) throws -> Bool {
    return try visit(stmt)
  }
