(command.If
  arms: [
    (if_arm
      cond: [
        (command.Sentence
          child: 
            (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name __mal_printer_included__))} {(Lit_Other ']')})
          terminator: <Op_Semi ';'>
        )
      ]
      action: [
        (command.Assignment
          keyword: Assign_None
          pairs: [
            (assign_pair
              lhs: (lhs_expr.LhsName name:__mal_printer_included spids:[27])
              op: Equal
              rhs: {(true)}
              spids: [27]
            )
          ]
          spids: [27]
        )
        (C {(source)} 
          {
            (word_part.CommandSubPart
              command_list: (command.CommandList children:[(C {(dirname)} {($ VSub_Number '$0')})])
              left_token: <Left_CommandSub '$('>
              spids: [33 37]
            ) (/types.sh)
          }
        )
        (command.FuncDef
          name: _pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:print_readably spids:[51])
                      op: Equal
                      rhs: {(DQ (${ VSub_Number 2))}
                      spids: [51]
                    )
                  ]
                  spids: [49]
                )
                (command.Sentence
                  child: (C {(_obj_type)} {(DQ (${ VSub_Number 1))})
                  terminator: <Op_Semi ';'>
                )
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:ot spids:[70])
                      op: Equal
                      rhs: {(DQ (${ VSub_Name r))}
                      spids: [70]
                    )
                  ]
                  spids: [68]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.BoolUnary
                                  op_id: BoolUnary_z
                                  child: {(DQ (${ VSub_Name ot))}
                                )
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (C {(_error)} {(DQ ("_pr_str failed on '") (${ VSub_Number 1) ("'"))})
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:r spids:[107])
                              op: Equal
                              rhs: {(DQ ('<') (${ VSub_Number 1) ('>'))}
                              spids: [107]
                            )
                          ]
                          spids: [107]
                        )
                      ]
                      spids: [16777215 93]
                    )
                  ]
                  else_action: [
                    (C {(eval)} {(${ VSub_Name ot) (_pr_str)} {(DQ (${ VSub_Number 1))} 
                      {(DQ (${ VSub_Name print_readably))}
                    )
                  ]
                  spids: [117 140]
                )
              ]
              spids: [46]
            )
          spids: [41 45]
        )
        (command.FuncDef
          name: nil_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:r spids:[152])
                          op: Equal
                          rhs: {(DQ (nil))}
                          spids: [152]
                        )
                      ]
                      spids: [152]
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              spids: [150]
            )
          spids: [145 149]
        )
        (command.FuncDef
          name: true_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:r spids:[167])
                          op: Equal
                          rhs: {(DQ (true))}
                          spids: [167]
                        )
                      ]
                      spids: [167]
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              spids: [165]
            )
          spids: [160 164]
        )
        (command.FuncDef
          name: false_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:r spids:[182])
                          op: Equal
                          rhs: {(DQ (false))}
                          spids: [182]
                        )
                      ]
                      spids: [182]
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              spids: [180]
            )
          spids: [175 179]
        )
        (command.FuncDef
          name: number_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:r spids:[198])
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (word_part.BracedVarSub
                                  token: <VSub_Name ANON>
                                  bracket_op: 
                                    (bracket_op.ArrayIndex
                                      expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 1))})
                                    )
                                  spids: [200 209]
                                )
                              )
                            }
                          spids: [198]
                        )
                      ]
                      spids: [198]
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              spids: [196]
            )
          spids: [191 195]
        )
        (command.FuncDef
          name: symbol_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:r spids:[224])
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (word_part.BracedVarSub
                              token: <VSub_Name ANON>
                              bracket_op: 
                                (bracket_op.ArrayIndex
                                  expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 1))})
                                )
                              spids: [226 235]
                            )
                          )
                        }
                      spids: [224]
                    )
                  ]
                  spids: [224]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:r spids:[239])
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (word_part.BracedVarSub
                              token: <VSub_Name r>
                              suffix_op: 
                                (suffix_op.PatSub
                                  pat: {(__STAR__)}
                                  replace: {('*')}
                                  replace_mode: Lit_Slash
                                  spids: [243]
                                )
                              spids: [241 248]
                            )
                          )
                        }
                      spids: [239]
                    )
                  ]
                  spids: [239]
                )
              ]
              spids: [221]
            )
          spids: [216 220]
        )
        (command.FuncDef
          name: keyword_pr_str
          body: 
            (command.BraceGroup
              children: [(C {(string_pr_str)} {(DQ (${ VSub_Number 1))})]
              spids: [259]
            )
          spids: [254 258]
        )
        (command.FuncDef
          name: _raw_string_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:s spids:[283])
                      op: Equal
                      rhs: {(DQ (${ VSub_Number 1))}
                      spids: [283]
                    )
                  ]
                  spids: [281]
                )
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:print_readably spids:[293])
                      op: Equal
                      rhs: {(DQ (${ VSub_Number 2))}
                      spids: [293]
                    )
                  ]
                  spids: [291]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.BoolBinary
                                  op_id: BoolBinary_GlobEqual
                                  left: 
                                    {
                                      (DQ 
                                        (word_part.BracedVarSub
                                          token: <VSub_Name s>
                                          suffix_op: 
                                            (suffix_op.Slice
                                              begin: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                                              length: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                            )
                                          spids: [306 312]
                                        )
                                      )
                                    }
                                  right: {(DQ (${ VSub_Name __keyw))}
                                )
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:r spids:[329])
                              op: Equal
                              rhs: 
                                {
                                  (DQ (':') 
                                    (word_part.BracedVarSub
                                      token: <VSub_Name s>
                                      suffix_op: 
                                        (suffix_op.Slice
                                          begin: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                        )
                                      spids: [332 336]
                                    )
                                  )
                                }
                              spids: [329]
                            )
                          ]
                          spids: [329]
                        )
                      ]
                      spids: [16777215 326]
                    )
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (command.DBracket
                              expr: 
                                (bool_expr.BoolBinary
                                  op_id: BoolBinary_GlobEqual
                                  left: 
                                    {
                                      (DQ 
                                        (word_part.BracedVarSub
                                          token: <VSub_Name s>
                                          suffix_op: 
                                            (suffix_op.Slice
                                              begin: (arith_expr.ArithWord w:{(Lit_Digits 0)})
                                              length: (arith_expr.ArithWord w:{(Lit_Digits 2)})
                                            )
                                          spids: [345 351]
                                        )
                                      )
                                    }
                                  right: {(DQ (${ VSub_Name __keyw))}
                                )
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:r spids:[368])
                              op: Equal
                              rhs: 
                                {
                                  (DQ (':') 
                                    (word_part.BracedVarSub
                                      token: <VSub_Name s>
                                      suffix_op: 
                                        (suffix_op.Slice
                                          begin: (arith_expr.ArithWord w:{(Lit_Digits 2)})
                                        )
                                      spids: [371 375]
                                    )
                                  )
                                }
                              spids: [368]
                            )
                          ]
                          spids: [368]
                        )
                      ]
                      spids: [340 365]
                    )
                    (if_arm
                      cond: [
                        (command.Sentence
                          child: 
                            (C {(Lit_Other '[')} {(DQ (${ VSub_Name print_readably))} 
                              {(Lit_Other '=') (Lit_Other '=')} {(DQ (yes))} {(Lit_Other ']')}
                            )
                          terminator: <Op_Semi ';'>
                        )
                      ]
                      action: [
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:s spids:[402])
                              op: Equal
                              rhs: 
                                {
                                  (DQ 
                                    (word_part.BracedVarSub
                                      token: <VSub_Name s>
                                      suffix_op: 
                                        (suffix_op.PatSub
                                          pat: 
                                            {
                                              (word_part.EscapedLiteralPart
                                                token: <Lit_EscapedChar '\\\\'>
                                              )
                                            }
                                          replace: 
                                            {
                                              (word_part.EscapedLiteralPart
                                                token: <Lit_EscapedChar '\\\\'>
                                              ) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\\\'>)
                                            }
                                          replace_mode: Lit_Slash
                                          spids: [406]
                                        )
                                      spids: [404 412]
                                    )
                                  )
                                }
                              spids: [402]
                            )
                          ]
                          spids: [402]
                        )
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:s spids:[416])
                              op: Equal
                              rhs: 
                                {
                                  (DQ 
                                    (word_part.BracedVarSub
                                      token: <VSub_Name s>
                                      suffix_op: 
                                        (suffix_op.PatSub
                                          pat: 
                                            {
                                              (word_part.EscapedLiteralPart
                                                token: <Lit_EscapedChar '\\"'>
                                              )
                                            }
                                          replace: 
                                            {
                                              (word_part.EscapedLiteralPart
                                                token: <Lit_EscapedChar '\\\\'>
                                              ) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                                            }
                                          replace_mode: Lit_Slash
                                          spids: [420]
                                        )
                                      spids: [418 426]
                                    )
                                  )
                                }
                              spids: [416]
                            )
                          ]
                          spids: [416]
                        )
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:r spids:[430])
                              op: Equal
                              rhs: 
                                {
                                  (DQ (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) 
                                    (word_part.BracedVarSub
                                      token: <VSub_Name s>
                                      suffix_op: 
                                        (suffix_op.PatSub
                                          pat: 
                                            {(Lit_Other '$') ("'") 
                                              (word_part.EscapedLiteralPart
                                                token: <Lit_EscapedChar '\\n'>
                                              ) ("'")
                                            }
                                          replace: 
                                            {
                                              (word_part.EscapedLiteralPart
                                                token: <Lit_EscapedChar '\\\\'>
                                              ) (n)
                                            }
                                          replace_mode: Lit_Slash
                                          spids: [435]
                                        )
                                      spids: [433 444]
                                    ) (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>)
                                  )
                                }
                              spids: [430]
                            )
                          ]
                          spids: [430]
                        )
                      ]
                      spids: [379 399]
                    )
                  ]
                  else_action: [
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:r spids:[452])
                          op: Equal
                          rhs: {(DQ (${ VSub_Name s))}
                          spids: [452]
                        )
                      ]
                      spids: [452]
                    )
                  ]
                  spids: [449 460]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:r spids:[463])
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (word_part.BracedVarSub
                              token: <VSub_Name r>
                              suffix_op: 
                                (suffix_op.PatSub
                                  pat: {(__STAR__)}
                                  replace: {(Lit_Other '$') ("'*'")}
                                  replace_mode: Lit_Slash
                                  spids: [467]
                                )
                              spids: [465 473]
                            )
                          )
                        }
                      spids: [463]
                    )
                  ]
                  spids: [463]
                )
              ]
              spids: [278]
            )
          spids: [273 277]
        )
        (command.FuncDef
          name: string_pr_str
          body: 
            (command.BraceGroup
              children: [
                (C {(_raw_string_pr_str)} 
                  {
                    (DQ 
                      (word_part.BracedVarSub
                        token: <VSub_Name ANON>
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 1))})
                          )
                        spids: [490 499]
                      )
                    )
                  } {(DQ (${ VSub_Number 2))}
                )
              ]
              spids: [484]
            )
          spids: [479 483]
        )
        (command.FuncDef
          name: function_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:r spids:[518])
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (word_part.BracedVarSub
                                  token: <VSub_Name ANON>
                                  bracket_op: 
                                    (bracket_op.ArrayIndex
                                      expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 1))})
                                    )
                                  spids: [520 529]
                                )
                              )
                            }
                          spids: [518]
                        )
                      ]
                      spids: [518]
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              spids: [516]
            )
          spids: [511 515]
        )
        (command.FuncDef
          name: bash_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:r spids:[544])
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (word_part.CommandSubPart
                              command_list: 
                                (command.CommandList
                                  children: [
                                    (C {(Assign_Declare declare)} {(-f)} {(-p)} {(${ VSub_Number 1)})
                                  ]
                                )
                              left_token: <Left_CommandSub '$('>
                              spids: [546 556]
                            )
                          )
                        }
                      spids: [544]
                    )
                  ]
                  spids: [544]
                )
              ]
              spids: [541]
            )
          spids: [536 540]
        )
        (command.FuncDef
          name: hash_map_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:print_readably spids:[572])
                      op: Equal
                      rhs: {(DQ (${ VSub_Number 2))}
                      spids: [572]
                    )
                  ]
                  spids: [570]
                )
                (command.Sentence
                  child: 
                    (command.Assignment
                      keyword: Assign_Local
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:res spids:[582])
                          op: Equal
                          rhs: {(DQ )}
                          spids: [582]
                        )
                      ]
                      spids: [580]
                    )
                  terminator: <Op_Semi ';'>
                )
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:val spids:[589])
                      op: Equal
                      rhs: {(DQ )}
                      spids: [589]
                    )
                  ]
                  spids: [587]
                )
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:hm spids:[596])
                      op: Equal
                      rhs: 
                        {
                          (DQ 
                            (word_part.BracedVarSub
                              token: <VSub_Name ANON>
                              bracket_op: 
                                (bracket_op.ArrayIndex
                                  expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 1))})
                                )
                              spids: [598 607]
                            )
                          )
                        }
                      spids: [596]
                    )
                  ]
                  spids: [594]
                )
                (C {(eval)} {(Assign_Local local)} 
                  {(Lit_VarLike 'keys=') 
                    (DQ (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{!') 
                      (${ VSub_Name hm) ('[@]}')
                    )
                  }
                )
                (command.ForEach
                  iter_name: key
                  iter_words: [{(${ VSub_Name keys)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(_raw_string_pr_str)} {(DQ (${ VSub_Name key))} 
                          {(DQ (${ VSub_Name print_readably))}
                        )
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:res spids:[655])
                              op: Equal
                              rhs: {(DQ (${ VSub_Name res) (' ') (${ VSub_Name r))}
                              spids: [655]
                            )
                          ]
                          spids: [655]
                        )
                        (C {(eval)} 
                          {(Lit_VarLike 'val=') 
                            (DQ (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\$'>) ('{') 
                              (${ VSub_Name hm) ('[') (word_part.EscapedLiteralPart token:<Lit_EscapedChar '\\"'>) (${ VSub_Name key) 
                              (word_part.EscapedLiteralPart
                                token: <Lit_EscapedChar '\\"'>
                              ) (']}')
                            )
                          }
                        )
                        (C {(_pr_str)} {(DQ (${ VSub_Name val))} {(DQ (${ VSub_Name print_readably))})
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:res spids:[701])
                              op: Equal
                              rhs: {(DQ (${ VSub_Name res) (' ') (${ VSub_Name r))}
                              spids: [701]
                            )
                          ]
                          spids: [701]
                        )
                      ]
                      spids: [637 713]
                    )
                  spids: [631 635]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:r spids:[716])
                      op: Equal
                      rhs: 
                        {
                          (DQ ('{') 
                            (word_part.BracedVarSub
                              token: <VSub_Name res>
                              suffix_op: 
                                (suffix_op.Slice
                                  begin: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                )
                              spids: [719 723]
                            ) ('}')
                          )
                        }
                      spids: [716]
                    )
                  ]
                  spids: [716]
                )
              ]
              spids: [567]
            )
          spids: [562 566]
        )
        (command.FuncDef
          name: vector_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:print_readably spids:[740])
                      op: Equal
                      rhs: {(DQ (${ VSub_Number 2))}
                      spids: [740]
                    )
                  ]
                  spids: [738]
                )
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:res spids:[750])
                      op: Equal
                      rhs: {(DQ )}
                      spids: [750]
                    )
                  ]
                  spids: [748]
                )
                (command.ForEach
                  iter_name: elem
                  iter_words: [
                    {
                      (word_part.BracedVarSub
                        token: <VSub_Name ANON>
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 1))})
                          )
                        spids: [761 770]
                      )
                    }
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(_pr_str)} {(DQ (${ VSub_Name elem))} {(DQ (${ VSub_Name print_readably))})
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:res spids:[791])
                              op: Equal
                              rhs: {(DQ (${ VSub_Name res) (' ') (${ VSub_Name r))}
                              spids: [791]
                            )
                          ]
                          spids: [791]
                        )
                      ]
                      spids: [773 803]
                    )
                  spids: [760 771]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:r spids:[806])
                      op: Equal
                      rhs: 
                        {
                          (DQ ('[') 
                            (word_part.BracedVarSub
                              token: <VSub_Name res>
                              suffix_op: 
                                (suffix_op.Slice
                                  begin: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                )
                              spids: [809 813]
                            ) (']')
                          )
                        }
                      spids: [806]
                    )
                  ]
                  spids: [806]
                )
              ]
              spids: [735]
            )
          spids: [730 734]
        )
        (command.FuncDef
          name: list_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:print_readably spids:[830])
                      op: Equal
                      rhs: {(DQ (${ VSub_Number 2))}
                      spids: [830]
                    )
                  ]
                  spids: [828]
                )
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:res spids:[840])
                      op: Equal
                      rhs: {(DQ )}
                      spids: [840]
                    )
                  ]
                  spids: [838]
                )
                (command.ForEach
                  iter_name: elem
                  iter_words: [
                    {
                      (word_part.BracedVarSub
                        token: <VSub_Name ANON>
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 1))})
                          )
                        spids: [851 860]
                      )
                    }
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {(_pr_str)} {(DQ (${ VSub_Name elem))} {(DQ (${ VSub_Name print_readably))})
                        (command.Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (lhs_expr.LhsName name:res spids:[881])
                              op: Equal
                              rhs: {(DQ (${ VSub_Name res) (' ') (${ VSub_Name r))}
                              spids: [881]
                            )
                          ]
                          spids: [881]
                        )
                      ]
                      spids: [863 893]
                    )
                  spids: [850 861]
                )
                (command.Assignment
                  keyword: Assign_None
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:r spids:[896])
                      op: Equal
                      rhs: 
                        {
                          (DQ ('(') 
                            (word_part.BracedVarSub
                              token: <VSub_Name res>
                              suffix_op: 
                                (suffix_op.Slice
                                  begin: (arith_expr.ArithWord w:{(Lit_Digits 1)})
                                )
                              spids: [899 903]
                            ) (')')
                          )
                        }
                      spids: [896]
                    )
                  ]
                  spids: [896]
                )
              ]
              spids: [825]
            )
          spids: [820 824]
        )
        (command.FuncDef
          name: atom_pr_str
          body: 
            (command.BraceGroup
              children: [
                (command.Assignment
                  keyword: Assign_Local
                  pairs: [
                    (assign_pair
                      lhs: (lhs_expr.LhsName name:print_readably spids:[920])
                      op: Equal
                      rhs: {(DQ (${ VSub_Number 2))}
                      spids: [920]
                    )
                  ]
                  spids: [918]
                )
                (C {(_pr_str)} 
                  {
                    (DQ 
                      (word_part.BracedVarSub
                        token: <VSub_Name ANON>
                        bracket_op: 
                          (bracket_op.ArrayIndex
                            expr: (arith_expr.ArithWord w:{(DQ (${ VSub_Number 1))})
                          )
                        spids: [931 940]
                      )
                    )
                  } {(DQ (${ VSub_Name print_readably))}
                )
                (command.Sentence
                  child: 
                    (command.Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (lhs_expr.LhsName name:r spids:[950])
                          op: Equal
                          rhs: {(DQ ('(atom ') (${ VSub_Name r) (')'))}
                          spids: [950]
                        )
                      ]
                      spids: [950]
                    )
                  terminator: <Op_Semi ';'>
                )
              ]
              spids: [915]
            )
          spids: [910 914]
        )
      ]
      spids: [16777215 25]
    )
  ]
  spids: [16777215 963]
)