(command.If
  arms: [
    (if_arm
      cond: 
        (condition.Shell
          commands: [
            (command.Sentence
              child: 
                (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ (${ Id.VSub_Name __mal_printer_included__))} 
                  {<Id.Lit_RBracket ']'>}
                )
              terminator: <Id.Op_Semi _>
            )
          ]
        )
      action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:__mal_printer_included)
              op: assign_op.Equal
              rhs: {<true>}
              spids: [27]
            )
          ]
        )
        (C {<source>} 
          {
            (command_sub
              left_token: <Id.Left_DollarParen '$('>
              child: (C {<dirname>} {($ Id.VSub_Number '$0')})
            ) <'/types.sh'>
          }
        )
        (command.ShFunction
          name: _pr_str
          body: 
            (BraceGroup
              children: [
                (C {<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))})
                (command.Sentence
                  child: (C {<_obj_type>} {(DQ (${ Id.VSub_Number 1))})
                  terminator: <Id.Op_Semi _>
                )
                (C {<local>} {<Id.Lit_VarLike 'ot='> (DQ (${ Id.VSub_Name r))})
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Unary
                                      op_id: Id.BoolUnary_z
                                      child: {(DQ (${ Id.VSub_Name ot))}
                                    )
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (C {<_error>} {(DQ <'_pr_str failed on \''> (${ Id.VSub_Number 1) <'\''>)})
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:r)
                              op: assign_op.Equal
                              rhs: {(DQ <'<'> (${ Id.VSub_Number 1) <'>'>)}
                              spids: [107]
                            )
                          ]
                        )
                      ]
                      spids: [78 93]
                    )
                  ]
                  else_action: [
                    (C {<eval>} {(${ Id.VSub_Name ot) <_pr_str>} {(DQ (${ Id.VSub_Number 1))} 
                      {(DQ (${ Id.VSub_Name print_readably))}
                    )
                  ]
                )
              ]
            )
        )
        (command.ShFunction
          name: nil_pr_str
          body: 
            (BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:r)
                          op: assign_op.Equal
                          rhs: {(DQ <nil>)}
                          spids: [152]
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
        )
        (command.ShFunction
          name: true_pr_str
          body: 
            (BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:r)
                          op: assign_op.Equal
                          rhs: {(DQ <true>)}
                          spids: [167]
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
        )
        (command.ShFunction
          name: false_pr_str
          body: 
            (BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:r)
                          op: assign_op.Equal
                          rhs: {(DQ <false>)}
                          spids: [182]
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
        )
        (command.ShFunction
          name: number_pr_str
          body: 
            (BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:r)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: <Id.VSub_Name ANON>
                                  bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                                )
                              )
                            }
                          spids: [198]
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
        )
        (command.ShFunction
          name: symbol_pr_str
          body: 
            (BraceGroup
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (braced_var_sub
                              token: <Id.VSub_Name ANON>
                              bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                            )
                          )
                        }
                      spids: [224]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (braced_var_sub
                              token: <Id.VSub_Name r>
                              suffix_op: 
                                (suffix_op.PatSub
                                  pat: {<__STAR__>}
                                  replace: {<'*'>}
                                  replace_mode: Id.Lit_Slash
                                )
                            )
                          )
                        }
                      spids: [239]
                    )
                  ]
                )
              ]
            )
        )
        (command.ShFunction
          name: keyword_pr_str
          body: (BraceGroup children:[(C {<string_pr_str>} {(DQ (${ Id.VSub_Number 1))})])
        )
        (command.ShFunction
          name: _raw_string_pr_str
          body: 
            (BraceGroup
              children: [
                (C {<local>} {<Id.Lit_VarLike 's='> (DQ (${ Id.VSub_Number 1))})
                (C {<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))})
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobEqual
                                      left: 
                                        {
                                          (DQ 
                                            (braced_var_sub
                                              token: <Id.VSub_Name s>
                                              suffix_op: 
                                                (suffix_op.Slice
                                                  begin: {<Id.Lit_Digits 0>}
                                                  length: {<Id.Lit_Digits 1>}
                                                )
                                            )
                                          )
                                        }
                                      right: {(DQ (${ Id.VSub_Name __keyw))}
                                    )
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:r)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ <':'> 
                                    (braced_var_sub
                                      token: <Id.VSub_Name s>
                                      suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 1>})
                                    )
                                  )
                                }
                              spids: [329]
                            )
                          ]
                        )
                      ]
                      spids: [301 326]
                    )
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (command.DBracket
                                  expr: 
                                    (bool_expr.Binary
                                      op_id: Id.BoolBinary_GlobEqual
                                      left: 
                                        {
                                          (DQ 
                                            (braced_var_sub
                                              token: <Id.VSub_Name s>
                                              suffix_op: 
                                                (suffix_op.Slice
                                                  begin: {<Id.Lit_Digits 0>}
                                                  length: {<Id.Lit_Digits 2>}
                                                )
                                            )
                                          )
                                        }
                                      right: {(DQ (${ Id.VSub_Name __keyw))}
                                    )
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:r)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ <':'> 
                                    (braced_var_sub
                                      token: <Id.VSub_Name s>
                                      suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 2>})
                                    )
                                  )
                                }
                              spids: [368]
                            )
                          ]
                        )
                      ]
                      spids: [340 365]
                    )
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (command.Sentence
                              child: 
                                (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name print_readably))} 
                                  {<Id.Lit_Equals '='> <Id.Lit_Equals '='>} {(DQ <yes>)} {<Id.Lit_RBracket ']'>}
                                )
                              terminator: <Id.Op_Semi _>
                            )
                          ]
                        )
                      action: [
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:s)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (braced_var_sub
                                      token: <Id.VSub_Name s>
                                      suffix_op: 
                                        (suffix_op.PatSub
                                          pat: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\\\'>
                                              )
                                            }
                                          replace: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\\\'>
                                              ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\\\'>)
                                            }
                                          replace_mode: Id.Lit_Slash
                                        )
                                    )
                                  )
                                }
                              spids: [402]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:s)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ 
                                    (braced_var_sub
                                      token: <Id.VSub_Name s>
                                      suffix_op: 
                                        (suffix_op.PatSub
                                          pat: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\"'>
                                              )
                                            }
                                          replace: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\\\'>
                                              ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>)
                                            }
                                          replace_mode: Id.Lit_Slash
                                        )
                                    )
                                  )
                                }
                              spids: [416]
                            )
                          ]
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:r)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) 
                                    (braced_var_sub
                                      token: <Id.VSub_Name s>
                                      suffix_op: 
                                        (suffix_op.PatSub
                                          pat: 
                                            {
                                              (single_quoted
                                                left: <Id.Left_CSingleQuote '$\''>
                                                tokens: [<Id.Char_OneChar '\\n'>]
                                                multiline: F
                                              )
                                            }
                                          replace: 
                                            {
                                              (word_part.EscapedLiteral
                                                token: <Id.Lit_EscapedChar '\\\\'>
                                              ) <n>
                                            }
                                          replace_mode: Id.Lit_Slash
                                        )
                                    ) (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>)
                                  )
                                }
                              spids: [430]
                            )
                          ]
                        )
                      ]
                      spids: [379 399]
                    )
                  ]
                  else_action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:r)
                          op: assign_op.Equal
                          rhs: {(DQ (${ Id.VSub_Name s))}
                          spids: [451]
                        )
                      ]
                    )
                  ]
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (braced_var_sub
                              token: <Id.VSub_Name r>
                              suffix_op: 
                                (suffix_op.PatSub
                                  pat: {<__STAR__>}
                                  replace: 
                                    {
                                      (single_quoted
                                        left: <Id.Left_CSingleQuote '$\''>
                                        tokens: [<Id.Char_Literals '*'>]
                                        multiline: F
                                      )
                                    }
                                  replace_mode: Id.Lit_Slash
                                )
                            )
                          )
                        }
                      spids: [462]
                    )
                  ]
                )
              ]
            )
        )
        (command.ShFunction
          name: string_pr_str
          body: 
            (BraceGroup
              children: [
                (C {<_raw_string_pr_str>} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: <Id.VSub_Name ANON>
                        bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                      )
                    )
                  } {(DQ (${ Id.VSub_Number 2))}
                )
              ]
            )
        )
        (command.ShFunction
          name: function_pr_str
          body: 
            (BraceGroup
              children: [
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:r)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ 
                                (braced_var_sub
                                  token: <Id.VSub_Name ANON>
                                  bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                                )
                              )
                            }
                          spids: [518]
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
        )
        (command.ShFunction
          name: bash_pr_str
          body: 
            (BraceGroup
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ 
                            (command_sub
                              left_token: <Id.Left_DollarParen '$('>
                              child: (C {<declare>} {<-f>} {<-p>} {(${ Id.VSub_Number 1)})
                            )
                          )
                        }
                      spids: [544]
                    )
                  ]
                )
              ]
            )
        )
        (command.ShFunction
          name: hash_map_pr_str
          body: 
            (BraceGroup
              children: [
                (C {<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))})
                (command.Sentence
                  child: (C {<local>} {<Id.Lit_VarLike 'res='> (DQ )})
                  terminator: <Id.Op_Semi _>
                )
                (C {<local>} {<Id.Lit_VarLike 'val='> (DQ )})
                (C {<local>} 
                  {<Id.Lit_VarLike 'hm='> 
                    (DQ 
                      (braced_var_sub
                        token: <Id.VSub_Name ANON>
                        bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                      )
                    )
                  }
                )
                (C {<eval>} {<local>} 
                  {<Id.Lit_VarLike 'keys='> 
                    (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'{!'> 
                      (${ Id.VSub_Name hm) <'[@]}'>
                    )
                  }
                )
                (command.ForEach
                  iter_name: key
                  iter_words: [{(${ Id.VSub_Name keys)}]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {<_raw_string_pr_str>} {(DQ (${ Id.VSub_Name key))} 
                          {(DQ (${ Id.VSub_Name print_readably))}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:res)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Name res) <' '> (${ Id.VSub_Name r))}
                              spids: [655]
                            )
                          ]
                        )
                        (C {<eval>} 
                          {<Id.Lit_VarLike 'val='> 
                            (DQ (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\$'>) <'{'> 
                              (${ Id.VSub_Name hm) <'['> (word_part.EscapedLiteral token:<Id.Lit_EscapedChar '\\"'>) (${ Id.VSub_Name key) 
                              (word_part.EscapedLiteral
                                token: <Id.Lit_EscapedChar '\\"'>
                              ) <']}'>
                            )
                          }
                        )
                        (C {<_pr_str>} {(DQ (${ Id.VSub_Name val))} 
                          {(DQ (${ Id.VSub_Name print_readably))}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:res)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Name res) <' '> (${ Id.VSub_Name r))}
                              spids: [701]
                            )
                          ]
                        )
                      ]
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ <'{'> 
                            (braced_var_sub
                              token: <Id.VSub_Name res>
                              suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 1>})
                            ) <'}'>
                          )
                        }
                      spids: [716]
                    )
                  ]
                )
              ]
            )
        )
        (command.ShFunction
          name: vector_pr_str
          body: 
            (BraceGroup
              children: [
                (C {<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))})
                (C {<local>} {<Id.Lit_VarLike 'res='> (DQ )})
                (command.ForEach
                  iter_name: elem
                  iter_words: [
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name ANON>
                        bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                      )
                    }
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {<_pr_str>} {(DQ (${ Id.VSub_Name elem))} 
                          {(DQ (${ Id.VSub_Name print_readably))}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:res)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Name res) <' '> (${ Id.VSub_Name r))}
                              spids: [791]
                            )
                          ]
                        )
                      ]
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ <'['> 
                            (braced_var_sub
                              token: <Id.VSub_Name res>
                              suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 1>})
                            ) <']'>
                          )
                        }
                      spids: [806]
                    )
                  ]
                )
              ]
            )
        )
        (command.ShFunction
          name: list_pr_str
          body: 
            (BraceGroup
              children: [
                (C {<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))})
                (C {<local>} {<Id.Lit_VarLike 'res='> (DQ )})
                (command.ForEach
                  iter_name: elem
                  iter_words: [
                    {
                      (braced_var_sub
                        token: <Id.VSub_Name ANON>
                        bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                      )
                    }
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (C {<_pr_str>} {(DQ (${ Id.VSub_Name elem))} 
                          {(DQ (${ Id.VSub_Name print_readably))}
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:res)
                              op: assign_op.Equal
                              rhs: {(DQ (${ Id.VSub_Name res) <' '> (${ Id.VSub_Name r))}
                              spids: [881]
                            )
                          ]
                        )
                      ]
                    )
                )
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:r)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (DQ <'('> 
                            (braced_var_sub
                              token: <Id.VSub_Name res>
                              suffix_op: (suffix_op.Slice begin:{<Id.Lit_Digits 1>})
                            ) <')'>
                          )
                        }
                      spids: [896]
                    )
                  ]
                )
              ]
            )
        )
        (command.ShFunction
          name: atom_pr_str
          body: 
            (BraceGroup
              children: [
                (C {<local>} {<Id.Lit_VarLike 'print_readably='> (DQ (${ Id.VSub_Number 2))})
                (C {<_pr_str>} 
                  {
                    (DQ 
                      (braced_var_sub
                        token: <Id.VSub_Name ANON>
                        bracket_op: (bracket_op.ArrayIndex expr:{(DQ (${ Id.VSub_Number 1))})
                      )
                    )
                  } {(DQ (${ Id.VSub_Name print_readably))}
                )
                (command.Sentence
                  child: 
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:r)
                          op: assign_op.Equal
                          rhs: {(DQ <'(atom '> (${ Id.VSub_Name r) <')'>)}
                          spids: [950]
                        )
                      ]
                    )
                  terminator: <Id.Op_Semi _>
                )
              ]
            )
        )
      ]
      spids: [10 25]
    )
  ]
)