FILE
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('foo1')
    RsTypeParameterListImpl(TYPE_PARAMETER_LIST)
      PsiElement(<)('<')
      RsTypeParameterImpl(TYPE_PARAMETER)
        PsiElement(identifier)('U')
        RsTypeParamBoundsImpl(TYPE_PARAM_BOUNDS)
          PsiElement(:)(':')
          PsiWhiteSpace(' ')
          PsiElement(impl)('impl')
          PsiWhiteSpace(' ')
          RsPolyboundImpl(POLYBOUND)
            RsBoundImpl(BOUND)
              RsTraitRefImpl(TRAIT_REF)
                RsPathImpl(PATH)
                  PsiElement(identifier)('T')
      PsiElement(>)('>')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('foo2')
    RsTypeParameterListImpl(TYPE_PARAMETER_LIST)
      PsiElement(<)('<')
      RsTypeParameterImpl(TYPE_PARAMETER)
        PsiElement(identifier)('U')
        RsTypeParamBoundsImpl(TYPE_PARAM_BOUNDS)
          PsiElement(:)(':')
          PsiWhiteSpace(' ')
          PsiElement(impl)('impl')
          PsiWhiteSpace(' ')
          RsPolyboundImpl(POLYBOUND)
            RsBoundImpl(BOUND)
              RsTraitRefImpl(TRAIT_REF)
                RsPathImpl(PATH)
                  PsiElement(identifier)('T')
          PsiWhiteSpace(' ')
          PsiElement(+)('+')
          PsiWhiteSpace(' ')
          RsPolyboundImpl(POLYBOUND)
            RsBoundImpl(BOUND)
              RsTraitRefImpl(TRAIT_REF)
                RsPathImpl(PATH)
                  PsiElement(identifier)('T')
      PsiElement(>)('>')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('foo3')
    RsTypeParameterListImpl(TYPE_PARAMETER_LIST)
      PsiElement(<)('<')
      RsTypeParameterImpl(TYPE_PARAMETER)
        PsiElement(identifier)('T')
        RsTypeParamBoundsImpl(TYPE_PARAM_BOUNDS)
          PsiElement(:)(':')
          PsiWhiteSpace(' ')
          PsiElement(impl)('impl')
          PsiWhiteSpace(' ')
          RsPolyboundImpl(POLYBOUND)
            RsBoundImpl(BOUND)
              RsTraitRefImpl(TRAIT_REF)
                RsPathImpl(PATH)
                  PsiElement(identifier)('Fn')
                  RsValueParameterListImpl(VALUE_PARAMETER_LIST)
                    PsiElement(()('(')
                    PsiElement())(')')
                  PsiWhiteSpace(' ')
                  RsRetTypeImpl(RET_TYPE)
                    PsiElement(->)('->')
                    PsiWhiteSpace(' ')
                    RsPathTypeImpl(PATH_TYPE)
                      RsPathImpl(PATH)
                        PsiElement(identifier)('i32')
      PsiElement(>)('>')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('bar1')
    RsTypeParameterListImpl(TYPE_PARAMETER_LIST)
      PsiElement(<)('<')
      RsTypeParameterImpl(TYPE_PARAMETER)
        PsiElement(identifier)('U')
        RsTypeParamBoundsImpl(TYPE_PARAM_BOUNDS)
          PsiElement(:)(':')
          PsiWhiteSpace(' ')
          PsiElement(dyn_kw)('dyn')
          PsiWhiteSpace(' ')
          RsPolyboundImpl(POLYBOUND)
            RsBoundImpl(BOUND)
              RsTraitRefImpl(TRAIT_REF)
                RsPathImpl(PATH)
                  PsiElement(identifier)('T')
      PsiElement(>)('>')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('bar2')
    RsTypeParameterListImpl(TYPE_PARAMETER_LIST)
      PsiElement(<)('<')
      RsTypeParameterImpl(TYPE_PARAMETER)
        PsiElement(identifier)('U')
        RsTypeParamBoundsImpl(TYPE_PARAM_BOUNDS)
          PsiElement(:)(':')
          PsiWhiteSpace(' ')
          PsiElement(dyn_kw)('dyn')
          PsiWhiteSpace(' ')
          RsPolyboundImpl(POLYBOUND)
            RsBoundImpl(BOUND)
              RsTraitRefImpl(TRAIT_REF)
                RsPathImpl(PATH)
                  PsiElement(identifier)('T')
          PsiWhiteSpace(' ')
          PsiElement(+)('+')
          PsiWhiteSpace(' ')
          RsPolyboundImpl(POLYBOUND)
            RsBoundImpl(BOUND)
              RsTraitRefImpl(TRAIT_REF)
                RsPathImpl(PATH)
                  PsiElement(identifier)('T')
      PsiElement(>)('>')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('bar3')
    RsTypeParameterListImpl(TYPE_PARAMETER_LIST)
      PsiElement(<)('<')
      RsTypeParameterImpl(TYPE_PARAMETER)
        PsiElement(identifier)('T')
        RsTypeParamBoundsImpl(TYPE_PARAM_BOUNDS)
          PsiElement(:)(':')
          PsiWhiteSpace(' ')
          PsiElement(dyn_kw)('dyn')
          PsiWhiteSpace(' ')
          RsPolyboundImpl(POLYBOUND)
            RsBoundImpl(BOUND)
              RsTraitRefImpl(TRAIT_REF)
                RsPathImpl(PATH)
                  PsiElement(identifier)('Fn')
                  RsValueParameterListImpl(VALUE_PARAMETER_LIST)
                    PsiElement(()('(')
                    PsiElement())(')')
                  PsiWhiteSpace(' ')
                  RsRetTypeImpl(RET_TYPE)
                    PsiElement(->)('->')
                    PsiWhiteSpace(' ')
                    RsPathTypeImpl(PATH_TYPE)
                      RsPathImpl(PATH)
                        PsiElement(identifier)('i32')
      PsiElement(>)('>')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
