JetFile: When.jet
  NAMESPACE
    FUN
      PsiElement(fun)('fun')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('foo')
      TYPE_PARAMETER_LIST
        <empty list>
      VALUE_PARAMETER_LIST
        PsiElement(LPAR)('(')
        PsiElement(RPAR)(')')
      PsiWhiteSpace(' ')
      BLOCK
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        RETURN
          PsiElement(return)('return')
          PsiWhiteSpace(' ')
          BOOLEAN_CONSTANT
            PsiElement(false)('false')
        PsiWhiteSpace('\n\n  ')
        FUN
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('a')
          TYPE_PARAMETER_LIST
            <empty list>
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          FUNCTION_LITERAL
            PsiElement(LBRACE)('{')
            BODY
              WHEN
                PsiElement(when)('when')
                PsiElement(LPAR)('(')
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('x')
                PsiElement(RPAR)(')')
                PsiWhiteSpace(' ')
                PsiElement(LBRACE)('{')
                PsiWhiteSpace(' ')
                WHEN_ENTRY
                  WHEN_CONDITION
                    PsiElement(is)('is')
                    PsiWhiteSpace(' ')
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiWhiteSpace(' ')
                  PsiElement(DOUBLE_ARROW)('=>')
                  PsiWhiteSpace(' ')
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('b')
                PsiWhiteSpace(' ')
                PsiElement(RBRACE)('}')
            PsiElement(RBRACE)('}')
        PsiWhiteSpace('\n\n  ')
        PsiComment(EOL_COMMENT)('// foo')
        PsiWhiteSpace('\n  ')
        FUN
          PsiElement(fun)('fun')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('b')
          TYPE_PARAMETER_LIST
            <empty list>
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          BLOCK
            PsiElement(LBRACE)('{')
            PsiElement(RBRACE)('}')
        PsiWhiteSpace('\n\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    FUN
      PsiElement(fun)('fun')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('foo')
      TYPE_PARAMETER_LIST
        <empty list>
      VALUE_PARAMETER_LIST
        PsiElement(LPAR)('(')
        PsiElement(RPAR)(')')
      PsiWhiteSpace(' ')
      BLOCK
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        WHEN
          PsiElement(when)('when')
          PsiWhiteSpace(' ')
          PsiElement(LPAR)('(')
          REFERENCE_EXPRESSION
            PsiElement(IDENTIFIER)('e')
          PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(LBRACE)('{')
          PsiWhiteSpace('\n\n  ')
          PsiElement(RBRACE)('}')
        PsiWhiteSpace('\n  ')
        WHEN
          PsiElement(when)('when')
          PsiWhiteSpace(' ')
          PsiElement(LPAR)('(')
          REFERENCE_EXPRESSION
            PsiElement(IDENTIFIER)('e')
          PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(LBRACE)('{')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              TYPE_PATTERN
                TYPE_REFERENCE
                  USER_TYPE
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('a')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n  ')
          PsiElement(RBRACE)('}')
        PsiWhiteSpace('\n  ')
        WHEN
          PsiElement(when)('when')
          PsiWhiteSpace(' ')
          PsiElement(LPAR)('(')
          REFERENCE_EXPRESSION
            PsiElement(IDENTIFIER)('e')
          PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(LBRACE)('{')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('Tree')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('Tree')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(if)('if')
            PsiWhiteSpace(' ')
            PsiElement(LPAR)('(')
            BINARY_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('a')
              PsiWhiteSpace(' ')
              OPERATION_REFERENCE
                PsiElement(GT)('>')
              PsiWhiteSpace(' ')
              INTEGER_CONSTANT
                PsiElement(INTEGER_LITERAL)('5')
            PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              EXPRESSION_PATTERN
                NULL
                  PsiElement(null)('null')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              EXPRESSION_PATTERN
                INTEGER_CONSTANT
                  PsiElement(INTEGER_LITERAL)('1')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              TYPE_PATTERN
                TYPE_REFERENCE
                  USER_TYPE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('A')
                    PsiElement(DOT)('.')
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('b')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              EXPRESSION_PATTERN
                FLOAT_CONSTANT
                  PsiElement(FLOAT_CONSTANT)('1.0')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              EXPRESSION_PATTERN
                CHARACTER_CONSTANT
                  PsiElement(CHARACTER_LITERAL)(''c'')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              EXPRESSION_PATTERN
                STRING_CONSTANT
                  PsiElement(STRING_LITERAL)('"sadfsa"')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              EXPRESSION_PATTERN
                STRING_CONSTANT
                  PsiElement(RAW_STRING_LITERAL)('"""ddd"""')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              WILDCARD_PATTERN
                PsiElement(MUL)('*')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              BINDING_PATTERN
                PsiElement(val)('val')
                PsiWhiteSpace(' ')
                PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(is)('is')
                PsiWhiteSpace(' ')
                TYPE_PATTERN
                  TYPE_REFERENCE
                    USER_TYPE
                      REFERENCE_EXPRESSION
                        PsiElement(IDENTIFIER)('Foo')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              TUPLE_PATTERN
                PsiElement(LPAR)('(')
                TUPLE_PATTERN_ENTRY
                  BINDING_PATTERN
                    PsiElement(val)('val')
                    PsiWhiteSpace(' ')
                    PsiElement(IDENTIFIER)('a')
                    PsiWhiteSpace(' ')
                    PsiElement(is)('is')
                    PsiWhiteSpace(' ')
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('Foo')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  TYPE_PATTERN
                    TYPE_REFERENCE
                      USER_TYPE
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('b')
                PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n  ')
          PsiElement(RBRACE)('}')
        PsiWhiteSpace('\n  ')
        WHEN
          PsiElement(when)('when')
          PsiWhiteSpace(' ')
          PsiElement(LPAR)('(')
          WHEN
            PsiElement(when)('when')
            PsiElement(LPAR)('(')
            WHEN
              PsiElement(when)('when')
              PsiWhiteSpace(' ')
              PsiElement(LPAR)('(')
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('e')
              PsiElement(RPAR)(')')
              PsiWhiteSpace(' ')
              PsiElement(LBRACE)('{')
              PsiWhiteSpace('\n\n  ')
              PsiElement(RBRACE)('}')
            PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(LBRACE)('{')
            PsiWhiteSpace('\n\n  ')
            PsiElement(RBRACE)('}')
          PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(LBRACE)('{')
          PsiWhiteSpace('\n\n  ')
          PsiElement(RBRACE)('}')
        PsiWhiteSpace('\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    FUN
      PsiElement(fun)('fun')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('foo')
      TYPE_PARAMETER_LIST
        <empty list>
      VALUE_PARAMETER_LIST
        PsiElement(LPAR)('(')
        PsiElement(RPAR)(')')
      PsiWhiteSpace(' ')
      BLOCK
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        WHEN
          PsiElement(when)('when')
          PsiWhiteSpace(' ')
          PsiElement(LPAR)('(')
          PsiElement(val)('val')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('a')
          PsiWhiteSpace(' ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          REFERENCE_EXPRESSION
            PsiElement(IDENTIFIER)('e')
          PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(LBRACE)('{')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              TYPE_PATTERN
                TYPE_REFERENCE
                  USER_TYPE
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('Tree')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('Tree')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    EXPRESSION_PATTERN
                      NULL
                        PsiElement(null)('null')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    BINDING_PATTERN
                      PsiElement(val)('val')
                      PsiWhiteSpace(' ')
                      PsiElement(IDENTIFIER)('r')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                DOT_QUALIFIED_EXPRESSION
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('a')
                  PsiElement(DOT)('.')
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                DOT_QUALIFIED_EXPRESSION
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('a')
                  PsiElement(DOT)('.')
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    PsiElement(IDENTIFIER)('foo')
                    PsiWhiteSpace(' ')
                    PsiElement(EQ)('=')
                    PsiWhiteSpace(' ')
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    PsiElement(IDENTIFIER)('bar')
                    PsiWhiteSpace(' ')
                    PsiElement(EQ)('=')
                    PsiWhiteSpace(' ')
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                DOT_QUALIFIED_EXPRESSION
                  DOT_QUALIFIED_EXPRESSION
                    ROOT_NAMESPACE
                      PsiElement(namespace)('namespace')
                    PsiElement(DOT)('.')
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('a')
                  PsiElement(DOT)('.')
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    BINDING_PATTERN
                      PsiElement(val)('val')
                      PsiWhiteSpace(' ')
                      PsiElement(IDENTIFIER)('a')
                      PsiWhiteSpace(' ')
                      PsiElement(is)('is')
                      PsiWhiteSpace(' ')
                      TYPE_PATTERN
                        TYPE_REFERENCE
                          USER_TYPE
                            REFERENCE_EXPRESSION
                              PsiElement(IDENTIFIER)('T')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    EXPRESSION_PATTERN
                      INTEGER_CONSTANT
                        PsiElement(INTEGER_LITERAL)('1')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(in)('in')
              PsiWhiteSpace(' ')
              BINARY_EXPRESSION
                INTEGER_CONSTANT
                  PsiElement(INTEGER_LITERAL)('1')
                OPERATION_REFERENCE
                  PsiElement(RANGE)('..')
                INTEGER_CONSTANT
                  PsiElement(INTEGER_LITERAL)('2')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('dsf')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(NOT_IN)('!in')
              PsiWhiteSpace(' ')
              INTEGER_CONSTANT
                PsiElement(INTEGER_LITERAL)('2')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('sd')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(NOT_IS)('!is')
              PsiWhiteSpace(' ')
              TYPE_PATTERN
                TYPE_REFERENCE
                  USER_TYPE
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('t')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('d')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              TYPE_PATTERN
                TYPE_REFERENCE
                  FUNCTION_TYPE
                    PsiElement(LBRACE)('{')
                    VALUE_PARAMETER_LIST
                      PsiElement(LPAR)('(')
                      VALUE_PARAMETER
                        TYPE_REFERENCE
                          USER_TYPE
                            REFERENCE_EXPRESSION
                              PsiElement(IDENTIFIER)('foo')
                      PsiElement(RPAR)(')')
                    PsiWhiteSpace(' ')
                    PsiElement(COLON)(':')
                    PsiWhiteSpace(' ')
                    TYPE_REFERENCE
                      USER_TYPE
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('Bar')
                    PsiElement(RBRACE)('}')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('fgpp')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              TUPLE_PATTERN
                PsiElement(LPAR)('(')
                TUPLE_PATTERN_ENTRY
                  EXPRESSION_PATTERN
                    INTEGER_CONSTANT
                      PsiElement(INTEGER_LITERAL)('1')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  BINDING_PATTERN
                    PsiElement(val)('val')
                    PsiWhiteSpace(' ')
                    PsiElement(IDENTIFIER)('a')
                    PsiWhiteSpace(' ')
                    PsiElement(is)('is')
                    PsiWhiteSpace(' ')
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('Foo')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  WILDCARD_PATTERN
                    PsiElement(MUL)('*')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  TYPE_PATTERN
                    TYPE_REFERENCE
                      USER_TYPE
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('Foo')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  TYPE_PATTERN
                    TYPE_REFERENCE
                      USER_TYPE
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('bar')
                PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('d')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              TUPLE_PATTERN
                PsiElement(LPAR)('(')
                TUPLE_PATTERN_ENTRY
                  TYPE_PATTERN
                    TYPE_REFERENCE
                      USER_TYPE
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('Foo')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  BINDING_PATTERN
                    PsiElement(val)('val')
                    PsiWhiteSpace(' ')
                    PsiElement(IDENTIFIER)('a')
                    PsiWhiteSpace(' ')
                    PsiElement(in)('in')
                    PsiWhiteSpace(' ')
                    BINARY_EXPRESSION
                      INTEGER_CONSTANT
                        PsiElement(INTEGER_LITERAL)('1')
                      OPERATION_REFERENCE
                        PsiElement(RANGE)('..')
                      INTEGER_CONSTANT
                        PsiElement(INTEGER_LITERAL)('2')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  WILDCARD_PATTERN
                    PsiElement(MUL)('*')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  BINDING_PATTERN
                    PsiElement(val)('val')
                    PsiWhiteSpace(' ')
                    PsiElement(IDENTIFIER)('_')
                    PsiWhiteSpace(' ')
                    PsiElement(NOT_IS)('!is')
                    PsiWhiteSpace(' ')
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('Foo')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  BINDING_PATTERN
                    PsiElement(val)('val')
                    PsiWhiteSpace(' ')
                    PsiElement(IDENTIFIER)('bar')
                    PsiWhiteSpace(' ')
                    PsiElement(is)('is')
                    PsiWhiteSpace(' ')
                    DECOMPOSER_PATTERN
                      DOT_QUALIFIED_EXPRESSION
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('foo')
                        PsiElement(DOT)('.')
                        CALL_EXPRESSION
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('bar')
                          TYPE_ARGUMENT_LIST
                            PsiElement(LT)('<')
                            TYPE_PROJECTION
                              TYPE_REFERENCE
                                USER_TYPE
                                  REFERENCE_EXPRESSION
                                    PsiElement(IDENTIFIER)('a')
                            PsiElement(GT)('>')
                      PsiWhiteSpace(' ')
                      PsiElement(AT)('@')
                      PsiWhiteSpace(' ')
                      DECOMPOSER_ARGUMENT_LIST
                        PsiElement(LPAR)('(')
                        DECOMPOSER_ARGUMENT
                          TYPE_PATTERN
                            TYPE_REFERENCE
                              USER_TYPE
                                REFERENCE_EXPRESSION
                                  PsiElement(IDENTIFIER)('a')
                        PsiElement(RPAR)(')')
                PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('d')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              TUPLE_PATTERN
                PsiElement(LPAR)('(')
                TUPLE_PATTERN_ENTRY
                  TYPE_PATTERN
                    TYPE_REFERENCE
                      USER_TYPE
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('Int')
                PsiElement(COMMA)(',')
                PsiWhiteSpace(' ')
                TUPLE_PATTERN_ENTRY
                  TYPE_PATTERN
                    TYPE_REFERENCE
                      USER_TYPE
                        REFERENCE_EXPRESSION
                          PsiElement(IDENTIFIER)('Int')
                PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            INTEGER_CONSTANT
              PsiElement(INTEGER_LITERAL)('2')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              BINDING_PATTERN
                PsiElement(val)('val')
                PsiWhiteSpace(' ')
                PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(COLON)(':')
                PsiWhiteSpace(' ')
                TYPE_REFERENCE
                  USER_TYPE
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('Foo')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            INTEGER_CONSTANT
              PsiElement(INTEGER_LITERAL)('2')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            PsiElement(else)('else')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('foo')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            PsiElement(else)('else')
            PsiWhiteSpace(' ')
            PsiElement(continue)('continue')
          PsiWhiteSpace('\n  ')
          PsiElement(RBRACE)('}')
        PsiWhiteSpace('\n')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    FUN
      PsiElement(fun)('fun')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('foo')
      TYPE_PARAMETER_LIST
        <empty list>
      VALUE_PARAMETER_LIST
        PsiElement(LPAR)('(')
        PsiElement(RPAR)(')')
      PsiWhiteSpace(' ')
      BLOCK
        PsiElement(LBRACE)('{')
        PsiWhiteSpace('\n  ')
        WHEN
          PsiElement(when)('when')
          PsiWhiteSpace(' ')
          PsiElement(LPAR)('(')
          PsiElement(val)('val')
          PsiWhiteSpace(' ')
          PsiElement(IDENTIFIER)('a')
          PsiWhiteSpace(' ')
          PsiElement(EQ)('=')
          PsiWhiteSpace(' ')
          REFERENCE_EXPRESSION
            PsiElement(IDENTIFIER)('e')
          PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(LBRACE)('{')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              TYPE_PATTERN
                TYPE_REFERENCE
                  USER_TYPE
                    REFERENCE_EXPRESSION
                      PsiElement(IDENTIFIER)('Tree')
            PsiElement(COMMA)(',')
            PsiWhiteSpace('\n    ')
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('Tree')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    EXPRESSION_PATTERN
                      NULL
                        PsiElement(null)('null')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    BINDING_PATTERN
                      PsiElement(val)('val')
                      PsiWhiteSpace(' ')
                      PsiElement(IDENTIFIER)('r')
                  PsiElement(RPAR)(')')
            PsiElement(COMMA)(',')
            PsiWhiteSpace('\n    ')
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              INTEGER_CONSTANT
                PsiElement(INTEGER_LITERAL)('1')
            PsiElement(COMMA)(',')
            PsiWhiteSpace(' ')
            WHEN_CONDITION
              CALL_EXPRESSION
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('foo')
                VALUE_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  PsiElement(RPAR)(')')
            PsiElement(COMMA)(',')
            PsiWhiteSpace(' ')
            WHEN_CONDITION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('bar')
            PsiElement(COMMA)(',')
            PsiWhiteSpace(' ')
            WHEN_CONDITION
              BINARY_EXPRESSION
                INTEGER_CONSTANT
                  PsiElement(INTEGER_LITERAL)('2')
                PsiWhiteSpace(' ')
                OPERATION_REFERENCE
                  PsiElement(PLUS)('+')
                PsiWhiteSpace(' ')
                INTEGER_CONSTANT
                  PsiElement(INTEGER_LITERAL)('3')
            PsiElement(COMMA)(',')
            PsiWhiteSpace('\n    ')
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('a')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n    ')
          WHEN_ENTRY
            WHEN_CONDITION
              PsiElement(is)('is')
              PsiWhiteSpace(' ')
              DECOMPOSER_PATTERN
                DOT_QUALIFIED_EXPRESSION
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('a')
                  PsiElement(DOT)('.')
                  REFERENCE_EXPRESSION
                    PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                PsiElement(AT)('@')
                PsiWhiteSpace(' ')
                DECOMPOSER_ARGUMENT_LIST
                  PsiElement(LPAR)('(')
                  DECOMPOSER_ARGUMENT
                    BINDING_PATTERN
                      PsiElement(val)('val')
                      PsiWhiteSpace(' ')
                      PsiElement(IDENTIFIER)('b')
                  PsiElement(COMMA)(',')
                  PsiWhiteSpace(' ')
                  DECOMPOSER_ARGUMENT
                    TYPE_PATTERN
                      TYPE_REFERENCE
                        USER_TYPE
                          REFERENCE_EXPRESSION
                            PsiElement(IDENTIFIER)('b')
                  PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(if)('if')
            PsiWhiteSpace(' ')
            PsiElement(LPAR)('(')
            BINARY_EXPRESSION
              REFERENCE_EXPRESSION
                PsiElement(IDENTIFIER)('b')
              PsiWhiteSpace(' ')
              OPERATION_REFERENCE
                PsiElement(EQEQ)('==')
              PsiWhiteSpace(' ')
              BINARY_EXPRESSION
                REFERENCE_EXPRESSION
                  PsiElement(IDENTIFIER)('a')
                PsiWhiteSpace(' ')
                OPERATION_REFERENCE
                  PsiElement(PLUS)('+')
                PsiWhiteSpace(' ')
                INTEGER_CONSTANT
                  PsiElement(INTEGER_LITERAL)('3')
            PsiElement(RPAR)(')')
            PsiWhiteSpace(' ')
            PsiElement(DOUBLE_ARROW)('=>')
            PsiWhiteSpace(' ')
            REFERENCE_EXPRESSION
              PsiElement(IDENTIFIER)('c')
          PsiWhiteSpace('\n  ')
          PsiElement(RBRACE)('}')
        PsiWhiteSpace('\n')
        PsiElement(RBRACE)('}')