SOURCE_FILE
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "A"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
      R_ANGLE ">"
    SEMICOLON ";"
  WHITESPACE "\n"
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "B"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        TYPE_BOUND_LIST
      R_ANGLE ">"
    SEMICOLON ";"
  WHITESPACE "\n"
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "C"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        WHITESPACE " "
        TYPE_BOUND_LIST
          TYPE_BOUND
            LIFETIME
              LIFETIME_IDENT "'a"
      R_ANGLE ">"
    SEMICOLON ";"
  WHITESPACE "\n"
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "D"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        WHITESPACE " "
        TYPE_BOUND_LIST
          TYPE_BOUND
            LIFETIME
              LIFETIME_IDENT "'a"
          WHITESPACE " "
          PLUS "+"
      WHITESPACE " "
      R_ANGLE ">"
    SEMICOLON ";"
  WHITESPACE "\n"
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "E"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        WHITESPACE " "
        TYPE_BOUND_LIST
          TYPE_BOUND
            LIFETIME
              LIFETIME_IDENT "'a"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            LIFETIME
              LIFETIME_IDENT "'d"
      WHITESPACE " "
      R_ANGLE ">"
    SEMICOLON ";"
  WHITESPACE "\n"
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "F"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        WHITESPACE " "
        TYPE_BOUND_LIST
          TYPE_BOUND
            LIFETIME
              LIFETIME_IDENT "'a"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            LIFETIME
              LIFETIME_IDENT "'d"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "Clone"
      R_ANGLE ">"
    SEMICOLON ";"
  WHITESPACE "\n"
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "G"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        WHITESPACE " "
        TYPE_BOUND_LIST
          TYPE_BOUND
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "Clone"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "Copy"
      R_ANGLE ">"
    SEMICOLON ";"
  WHITESPACE "\n"
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "H"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        WHITESPACE " "
        TYPE_BOUND_LIST
          TYPE_BOUND
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  COLON2 "::"
                  NAME_REF
                    IDENT "Foo"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            PATH_TYPE
              PATH
                PATH
                  PATH_SEGMENT
                    NAME_REF
                      SELF_KW "self"
                COLON2 "::"
                PATH_SEGMENT
                  NAME_REF
                    IDENT "Bar"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            LIFETIME
              LIFETIME_IDENT "'a"
      R_ANGLE ">"
    SEMICOLON ";"
  WHITESPACE "\n"
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "I"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        TYPE_BOUND_LIST
      COMMA ","
      WHITESPACE " "
      TYPE_PARAM
        NAME
          IDENT "U"
        COLON ":"
        TYPE_BOUND_LIST
      COMMA ","
      R_ANGLE ">"
    SEMICOLON ";"
  WHITESPACE "\n"
  STRUCT
    STRUCT_KW "struct"
    WHITESPACE " "
    NAME
      IDENT "K"
    GENERIC_PARAM_LIST
      L_ANGLE "<"
      LIFETIME_PARAM
        LIFETIME
          LIFETIME_IDENT "'a"
        COLON ":"
        WHITESPACE " "
        LIFETIME
          LIFETIME_IDENT "'d"
      COMMA ","
      WHITESPACE " "
      LIFETIME_PARAM
        LIFETIME
          LIFETIME_IDENT "'d"
        COLON ":"
        WHITESPACE " "
        LIFETIME
          LIFETIME_IDENT "'a"
        WHITESPACE " "
        PLUS "+"
        WHITESPACE " "
        LIFETIME
          LIFETIME_IDENT "'b"
      COMMA ","
      WHITESPACE " "
      TYPE_PARAM
        NAME
          IDENT "T"
        COLON ":"
        WHITESPACE " "
        TYPE_BOUND_LIST
          TYPE_BOUND
            LIFETIME
              LIFETIME_IDENT "'a"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            LIFETIME
              LIFETIME_IDENT "'d"
          WHITESPACE " "
          PLUS "+"
          WHITESPACE " "
          TYPE_BOUND
            PATH_TYPE
              PATH
                PATH_SEGMENT
                  NAME_REF
                    IDENT "Clone"
      R_ANGLE ">"
    SEMICOLON ";"
