SOURCE_FILE
  IMPL
    IMPL_KW "impl"
    WHITESPACE " "
    PATH_TYPE
      PATH
        PATH_SEGMENT
          NAME_REF
            IDENT "U"
    WHITESPACE " "
    ASSOC_ITEM_LIST
      L_CURLY "{"
      WHITESPACE "\n    "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "f1"
        PARAM_LIST
          L_PAREN "("
          PARAM
            TUPLE_PAT
              L_PAREN "("
              IDENT_PAT
                NAME
                  IDENT "a"
              COMMA ","
              WHITESPACE " "
              IDENT_PAT
                NAME
                  IDENT "b"
              R_PAREN ")"
            COLON ":"
            WHITESPACE " "
            TUPLE_TYPE
              L_PAREN "("
              PATH_TYPE
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "usize"
              COMMA ","
              WHITESPACE " "
              PATH_TYPE
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      IDENT "usize"
              R_PAREN ")"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n    "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "f2"
        PARAM_LIST
          L_PAREN "("
          PARAM
            RECORD_PAT
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "S"
              WHITESPACE " "
              RECORD_PAT_FIELD_LIST
                L_CURLY "{"
                WHITESPACE " "
                RECORD_PAT_FIELD
                  IDENT_PAT
                    NAME
                      IDENT "a"
                COMMA ","
                WHITESPACE " "
                RECORD_PAT_FIELD
                  IDENT_PAT
                    NAME
                      IDENT "b"
                WHITESPACE " "
                R_CURLY "}"
            COLON ":"
            WHITESPACE " "
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "S"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n    "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "f3"
        PARAM_LIST
          L_PAREN "("
          PARAM
            TUPLE_STRUCT_PAT
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "NewType"
              L_PAREN "("
              IDENT_PAT
                NAME
                  IDENT "a"
              R_PAREN ")"
            COLON ":"
            WHITESPACE " "
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "NewType"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n    "
      FN
        FN_KW "fn"
        WHITESPACE " "
        NAME
          IDENT "f4"
        PARAM_LIST
          L_PAREN "("
          PARAM
            REF_PAT
              AMP "&"
              REF_PAT
                AMP "&"
                IDENT_PAT
                  NAME
                    IDENT "a"
            COLON ":"
            WHITESPACE " "
            REF_TYPE
              AMP "&"
              REF_TYPE
                AMP "&"
                PATH_TYPE
                  PATH
                    PATH_SEGMENT
                      NAME_REF
                        IDENT "usize"
          R_PAREN ")"
        WHITESPACE " "
        BLOCK_EXPR
          STMT_LIST
            L_CURLY "{"
            R_CURLY "}"
      WHITESPACE "\n"
      R_CURLY "}"
  WHITESPACE "\n"
