JetFile: FunctionTypes.jet
  NAMESPACE
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          MODIFIER_LIST
            ATTRIBUTE_ANNOTATION
              PsiElement(LBRACKET)('[')
              ATTRIBUTE
                USER_TYPE
                  USER_TYPE
                    PsiElement(IDENTIFIER)('a')
              PsiElement(RBRACKET)(']')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              PsiElement(IDENTIFIER)('a')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          USER_TYPE
            PsiElement(IDENTIFIER)('b')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          TYPE_REFERENCE
            USER_TYPE
              PsiElement(IDENTIFIER)('a')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          USER_TYPE
            PsiElement(IDENTIFIER)('b')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          ATTRIBUTE_ANNOTATION
            PsiElement(LBRACKET)('[')
            ATTRIBUTE
              USER_TYPE
                USER_TYPE
                  PsiElement(IDENTIFIER)('x')
            PsiElement(RBRACKET)(']')
          PsiWhiteSpace(' ')
          USER_TYPE
            PsiElement(IDENTIFIER)('b')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          TUPLE_TYPE
            PsiElement(LPAR)('(')
            PsiElement(RPAR)(')')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          VALUE_PARAMETER
            PsiElement(IDENTIFIER)('a')
            PsiWhiteSpace(' ')
            PsiElement(COLON)(':')
            PsiWhiteSpace(' ')
            TYPE_REFERENCE
              ATTRIBUTE_ANNOTATION
                PsiElement(LBRACKET)('[')
                ATTRIBUTE
                  USER_TYPE
                    USER_TYPE
                      PsiElement(IDENTIFIER)('a')
                PsiElement(RBRACKET)(']')
              PsiWhiteSpace(' ')
              USER_TYPE
                PsiElement(IDENTIFIER)('a')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          USER_TYPE
            PsiElement(IDENTIFIER)('b')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          VALUE_PARAMETER
            PsiElement(IDENTIFIER)('a')
            PsiWhiteSpace(' ')
            PsiElement(COLON)(':')
            PsiWhiteSpace(' ')
            TYPE_REFERENCE
              USER_TYPE
                PsiElement(IDENTIFIER)('a')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          USER_TYPE
            PsiElement(IDENTIFIER)('b')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          USER_TYPE
            PsiElement(IDENTIFIER)('b')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          TUPLE_TYPE
            PsiElement(LPAR)('(')
            PsiElement(RPAR)(')')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          VALUE_PARAMETER
            PsiElement(IDENTIFIER)('a')
            PsiWhiteSpace(' ')
            PsiElement(COLON)(':')
            PsiWhiteSpace(' ')
            TYPE_REFERENCE
              ATTRIBUTE_ANNOTATION
                PsiElement(LBRACKET)('[')
                ATTRIBUTE
                  USER_TYPE
                    USER_TYPE
                      PsiElement(IDENTIFIER)('a')
                PsiElement(RBRACKET)(']')
              PsiWhiteSpace(' ')
              USER_TYPE
                PsiElement(IDENTIFIER)('a')
          PsiElement(COMMA)(',')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              PsiElement(IDENTIFIER)('foo')
          PsiElement(COMMA)(',')
          PsiWhiteSpace(' ')
          VALUE_PARAMETER
            PsiElement(IDENTIFIER)('x')
            PsiWhiteSpace(' ')
            PsiElement(COLON)(':')
            PsiWhiteSpace(' ')
            TYPE_REFERENCE
              USER_TYPE
                PsiElement(IDENTIFIER)('bar')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          USER_TYPE
            PsiElement(IDENTIFIER)('b')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          TYPE_REFERENCE
            USER_TYPE
              PsiElement(IDENTIFIER)('foo')
          PsiElement(COMMA)(',')
          PsiWhiteSpace(' ')
          VALUE_PARAMETER
            PsiElement(IDENTIFIER)('a')
            PsiWhiteSpace(' ')
            PsiElement(COLON)(':')
            PsiWhiteSpace(' ')
            TYPE_REFERENCE
              USER_TYPE
                PsiElement(IDENTIFIER)('a')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          USER_TYPE
            PsiElement(IDENTIFIER)('b')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          TYPE_REFERENCE
            USER_TYPE
              PsiElement(IDENTIFIER)('foo')
          PsiElement(COMMA)(',')
          PsiWhiteSpace(' ')
          VALUE_PARAMETER
            PsiElement(IDENTIFIER)('a')
            PsiWhiteSpace(' ')
            PsiElement(COLON)(':')
            PsiWhiteSpace(' ')
            TYPE_REFERENCE
              PsiElement(LBRACE)('{')
              VALUE_PARAMETER_LIST
                PsiElement(LPAR)('(')
                TYPE_REFERENCE
                  USER_TYPE
                    PsiElement(IDENTIFIER)('a')
                PsiElement(RPAR)(')')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  PsiElement(IDENTIFIER)('b')
              PsiElement(RBRACE)('}')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          USER_TYPE
            PsiElement(IDENTIFIER)('b')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          TYPE_REFERENCE
            USER_TYPE
              PsiElement(IDENTIFIER)('foo')
          PsiElement(COMMA)(',')
          PsiWhiteSpace(' ')
          VALUE_PARAMETER
            PsiElement(IDENTIFIER)('a')
            PsiWhiteSpace(' ')
            PsiElement(COLON)(':')
            PsiWhiteSpace(' ')
            TYPE_REFERENCE
              PsiElement(LBRACE)('{')
              VALUE_PARAMETER_LIST
                PsiElement(LPAR)('(')
                TYPE_REFERENCE
                  USER_TYPE
                    PsiElement(IDENTIFIER)('a')
                PsiElement(RPAR)(')')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  PsiElement(IDENTIFIER)('b')
              PsiElement(RBRACE)('}')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          PsiElement(LBRACE)('{')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            TUPLE_TYPE
              PsiElement(LPAR)('(')
              PsiElement(RPAR)(')')
          PsiElement(RBRACE)('}')
        PsiElement(RBRACE)('}')
    PsiWhiteSpace('\n\n')
    TYPEDEF
      PsiElement(type)('type')
      PsiWhiteSpace(' ')
      PsiElement(IDENTIFIER)('f')
      PsiWhiteSpace(' ')
      TYPE_PARAMETER_LIST
        <empty list>
      PsiElement(EQ)('=')
      PsiWhiteSpace(' ')
      TYPE_REFERENCE
        PsiElement(LBRACE)('{')
        VALUE_PARAMETER_LIST
          PsiElement(LPAR)('(')
          MODIFIER_LIST
            PsiElement(lazy)('lazy')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            USER_TYPE
              PsiElement(IDENTIFIER)('foo')
          PsiElement(COMMA)(',')
          PsiWhiteSpace(' ')
          VALUE_PARAMETER
            MODIFIER_LIST
              PsiElement(out)('out')
            PsiWhiteSpace(' ')
            PsiElement(IDENTIFIER)('a')
            PsiWhiteSpace(' ')
            PsiElement(COLON)(':')
            PsiWhiteSpace(' ')
            TYPE_REFERENCE
              PsiElement(LBRACE)('{')
              VALUE_PARAMETER_LIST
                PsiElement(LPAR)('(')
                MODIFIER_LIST
                  PsiElement(ref)('ref')
                PsiWhiteSpace(' ')
                TYPE_REFERENCE
                  USER_TYPE
                    PsiElement(IDENTIFIER)('a')
                PsiElement(RPAR)(')')
              PsiWhiteSpace(' ')
              PsiElement(COLON)(':')
              PsiWhiteSpace(' ')
              TYPE_REFERENCE
                USER_TYPE
                  PsiElement(IDENTIFIER)('b')
              PsiElement(RBRACE)('}')
          PsiElement(RPAR)(')')
        PsiWhiteSpace(' ')
        PsiElement(COLON)(':')
        PsiWhiteSpace(' ')
        TYPE_REFERENCE
          PsiElement(LBRACE)('{')
          VALUE_PARAMETER_LIST
            PsiElement(LPAR)('(')
            PsiElement(RPAR)(')')
          PsiWhiteSpace(' ')
          PsiElement(COLON)(':')
          PsiWhiteSpace(' ')
          TYPE_REFERENCE
            TUPLE_TYPE
              PsiElement(LPAR)('(')
              PsiElement(RPAR)(')')
          PsiElement(RBRACE)('}')
        PsiElement(RBRACE)('}')