@ ProgramNode (location: (0...52))
├── locals: [:a]
└── statements:
    @ StatementsNode (location: (0...52))
    └── body: (length: 4)
        ├── @ MatchRequiredNode (location: (0...12))
        │   ├── value:
        │   │   @ HashNode (location: (0...6))
        │   │   ├── opening_loc: (0...1) = "{"
        │   │   ├── elements: (length: 1)
        │   │   │   └── @ AssocNode (location: (1...5))
        │   │   │       ├── key:
        │   │   │       │   @ SymbolNode (location: (1...3))
        │   │   │       │   ├── opening_loc: ∅
        │   │   │       │   ├── value_loc: (1...2) = "a"
        │   │   │       │   ├── closing_loc: (2...3) = ":"
        │   │   │       │   └── unescaped: "a"
        │   │   │       ├── value:
        │   │   │       │   @ IntegerNode (location: (4...5))
        │   │   │       │   └── flags: decimal
        │   │   │       └── operator_loc: ∅
        │   │   └── closing_loc: (5...6) = "}"
        │   ├── pattern:
        │   │   @ HashPatternNode (location: (10...12))
        │   │   ├── constant: ∅
        │   │   ├── assocs: (length: 1)
        │   │   │   └── @ AssocNode (location: (10...12))
        │   │   │       ├── key:
        │   │   │       │   @ SymbolNode (location: (10...12))
        │   │   │       │   ├── opening_loc: ∅
        │   │   │       │   ├── value_loc: (10...11) = "a"
        │   │   │       │   ├── closing_loc: (11...12) = ":"
        │   │   │       │   └── unescaped: "a"
        │   │   │       ├── value: ∅
        │   │   │       └── operator_loc: ∅
        │   │   ├── kwrest: ∅
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (7...9) = "=>"
        ├── @ MatchRequiredNode (location: (13...25))
        │   ├── value:
        │   │   @ HashNode (location: (13...19))
        │   │   ├── opening_loc: (13...14) = "{"
        │   │   ├── elements: (length: 1)
        │   │   │   └── @ AssocNode (location: (14...18))
        │   │   │       ├── key:
        │   │   │       │   @ SymbolNode (location: (14...16))
        │   │   │       │   ├── opening_loc: ∅
        │   │   │       │   ├── value_loc: (14...15) = "a"
        │   │   │       │   ├── closing_loc: (15...16) = ":"
        │   │   │       │   └── unescaped: "a"
        │   │   │       ├── value:
        │   │   │       │   @ IntegerNode (location: (17...18))
        │   │   │       │   └── flags: decimal
        │   │   │       └── operator_loc: ∅
        │   │   └── closing_loc: (18...19) = "}"
        │   ├── pattern:
        │   │   @ HashPatternNode (location: (23...25))
        │   │   ├── constant: ∅
        │   │   ├── assocs: (length: 1)
        │   │   │   └── @ AssocNode (location: (23...25))
        │   │   │       ├── key:
        │   │   │       │   @ SymbolNode (location: (23...25))
        │   │   │       │   ├── opening_loc: ∅
        │   │   │       │   ├── value_loc: (23...24) = "a"
        │   │   │       │   ├── closing_loc: (24...25) = ":"
        │   │   │       │   └── unescaped: "a"
        │   │   │       ├── value: ∅
        │   │   │       └── operator_loc: ∅
        │   │   ├── kwrest: ∅
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (20...22) = "=>"
        ├── @ MatchPredicateNode (location: (27...39))
        │   ├── value:
        │   │   @ HashNode (location: (27...33))
        │   │   ├── opening_loc: (27...28) = "{"
        │   │   ├── elements: (length: 1)
        │   │   │   └── @ AssocNode (location: (28...32))
        │   │   │       ├── key:
        │   │   │       │   @ SymbolNode (location: (28...30))
        │   │   │       │   ├── opening_loc: ∅
        │   │   │       │   ├── value_loc: (28...29) = "a"
        │   │   │       │   ├── closing_loc: (29...30) = ":"
        │   │   │       │   └── unescaped: "a"
        │   │   │       ├── value:
        │   │   │       │   @ IntegerNode (location: (31...32))
        │   │   │       │   └── flags: decimal
        │   │   │       └── operator_loc: ∅
        │   │   └── closing_loc: (32...33) = "}"
        │   ├── pattern:
        │   │   @ HashPatternNode (location: (37...39))
        │   │   ├── constant: ∅
        │   │   ├── assocs: (length: 1)
        │   │   │   └── @ AssocNode (location: (37...39))
        │   │   │       ├── key:
        │   │   │       │   @ SymbolNode (location: (37...39))
        │   │   │       │   ├── opening_loc: ∅
        │   │   │       │   ├── value_loc: (37...38) = "a"
        │   │   │       │   ├── closing_loc: (38...39) = ":"
        │   │   │       │   └── unescaped: "a"
        │   │   │       ├── value: ∅
        │   │   │       └── operator_loc: ∅
        │   │   ├── kwrest: ∅
        │   │   ├── opening_loc: ∅
        │   │   └── closing_loc: ∅
        │   └── operator_loc: (34...36) = "in"
        └── @ MatchPredicateNode (location: (40...52))
            ├── value:
            │   @ HashNode (location: (40...46))
            │   ├── opening_loc: (40...41) = "{"
            │   ├── elements: (length: 1)
            │   │   └── @ AssocNode (location: (41...45))
            │   │       ├── key:
            │   │       │   @ SymbolNode (location: (41...43))
            │   │       │   ├── opening_loc: ∅
            │   │       │   ├── value_loc: (41...42) = "a"
            │   │       │   ├── closing_loc: (42...43) = ":"
            │   │       │   └── unescaped: "a"
            │   │       ├── value:
            │   │       │   @ IntegerNode (location: (44...45))
            │   │       │   └── flags: decimal
            │   │       └── operator_loc: ∅
            │   └── closing_loc: (45...46) = "}"
            ├── pattern:
            │   @ HashPatternNode (location: (50...52))
            │   ├── constant: ∅
            │   ├── assocs: (length: 1)
            │   │   └── @ AssocNode (location: (50...52))
            │   │       ├── key:
            │   │       │   @ SymbolNode (location: (50...52))
            │   │       │   ├── opening_loc: ∅
            │   │       │   ├── value_loc: (50...51) = "a"
            │   │       │   ├── closing_loc: (51...52) = ":"
            │   │       │   └── unescaped: "a"
            │   │       ├── value: ∅
            │   │       └── operator_loc: ∅
            │   ├── kwrest: ∅
            │   ├── opening_loc: ∅
            │   └── closing_loc: ∅
            └── operator_loc: (47...49) = "in"
