SOURCE_FILE
  FN
    FN_KW "fn"
    WHITESPACE " "
    NAME
      IDENT "f"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        WHITESPACE " "
        TYPE_BOUND_LIST
          TYPE_BOUND
            L_PAREN "("
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "Copy"
            R_PAREN ")"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            L_PAREN "("
            QUESTION "?"
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "Sized"
            R_PAREN ")"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            L_PAREN "("
            FOR_TYPE
              FOR_KW "for"
              GENERIC_PARAM_LIST
                L_ANGLE "<"
                LIFETIME_PARAM
                  LIFETIME
                    LIFETIME_IDENT "'a"
                R_ANGLE ">"
              WHITESPACE " "
              PATH_TYPE
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "Trait"
                    GENERIC_ARG_LIST
                      L_ANGLE "<"
                      LIFETIME_ARG
                        LIFETIME
                          LIFETIME_IDENT "'a"
                      R_ANGLE ">"
            R_PAREN ")"
      R_ANGLE ">"
    PARAM_LIST
      L_PAREN "("
      R_PAREN ")"
    WHITESPACE " "
    BLOCK_EXPR
      STMT_LIST
        L_CURLY "{"
        R_CURLY "}"
  WHITESPACE "\n\n"
  FN
    FN_KW "fn"
    WHITESPACE " "
    NAME
      IDENT "main"
    PARAM_LIST
      L_PAREN "("
      R_PAREN ")"
    WHITESPACE " "
    BLOCK_EXPR
      STMT_LIST
        L_CURLY "{"
        WHITESPACE "\n    "
        LET_STMT
          LET_KW "let"
          WHITESPACE " "
          WILDCARD_PAT
            UNDERSCORE "_"
          COLON ":"
          WHITESPACE " "
          DYN_TRAIT_TYPE
            TYPE_BOUND_LIST
              TYPE_BOUND
                PATH_TYPE
                  PATH
                    PATH_SEGMENT
                      NAME_REF
                        IDENT "Box"
                      GENERIC_ARG_LIST
                        L_ANGLE "<"
                        TYPE_ARG
                          PAREN_TYPE
                            L_PAREN "("
                            PATH_TYPE
                              PATH
                                PATH_SEGMENT
                                  NAME_REF
                                    IDENT "Copy"
                            R_PAREN ")"
              WHITESPACE " "
              PLUS "+"
              WHITESPACE " "
              TYPE_BOUND
                L_PAREN "("
                QUESTION "?"
                PATH_TYPE
                  PATH
                    PATH_SEGMENT
                      NAME_REF
                        IDENT "Sized"
                R_PAREN ")"
              WHITESPACE " "
              PLUS "+"
              WHITESPACE " "
              TYPE_BOUND
                L_PAREN "("
                FOR_TYPE
                  FOR_KW "for"
                  GENERIC_PARAM_LIST
                    L_ANGLE "<"
                    LIFETIME_PARAM
                      LIFETIME
                        LIFETIME_IDENT "'a"
                    R_ANGLE ">"
                  WHITESPACE " "
                  PATH_TYPE
                    PATH
                      PATH_SEGMENT
                        NAME_REF
                          IDENT "Trait"
                        GENERIC_ARG_LIST
                          L_ANGLE "<"
                          LIFETIME_ARG
                            LIFETIME
                              LIFETIME_IDENT "'a"
                          R_ANGLE ">"
                R_PAREN ")"
        ERROR
          R_ANGLE ">"
        SEMICOLON ";"
        WHITESPACE "\n    "
        LET_STMT
          LET_KW "let"
          WHITESPACE " "
          WILDCARD_PAT
            UNDERSCORE "_"
          COLON ":"
          WHITESPACE " "
          PATH_TYPE
            PATH
              PATH_SEGMENT
                NAME_REF
                  IDENT "Box"
                GENERIC_ARG_LIST
                  L_ANGLE "<"
                  TYPE_ARG
                    PAREN_TYPE
                      L_PAREN "("
                      ERROR
                        QUESTION "?"
                  TYPE_ARG
                    PATH_TYPE
                      PATH
                        PATH_SEGMENT
                          NAME_REF
                            IDENT "Sized"
        ERROR
          R_PAREN ")"
        WHITESPACE " "
        ERROR
          PLUS "+"
        WHITESPACE " "
        EXPR_STMT
          BIN_EXPR
            BIN_EXPR
              TUPLE_EXPR
                L_PAREN "("
                CLOSURE_EXPR
                  FOR_KW "for"
                  GENERIC_PARAM_LIST
                    L_ANGLE "<"
                    LIFETIME_PARAM
                      LIFETIME
                        LIFETIME_IDENT "'a"
                    R_ANGLE ">"
                WHITESPACE " "
                BIN_EXPR
                  BIN_EXPR
                    PATH_EXPR
                      PATH
                        PATH_SEGMENT
                          NAME_REF
                            IDENT "Trait"
                    L_ANGLE "<"
                    ERROR
                      LIFETIME_IDENT "'a"
                  R_ANGLE ">"
                R_PAREN ")"
              WHITESPACE " "
              PLUS "+"
              WHITESPACE " "
              PAREN_EXPR
                L_PAREN "("
                PATH_EXPR
                  PATH
                    PATH_SEGMENT
                      NAME_REF
                        IDENT "Copy"
                R_PAREN ")"
            R_ANGLE ">"
            ERROR
              SEMICOLON ";"
        WHITESPACE "\n    "
        LET_STMT
          LET_KW "let"
          WHITESPACE " "
          WILDCARD_PAT
            UNDERSCORE "_"
          COLON ":"
          WHITESPACE " "
          DYN_TRAIT_TYPE
            TYPE_BOUND_LIST
              TYPE_BOUND
                PATH_TYPE
                  PATH
                    PATH_SEGMENT
                      NAME_REF
                        IDENT "Box"
                      GENERIC_ARG_LIST
                        L_ANGLE "<"
                        TYPE_ARG
                          PAREN_TYPE
                            L_PAREN "("
                            FOR_TYPE
                              FOR_KW "for"
                              GENERIC_PARAM_LIST
                                L_ANGLE "<"
                                LIFETIME_PARAM
                                  LIFETIME
                                    LIFETIME_IDENT "'a"
                                R_ANGLE ">"
                              WHITESPACE " "
                              PATH_TYPE
                                PATH
                                  PATH_SEGMENT
                                    NAME_REF
                                      IDENT "Trait"
                                    GENERIC_ARG_LIST
                                      L_ANGLE "<"
                                      LIFETIME_ARG
                                        LIFETIME
                                          LIFETIME_IDENT "'a"
                                      R_ANGLE ">"
                            R_PAREN ")"
              WHITESPACE " "
              PLUS "+"
              WHITESPACE " "
              TYPE_BOUND
                L_PAREN "("
                PATH_TYPE
                  PATH
                    PATH_SEGMENT
                      NAME_REF
                        IDENT "Copy"
                R_PAREN ")"
              WHITESPACE " "
              PLUS "+"
              WHITESPACE " "
              TYPE_BOUND
                L_PAREN "("
                QUESTION "?"
                PATH_TYPE
                  PATH
                    PATH_SEGMENT
                      NAME_REF
                        IDENT "Sized"
                R_PAREN ")"
        ERROR
          R_ANGLE ">"
        SEMICOLON ";"
        WHITESPACE "\n"
        R_CURLY "}"
  WHITESPACE "\n"
error 88: expected R_ANGLE
error 121: expected SEMICOLON
error 121: expected expression, item or let statement
error 140: expected type
error 141: expected R_PAREN
error 141: expected COMMA
error 146: expected R_ANGLE
error 146: expected SEMICOLON
error 146: expected expression, item or let statement
error 148: expected expression, item or let statement
error 158: expected `|`
error 158: expected COMMA
error 165: expected expression
error 168: expected expression
error 179: expected expression
error 180: expected SEMICOLON
error 215: expected R_ANGLE
error 235: expected SEMICOLON
error 235: expected expression, item or let statement
