(command.If
  if_kw: <Id.KW_If if>
  arms: [
    (IfArm
      keyword: <Id.KW_If if>
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: 
                (command.Simple
                  blame_tok: <Id.Lit_LBracket '['>
                  more_env: []
                  words: [
                    {<Id.Lit_LBracket '['>}
                    {<-z>}
                    {(DQ (${ Id.VSub_Name __mal_printer_included__))}
                    {<Id.Lit_RBracket ']'>}
                  ]
                  redirects: []
                  do_fork: T
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      then_kw: <Id.KW_Then then>
      action: [
        (command.ShAssignment
          left: <Id.Lit_VarLike '__mal_printer_included='>
          pairs: [
            (AssignPair
              left: <Id.Lit_VarLike '__mal_printer_included='>
              lhs: 
                (sh_lhs_expr.Name
                  left: <Id.Lit_VarLike '__mal_printer_included='>
                  name: __mal_printer_included
                )
              op: assign_op.Equal
              rhs: {<true>}
            )
          ]
          redirects: []
        )
        (command.Simple
          blame_tok: <source>
          more_env: []
          words: [
            {<source>}
            {
              (CommandSub
                left_token: <Id.Left_DollarParen '$('>
                child: 
                  (command.Simple
                    blame_tok: <dirname>
                    more_env: []
                    words: [{<dirname>} {($ Id.VSub_Number 0)}]
                    redirects: []
                    do_fork: T
                  )
                right: <Id.Eof_RParen _>
              ) <'/types.sh'>
            }
          ]
          redirects: []
          do_fork: T
        )
        (command.ShFunction
          name_tok: <_pr_str>
          name: _pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))}]
                  redirects: []
                  do_fork: T
                )
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <_obj_type>
                      more_env: []
                      words: [{<_obj_type>} {(DQ (${ Id.VSub_Number 1))}]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'ot='> (DQ (${ Id.VSub_Name r))}]
                  redirects: []
                  do_fork: T
                )
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  left: <Id.KW_DLeftBracket '[['>
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ (${ Id.VSub_Name ot))}
                                    )
                                  right: <Id.Lit_DRightBracket ']]'>
                                  redirects: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.Simple
                          blame_tok: <_error>
                          more_env: []
                          words: [
                            {<_error>}
                            {(DQ <'_pr_str failed on \''> (${ Id.VSub_Number 1) <'\''>)}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'r='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'r='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                              op: assign_op.Equal
                              rhs: {(DQ <'<'> (${ Id.VSub_Number 1) <'>'>)}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      spids: [78 93]
                    )
                  ]
                  else_kw: <Id.KW_Else else>
                  else_action: [
                    (command.Simple
                      blame_tok: <eval>
                      more_env: []
                      words: [
                        {<eval>}
                        {(${ Id.VSub_Name ot) <_pr_str>}
                        {(DQ (${ Id.VSub_Number 1))}
                        {(DQ (${ Id.VSub_Name print_readably))}
                      ]
                      redirects: []
                      do_fork: T
                    )
                  ]
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <nil_pr_str>
          name: nil_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'r='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'r='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                          op: assign_op.Equal
                          rhs: {(DQ <nil>)}
                        )
                      ]
                      redirects: []
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <true_pr_str>
          name: true_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'r='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'r='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                          op: assign_op.Equal
                          rhs: {(DQ <true>)}
                        )
                      ]
                      redirects: []
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <false_pr_str>
          name: false_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'r='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'r='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                          op: assign_op.Equal
                          rhs: {(DQ <false>)}
                        )
                      ]
                      redirects: []
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <number_pr_str>
          name: number_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'r='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'r='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name ANON>
                                  var_name: ANON
                                  bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <symbol_pr_str>
          name: symbol_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name ANON>
                              var_name: ANON
                              bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                              right: <Id.Right_DollarBrace '}'>
                            )
                          )
                        }
                    )
                  ]
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name r>
                              var_name: r
                              suffix_op: 
                                (suffix_op.PatSub
                                  pat: {<__STAR__>}
                                  replace: {<Id.Lit_Other '*'>}
                                  replace_mode: Id.Lit_Slash
                                  slash_tok: <Id.VOp2_Slash _>
                                )
                              right: <Id.Right_DollarBrace '}'>
                            )
                          )
                        }
                    )
                  ]
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <keyword_pr_str>
          name: keyword_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <string_pr_str>
                  more_env: []
                  words: [{<string_pr_str>} {(DQ (${ Id.VSub_Number 1))}]
                  redirects: []
                  do_fork: T
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <_raw_string_pr_str>
          name: _raw_string_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 's='> (DQ (${ Id.VSub_Number 1))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))}]
                  redirects: []
                  do_fork: T
                )
                (command.If
                  if_kw: <Id.KW_If if>
                  arms: [
                    (IfArm
                      keyword: <Id.KW_If if>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  left: <Id.KW_DLeftBracket '[['>
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobEqual
                                      left: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Name s>
                                              var_name: s
                                              suffix_op: 
                                                (suffix_op.Slice
                                                  begin: {<Id.Lit_Digits 0>}
                                                  length: {<Id.Lit_Digits 1>}
                                                )
                                              right: <Id.Arith_RBrace _>
                                            )
                                          )
                                        }
                                      right: {(DQ (${ Id.VSub_Name __keyw))}
                                    )
                                  right: <Id.Lit_DRightBracket ']]'>
                                  redirects: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'r='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'r='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ <':'> 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name s>
                                      var_name: s
                                      suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 1>})
                                      right: <Id.Arith_RBrace _>
                                    )
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      ]
                      spids: [301 326]
                    )
                    (IfArm
                      keyword: <Id.KW_Elif elif>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  left: <Id.KW_DLeftBracket '[['>
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobEqual
                                      left: 
                                        {
                                          (DQ 
                                            (BracedVarSub
                                              left: <Id.Left_DollarBrace '${'>
                                              token: <Id.VSub_Name s>
                                              var_name: s
                                              suffix_op: 
                                                (suffix_op.Slice
                                                  begin: {<Id.Lit_Digits 0>}
                                                  length: {<Id.Lit_Digits 2>}
                                                )
                                              right: <Id.Arith_RBrace _>
                                            )
                                          )
                                        }
                                      right: {(DQ (${ Id.VSub_Name __keyw))}
                                    )
                                  right: <Id.Lit_DRightBracket ']]'>
                                  redirects: []
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'r='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'r='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ <':'> 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name s>
                                      var_name: s
                                      suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 2>})
                                      right: <Id.Arith_RBrace _>
                                    )
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      ]
                      spids: [340 365]
                    )
                    (IfArm
                      keyword: <Id.KW_Elif elif>
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.Simple
                                  blame_tok: <Id.Lit_LBracket '['>
                                  more_env: []
                                  words: [
                                    {<Id.Lit_LBracket '['>}
                                    {(DQ (${ Id.VSub_Name print_readably))}
                                    {<Id.Lit_Equals '='> <Id.Lit_Equals '='>}
                                    {(DQ <yes>)}
                                    {<Id.Lit_RBracket ']'>}
                                  ]
                                  redirects: []
                                  do_fork: T
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      then_kw: <Id.KW_Then then>
                      action: [
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 's='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 's='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 's='> name:s)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name s>
                                      var_name: s
                                      suffix_op: 
                                        (suffix_op.PatSub
                                          pat: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\\\'>
                                                ch: '\\'
                                              )
                                            }
                                          replace: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\\\'>
                                                ch: '\\'
                                              ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'> ch:'\\')
                                            }
                                          replace_mode: Id.Lit_Slash
                                          slash_tok: <Id.VOp2_Slash _>
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 's='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 's='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 's='> name:s)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name s>
                                      var_name: s
                                      suffix_op: 
                                        (suffix_op.PatSub
                                          pat: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\"'>
                                                ch: '"'
                                              )
                                            }
                                          replace: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\\\'>
                                                ch: '\\'
                                              ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"')
                                            }
                                          replace_mode: Id.Lit_Slash
                                          slash_tok: <Id.VOp2_Slash _>
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    )
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'r='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'r='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (word_part.EscapedLiteral
                                      token: <Id.Lit_EscapedChar '\\"'>
                                      ch: '"'
                                    ) 
                                    (BracedVarSub
                                      left: <Id.Left_DollarBrace '${'>
                                      token: <Id.VSub_Name s>
                                      var_name: s
                                      suffix_op: 
                                        (suffix_op.PatSub
                                          pat: 
                                            {
                                              (SingleQuoted
                                                left: <Id.Left_DollarSingleQuote '$\''>
                                                tokens: [<Id.Char_OneChar '\\n'>]
                                                right: <Id.Right_SingleQuote '\''>
                                              )
                                            }
                                          replace: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\\\'>
                                                ch: '\\'
                                              ) <n>
                                            }
                                          replace_mode: Id.Lit_Slash
                                          slash_tok: <Id.VOp2_Slash _>
                                        )
                                      right: <Id.Right_DollarBrace '}'>
                                    ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"')
                                  )
                                }
                            )
                          ]
                          redirects: []
                        )
                      ]
                      spids: [379 399]
                    )
                  ]
                  else_kw: <Id.KW_Else else>
                  else_action: [
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'r='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'r='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name s))}
                        )
                      ]
                      redirects: []
                    )
                  ]
                  fi_kw: <Id.KW_Fi fi>
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name r>
                              var_name: r
                              suffix_op: 
                                (suffix_op.PatSub
                                  pat: {<__STAR__>}
                                  replace: 
                                    {
                                      (SingleQuoted
                                        left: <Id.Left_DollarSingleQuote '$\''>
                                        tokens: [<Id.Char_Literals '*'>]
                                        right: <Id.Right_SingleQuote '\''>
                                      )
                                    }
                                  replace_mode: Id.Lit_Slash
                                  slash_tok: <Id.VOp2_Slash _>
                                )
                              right: <Id.Right_DollarBrace '}'>
                            )
                          )
                        }
                    )
                  ]
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <string_pr_str>
          name: string_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <_raw_string_pr_str>
                  more_env: []
                  words: [
                    {<_raw_string_pr_str>}
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name ANON>
                          var_name: ANON
                          bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                    {(DQ (${ Id.VSub_Number 2))}
                  ]
                  redirects: []
                  do_fork: T
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <function_pr_str>
          name: function_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'r='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'r='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  left: <Id.Left_DollarBrace '${'>
                                  token: <Id.VSub_Name ANON>
                                  var_name: ANON
                                  bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                                  right: <Id.Right_DollarBrace '}'>
                                )
                              )
                            }
                        )
                      ]
                      redirects: []
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <bash_pr_str>
          name: bash_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (CommandSub
                              left_token: <Id.Left_DollarParen '$('>
                              child: 
                                (command.Simple
                                  blame_tok: <declare>
                                  more_env: []
                                  words: [{<declare>} {<-f>} {<-p>} {(${ Id.VSub_Number 1)}]
                                  redirects: []
                                  do_fork: T
                                )
                              right: <Id.Eof_RParen _>
                            )
                          )
                        }
                    )
                  ]
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <hash_map_pr_str>
          name: hash_map_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))}]
                  redirects: []
                  do_fork: T
                )
                (command.Sentence
                  child: 
                    (command.Simple
                      blame_tok: <local>
                      more_env: []
                      words: [{<local>} {<Id.Lit_VarLike 'res='> (DQ )}]
                      redirects: []
                      do_fork: T
                    )
                  terminator: <Id.Op_Semi _>
                )
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'val='> (DQ )}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [
                    {<local>}
                    {<Id.Lit_VarLike 'hm='> 
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name ANON>
                          var_name: ANON
                          bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <eval>
                  more_env: []
                  words: [
                    {<eval>}
                    {<local>}
                    {<Id.Lit_VarLike 'keys='> 
                      (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') <'{!'> 
                        (${ Id.VSub_Name hm) <'[@]}'>
                      )
                    }
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.ForEach
                  keyword: <Id.KW_For for>
                  iter_names: [key]
                  iterable: (for_iter.Words words:[{(${ Id.VSub_Name keys)}])
                  semi_tok: <Id.Op_Semi _>
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.Simple
                          blame_tok: <_raw_string_pr_str>
                          more_env: []
                          words: [
                            {<_raw_string_pr_str>}
                            {(DQ (${ Id.VSub_Name key))}
                            {(DQ (${ Id.VSub_Name print_readably))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'res='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'res='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Name res) <' '> (${ Id.VSub_Name r))}
                            )
                          ]
                          redirects: []
                        )
                        (command.Simple
                          blame_tok: <eval>
                          more_env: []
                          words: [
                            {<eval>}
                            {<Id.Lit_VarLike 'val='> 
                              (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'> ch:'$') 
                                <'{'> (${ Id.VSub_Name hm) <'['> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') 
                                (${ Id.VSub_Name key) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'> ch:'"') <']}'>
                              )
                            }
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.Simple
                          blame_tok: <_pr_str>
                          more_env: []
                          words: [
                            {<_pr_str>}
                            {(DQ (${ Id.VSub_Name val))}
                            {(DQ (${ Id.VSub_Name print_readably))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'res='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'res='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Name res) <' '> (${ Id.VSub_Name r))}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ <'{'> 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name res>
                              var_name: res
                              suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 1>})
                              right: <Id.Arith_RBrace _>
                            ) <'}'>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <vector_pr_str>
          name: vector_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'res='> (DQ )}]
                  redirects: []
                  do_fork: T
                )
                (command.ForEach
                  keyword: <Id.KW_For for>
                  iter_names: [elem]
                  iterable: 
                    (for_iter.Words
                      words: [
                        {
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name ANON>
                            var_name: ANON
                            bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                            right: <Id.Right_DollarBrace '}'>
                          )
                        }
                      ]
                    )
                  semi_tok: <Id.Op_Semi _>
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.Simple
                          blame_tok: <_pr_str>
                          more_env: []
                          words: [
                            {<_pr_str>}
                            {(DQ (${ Id.VSub_Name elem))}
                            {(DQ (${ Id.VSub_Name print_readably))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'res='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'res='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Name res) <' '> (${ Id.VSub_Name r))}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ <'['> 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name res>
                              var_name: res
                              suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 1>})
                              right: <Id.Arith_RBrace _>
                            ) <']'>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <list_pr_str>
          name: list_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'res='> (DQ )}]
                  redirects: []
                  do_fork: T
                )
                (command.ForEach
                  keyword: <Id.KW_For for>
                  iter_names: [elem]
                  iterable: 
                    (for_iter.Words
                      words: [
                        {
                          (BracedVarSub
                            left: <Id.Left_DollarBrace '${'>
                            token: <Id.VSub_Name ANON>
                            var_name: ANON
                            bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                            right: <Id.Right_DollarBrace '}'>
                          )
                        }
                      ]
                    )
                  semi_tok: <Id.Op_Semi _>
                  body: 
                    (command.DoGroup
                      left: <Id.KW_Do do>
                      children: [
                        (command.Simple
                          blame_tok: <_pr_str>
                          more_env: []
                          words: [
                            {<_pr_str>}
                            {(DQ (${ Id.VSub_Name elem))}
                            {(DQ (${ Id.VSub_Name print_readably))}
                          ]
                          redirects: []
                          do_fork: T
                        )
                        (command.ShAssignment
                          left: <Id.Lit_VarLike 'res='>
                          pairs: [
                            (AssignPair
                              left: <Id.Lit_VarLike 'res='>
                              lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'res='> name:res)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Name res) <' '> (${ Id.VSub_Name r))}
                            )
                          ]
                          redirects: []
                        )
                      ]
                      right: <Id.KW_Done done>
                    )
                  redirects: []
                )
                (command.ShAssignment
                  left: <Id.Lit_VarLike 'r='>
                  pairs: [
                    (AssignPair
                      left: <Id.Lit_VarLike 'r='>
                      lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ <'('> 
                            (BracedVarSub
                              left: <Id.Left_DollarBrace '${'>
                              token: <Id.VSub_Name res>
                              var_name: res
                              suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 1>})
                              right: <Id.Arith_RBrace _>
                            ) <')'>
                          )
                        }
                    )
                  ]
                  redirects: []
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
        (command.ShFunction
          name_tok: <atom_pr_str>
          name: atom_pr_str
          body: 
            (BraceGroup
              left: <Id.Lit_LBrace '{'>
              children: [
                (command.Simple
                  blame_tok: <local>
                  more_env: []
                  words: [{<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))}]
                  redirects: []
                  do_fork: T
                )
                (command.Simple
                  blame_tok: <_pr_str>
                  more_env: []
                  words: [
                    {<_pr_str>}
                    {
                      (DQ 
                        (BracedVarSub
                          left: <Id.Left_DollarBrace '${'>
                          token: <Id.VSub_Name ANON>
                          var_name: ANON
                          bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                          right: <Id.Right_DollarBrace '}'>
                        )
                      )
                    }
                    {(DQ (${ Id.VSub_Name print_readably))}
                  ]
                  redirects: []
                  do_fork: T
                )
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      left: <Id.Lit_VarLike 'r='>
                      pairs: [
                        (AssignPair
                          left: <Id.Lit_VarLike 'r='>
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'r='> name:r)
                          op: assign_op.Equal
                          rhs: {(DQ <'(atom '> (${ Id.VSub_Name r) <')'>)}
                        )
                      ]
                      redirects: []
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
              redirects: []
              right: <Id.Lit_RBrace '}'>
            )
        )
      ]
      spids: [10 25]
    )
  ]
  else_action: []
  fi_kw: <Id.KW_Fi fi>
  redirects: []
)