FILE
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('main')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('1')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(<)('<')
              PsiWhiteSpace(' ')
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('2')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                RsPathImpl(PATH)
                  PsiElement(identifier)('Some')
                PsiElement(()('(')
                RsPatIdentImpl(PAT_IDENT)
                  RsPatBindingImpl(PAT_BINDING)
                    PsiElement(identifier)('x')
                PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('o')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsOrPatImpl(OR_PAT)
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('Err')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('e')
                  PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('r')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsOrPatImpl(OR_PAT)
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('V1')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('s')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('V2')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('s')
                  PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('value')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsOrPatImpl(OR_PAT)
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('Cat')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('name')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('Dog')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('name')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('Parrot')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('name')
                  PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('animal')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                RsPathImpl(PATH)
                  PsiElement(identifier)('Ok')
                PsiElement(()('(')
                RsOrPatImpl(OR_PAT)
                  RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('V1')
                    PsiElement(()('(')
                    RsPatIdentImpl(PAT_IDENT)
                      RsPatBindingImpl(PAT_BINDING)
                        PsiElement(identifier)('s')
                    PsiElement())(')')
                  PsiWhiteSpace(' ')
                  PsiElement(|)('|')
                  PsiWhiteSpace(' ')
                  RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('V2')
                    PsiElement(()('(')
                    RsPatIdentImpl(PAT_IDENT)
                      RsPatBindingImpl(PAT_BINDING)
                        PsiElement(identifier)('s')
                    PsiElement())(')')
                PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('value')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsLetExprImpl(LET_EXPR)
                PsiElement(let)('let')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('V1')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('s')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(=)('=')
                PsiWhiteSpace(' ')
                RsPathExprImpl(PATH_EXPR)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('value')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(&&)('&&')
              PsiWhiteSpace(' ')
              RsLetExprImpl(LET_EXPR)
                PsiElement(let)('let')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('V2')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('s')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(=)('=')
                PsiWhiteSpace(' ')
                RsPathExprImpl(PATH_EXPR)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('x')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsBinaryExprImpl(BINARY_EXPR)
                RsLetExprImpl(LET_EXPR)
                  PsiElement(let)('let')
                  PsiWhiteSpace(' ')
                  RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('V1')
                    PsiElement(()('(')
                    RsPatIdentImpl(PAT_IDENT)
                      RsPatBindingImpl(PAT_BINDING)
                        PsiElement(identifier)('s')
                    PsiElement())(')')
                  PsiWhiteSpace(' ')
                  PsiElement(=)('=')
                  PsiWhiteSpace(' ')
                  RsPathExprImpl(PATH_EXPR)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('value')
                PsiWhiteSpace(' ')
                RsBinaryOpImpl(BINARY_OP)
                  PsiElement(&&)('&&')
                PsiWhiteSpace(' ')
                RsBinaryExprImpl(BINARY_EXPR)
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(INTEGER_LITERAL)('1')
                  PsiWhiteSpace(' ')
                  RsBinaryOpImpl(BINARY_OP)
                    PsiElement(<)('<')
                  PsiWhiteSpace(' ')
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(INTEGER_LITERAL)('2')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('x')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsBinaryExprImpl(BINARY_EXPR)
                RsBinaryExprImpl(BINARY_EXPR)
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(INTEGER_LITERAL)('1')
                  PsiWhiteSpace(' ')
                  RsBinaryOpImpl(BINARY_OP)
                    PsiElement(<)('<')
                  PsiWhiteSpace(' ')
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(INTEGER_LITERAL)('2')
                PsiWhiteSpace(' ')
                RsBinaryOpImpl(BINARY_OP)
                  PsiElement(&&)('&&')
                PsiWhiteSpace(' ')
                RsLetExprImpl(LET_EXPR)
                  PsiElement(let)('let')
                  PsiWhiteSpace(' ')
                  RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('V2')
                    PsiElement(()('(')
                    RsPatIdentImpl(PAT_IDENT)
                      RsPatBindingImpl(PAT_BINDING)
                        PsiElement(identifier)('s')
                    PsiElement())(')')
                  PsiWhiteSpace(' ')
                  PsiElement(=)('=')
                  PsiWhiteSpace(' ')
                  RsPathExprImpl(PATH_EXPR)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('value')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('x')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsLetExprImpl(LET_EXPR)
                PsiElement(let)('let')
                PsiWhiteSpace(' ')
                RsPatIdentImpl(PAT_IDENT)
                  RsPatBindingImpl(PAT_BINDING)
                    PsiElement(identifier)('x')
                PsiWhiteSpace(' ')
                PsiElement(=)('=')
                PsiWhiteSpace(' ')
                RsParenExprImpl(PAREN_EXPR)
                  PsiElement(()('(')
                  RsBinaryExprImpl(BINARY_EXPR)
                    RsLitExprImpl(LIT_EXPR)
                      PsiElement(BOOL_LITERAL)('true')
                    PsiWhiteSpace(' ')
                    RsBinaryOpImpl(BINARY_OP)
                      PsiElement(&&)('&&')
                    PsiWhiteSpace(' ')
                    RsLitExprImpl(LIT_EXPR)
                      PsiElement(BOOL_LITERAL)('false')
                  PsiElement())(')')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(&&)('&&')
              PsiWhiteSpace(' ')
              RsLetExprImpl(LET_EXPR)
                PsiElement(let)('let')
                PsiWhiteSpace(' ')
                RsPatIdentImpl(PAT_IDENT)
                  RsPatBindingImpl(PAT_BINDING)
                    PsiElement(identifier)('y')
                PsiWhiteSpace(' ')
                PsiElement(=)('=')
                PsiWhiteSpace(' ')
                RsParenExprImpl(PAREN_EXPR)
                  PsiElement(()('(')
                  RsBinaryExprImpl(BINARY_EXPR)
                    RsLitExprImpl(LIT_EXPR)
                      PsiElement(BOOL_LITERAL)('false')
                    PsiWhiteSpace(' ')
                    RsBinaryOpImpl(BINARY_OP)
                      PsiElement(&&)('&&')
                    PsiWhiteSpace(' ')
                    RsLitExprImpl(LIT_EXPR)
                      PsiElement(BOOL_LITERAL)('true')
                  PsiElement())(')')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('1')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(<)('<')
              PsiWhiteSpace(' ')
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('2')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                RsPathImpl(PATH)
                  PsiElement(identifier)('Some')
                PsiElement(()('(')
                RsPatIdentImpl(PAT_IDENT)
                  RsPatBindingImpl(PAT_BINDING)
                    PsiElement(identifier)('x')
                PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('o')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsOrPatImpl(OR_PAT)
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('Err')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('e')
                  PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('r')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsOrPatImpl(OR_PAT)
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('V1')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('s')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('V2')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('s')
                  PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('value')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsOrPatImpl(OR_PAT)
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('Cat')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('name')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('Dog')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('name')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(|)('|')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('Parrot')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('name')
                  PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('animal')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiWhiteSpace(' ')
              RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                RsPathImpl(PATH)
                  PsiElement(identifier)('Ok')
                PsiElement(()('(')
                RsOrPatImpl(OR_PAT)
                  RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('V1')
                    PsiElement(()('(')
                    RsPatIdentImpl(PAT_IDENT)
                      RsPatBindingImpl(PAT_BINDING)
                        PsiElement(identifier)('s')
                    PsiElement())(')')
                  PsiWhiteSpace(' ')
                  PsiElement(|)('|')
                  PsiWhiteSpace(' ')
                  RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('V2')
                    PsiElement(()('(')
                    RsPatIdentImpl(PAT_IDENT)
                      RsPatBindingImpl(PAT_BINDING)
                        PsiElement(identifier)('s')
                    PsiElement())(')')
                PsiElement())(')')
              PsiWhiteSpace(' ')
              PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('value')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsLetExprImpl(LET_EXPR)
                PsiElement(let)('let')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('V1')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('s')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(=)('=')
                PsiWhiteSpace(' ')
                RsPathExprImpl(PATH_EXPR)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('value')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(&&)('&&')
              PsiWhiteSpace(' ')
              RsLetExprImpl(LET_EXPR)
                PsiElement(let)('let')
                PsiWhiteSpace(' ')
                RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('V2')
                  PsiElement(()('(')
                  RsPatIdentImpl(PAT_IDENT)
                    RsPatBindingImpl(PAT_BINDING)
                      PsiElement(identifier)('s')
                  PsiElement())(')')
                PsiWhiteSpace(' ')
                PsiElement(=)('=')
                PsiWhiteSpace(' ')
                RsPathExprImpl(PATH_EXPR)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('x')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsBinaryExprImpl(BINARY_EXPR)
                RsLetExprImpl(LET_EXPR)
                  PsiElement(let)('let')
                  PsiWhiteSpace(' ')
                  RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('V1')
                    PsiElement(()('(')
                    RsPatIdentImpl(PAT_IDENT)
                      RsPatBindingImpl(PAT_BINDING)
                        PsiElement(identifier)('s')
                    PsiElement())(')')
                  PsiWhiteSpace(' ')
                  PsiElement(=)('=')
                  PsiWhiteSpace(' ')
                  RsPathExprImpl(PATH_EXPR)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('value')
                PsiWhiteSpace(' ')
                RsBinaryOpImpl(BINARY_OP)
                  PsiElement(&&)('&&')
                PsiWhiteSpace(' ')
                RsBinaryExprImpl(BINARY_EXPR)
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(INTEGER_LITERAL)('1')
                  PsiWhiteSpace(' ')
                  RsBinaryOpImpl(BINARY_OP)
                    PsiElement(<)('<')
                  PsiWhiteSpace(' ')
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(INTEGER_LITERAL)('2')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('x')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsBinaryExprImpl(BINARY_EXPR)
                RsBinaryExprImpl(BINARY_EXPR)
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(INTEGER_LITERAL)('1')
                  PsiWhiteSpace(' ')
                  RsBinaryOpImpl(BINARY_OP)
                    PsiElement(<)('<')
                  PsiWhiteSpace(' ')
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(INTEGER_LITERAL)('2')
                PsiWhiteSpace(' ')
                RsBinaryOpImpl(BINARY_OP)
                  PsiElement(&&)('&&')
                PsiWhiteSpace(' ')
                RsLetExprImpl(LET_EXPR)
                  PsiElement(let)('let')
                  PsiWhiteSpace(' ')
                  RsPatTupleStructImpl(PAT_TUPLE_STRUCT)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('V2')
                    PsiElement(()('(')
                    RsPatIdentImpl(PAT_IDENT)
                      RsPatBindingImpl(PAT_BINDING)
                        PsiElement(identifier)('s')
                    PsiElement())(')')
                  PsiWhiteSpace(' ')
                  PsiElement(=)('=')
                  PsiWhiteSpace(' ')
                  RsPathExprImpl(PATH_EXPR)
                    RsPathImpl(PATH)
                      PsiElement(identifier)('value')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(=)('=')
              PsiWhiteSpace(' ')
              RsPathExprImpl(PATH_EXPR)
                RsPathImpl(PATH)
                  PsiElement(identifier)('x')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
