<NME> Operators.txt
<BEF> Elm File
  ElmTypeAnnotation(TYPE_ANNOTATION)
    PsiElement(LEFT_PARENTHESIS)('(')
    PsiElement(OPERATOR_IDENTIFIER)('**')
    PsiElement(RIGHT_PARENTHESIS)(')')
    PsiWhiteSpace(' ')
    PsiElement(COLON)(':')
    PsiWhiteSpace(' ')
    ElmTypeRef(TYPE_REF)
      ElmTypeVariableRef(TYPE_VARIABLE_REF)
        PsiElement(LOWER_CASE_IDENTIFIER)('number')
      PsiWhiteSpace(' ')
      PsiElement(ARROW)('->')
      PsiWhiteSpace(' ')
      ElmTypeVariableRef(TYPE_VARIABLE_REF)
        PsiElement(LOWER_CASE_IDENTIFIER)('number')
      PsiWhiteSpace(' ')
      PsiElement(ARROW)('->')
      PsiWhiteSpace(' ')
      ElmTypeVariableRef(TYPE_VARIABLE_REF)
        PsiElement(LOWER_CASE_IDENTIFIER)('number')
  PsiElement(VIRTUAL_END_DECL)('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmOperatorDeclarationLeft(OPERATOR_DECLARATION_LEFT)
      PsiElement(LEFT_PARENTHESIS)('(')
      PsiElement(OPERATOR_IDENTIFIER)('**')
      PsiElement(RIGHT_PARENTHESIS)(')')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace(' ')
    ElmExpression(EXPRESSION)
      ElmListOfOperands(LIST_OF_OPERANDS)
        ElmOperatorAsFunction(OPERATOR_AS_FUNCTION)
          PsiElement(LEFT_PARENTHESIS)('(')
          PsiElement(OPERATOR_IDENTIFIER)('^')
          PsiElement(RIGHT_PARENTHESIS)(')')
  PsiWhiteSpace('\n')
  PsiElement(VIRTUAL_END_DECL)('\n')
  ElmOperatorConfig(OPERATOR_CONFIG)
    PsiElement(INFIXL)('infixl')
    PsiWhiteSpace(' ')
    PsiElement(NUMBER_LITERAL)('0')
    PsiWhiteSpace(' ')
    PsiElement(OPERATOR_IDENTIFIER)('**')
  PsiWhiteSpace('\n')
  PsiElement(VIRTUAL_END_DECL)('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
      PsiElement(LOWER_CASE_IDENTIFIER)('f1')
        PsiElement(NUMBER_LITERAL)('2')
      PsiWhiteSpace(' ')
      ElmOperator(OPERATOR)
        PsiElement(OPERATOR_IDENTIFIER)('**')
      PsiWhiteSpace(' ')
      ElmNumberConstantExpr(NUMBER_CONSTANT_EXPR)
        PsiElement(NUMBER_LITERAL)('3')
  PsiElement(VIRTUAL_END_DECL)('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
      PsiElement(LOWER_CASE_IDENTIFIER)('f2')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace(' ')
    ElmFunctionCallExpr(FUNCTION_CALL_EXPR)
      ElmOperatorAsFunctionExpr(OPERATOR_AS_FUNCTION_EXPR)
        PsiElement(LEFT_PARENTHESIS)('(')
        PsiElement(OPERATOR_IDENTIFIER)('**')
        PsiElement(RIGHT_PARENTHESIS)(')')
      PsiWhiteSpace(' ')
      ElmNumberConstantExpr(NUMBER_CONSTANT_EXPR)
        PsiElement(NUMBER_LITERAL)('2')
      PsiWhiteSpace(' ')
      ElmNumberConstantExpr(NUMBER_CONSTANT_EXPR)
        PsiElement(NUMBER_LITERAL)('3')
  PsiElement(VIRTUAL_END_DECL)('\n')
  PsiWhiteSpace('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
      PsiElement(LOWER_CASE_IDENTIFIER)('g1')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace(' ')
    ElmNegateExpr(NEGATE_EXPR)
      PsiElement(OPERATOR_IDENTIFIER)('-')
      ElmValueExpr(VALUE_EXPR)
        ElmValueQID(VALUE_QID)
          PsiElement(LOWER_CASE_IDENTIFIER)('f1')
  PsiElement(VIRTUAL_END_DECL)('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
      PsiElement(LOWER_CASE_IDENTIFIER)('g2')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace(' ')
    ElmBinOpExpr(BIN_OP_EXPR)
      ElmNumberConstantExpr(NUMBER_CONSTANT_EXPR)
        PsiElement(NUMBER_LITERAL)('8')
      PsiWhiteSpace(' ')
      ElmOperator(OPERATOR)
        PsiElement(OPERATOR_IDENTIFIER)('-')
      PsiWhiteSpace(' ')
      ElmValueExpr(VALUE_EXPR)
        ElmValueQID(VALUE_QID)
          PsiElement(LOWER_CASE_IDENTIFIER)('f1')
  PsiElement(VIRTUAL_END_DECL)('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
      PsiElement(LOWER_CASE_IDENTIFIER)('g3')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace(' ')
    ElmParenthesizedExpr(PARENTHESIZED_EXPR)
      PsiElement(LEFT_PARENTHESIS)('(')
      ElmBinOpExpr(BIN_OP_EXPR)
        ElmNegateExpr(NEGATE_EXPR)
          PsiElement(OPERATOR_IDENTIFIER)('-')
          ElmValueExpr(VALUE_EXPR)
            ElmValueQID(VALUE_QID)
              PsiElement(LOWER_CASE_IDENTIFIER)('f1')
        PsiWhiteSpace(' ')
        ElmOperator(OPERATOR)
          PsiElement(OPERATOR_IDENTIFIER)('+')
        PsiWhiteSpace(' ')
        ElmNumberConstantExpr(NUMBER_CONSTANT_EXPR)
          PsiElement(NUMBER_LITERAL)('7')
      PsiElement(RIGHT_PARENTHESIS)(')')
  PsiElement(VIRTUAL_END_DECL)('\n')
  PsiWhiteSpace('\n')
  ElmValueDeclaration(VALUE_DECLARATION)
    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
      PsiElement(LOWER_CASE_IDENTIFIER)('h1')
    PsiWhiteSpace(' ')
    PsiElement(EQ)('=')
    PsiWhiteSpace(' ')
    ElmBinOpExpr(BIN_OP_EXPR)
      ElmStringConstantExpr(STRING_CONSTANT_EXPR)
        PsiElement(OPEN_QUOTE)('"')
        PsiElement(REGULAR_STRING_PART)('hello')
        PsiElement(CLOSE_QUOTE)('"')
      PsiWhiteSpace(' ')
      ElmOperator(OPERATOR)
        PsiElement(OPERATOR_IDENTIFIER)('::')
      PsiWhiteSpace(' ')
      ElmListExpr(LIST_EXPR)
        PsiElement(LEFT_SQUARE_BRACKET)('[')
        ElmStringConstantExpr(STRING_CONSTANT_EXPR)
          PsiElement(OPEN_QUOTE)('"')
          PsiElement(REGULAR_STRING_PART)('world')
          PsiElement(CLOSE_QUOTE)('"')
        PsiElement(RIGHT_SQUARE_BRACKET)(']')
<MSG> Drop support for Elm 0.18

<DFF> @@ -1,49 +1,64 @@
 Elm File
-  ElmTypeAnnotation(TYPE_ANNOTATION)
+  ElmInfixDeclaration(INFIX_DECLARATION)
+    PsiElement(INFIX)('infix')
+    PsiWhiteSpace(' ')
+    PsiElement(LOWER_CASE_IDENTIFIER)('right')
+    PsiWhiteSpace(' ')
+    PsiElement(NUMBER_LITERAL)('5')
+    PsiWhiteSpace(' ')
     PsiElement(LEFT_PARENTHESIS)('(')
     PsiElement(OPERATOR_IDENTIFIER)('**')
     PsiElement(RIGHT_PARENTHESIS)(')')
     PsiWhiteSpace(' ')
-    PsiElement(COLON)(':')
+    PsiElement(EQ)('=')
     PsiWhiteSpace(' ')
-    ElmTypeRef(TYPE_REF)
-      ElmTypeVariableRef(TYPE_VARIABLE_REF)
-        PsiElement(LOWER_CASE_IDENTIFIER)('number')
-      PsiWhiteSpace(' ')
-      PsiElement(ARROW)('->')
-      PsiWhiteSpace(' ')
-      ElmTypeVariableRef(TYPE_VARIABLE_REF)
-        PsiElement(LOWER_CASE_IDENTIFIER)('number')
-      PsiWhiteSpace(' ')
-      PsiElement(ARROW)('->')
-      PsiWhiteSpace(' ')
-      ElmTypeVariableRef(TYPE_VARIABLE_REF)
-        PsiElement(LOWER_CASE_IDENTIFIER)('number')
+    ElmValueExpr(VALUE_EXPR)
+      ElmValueQID(VALUE_QID)
+        PsiElement(LOWER_CASE_IDENTIFIER)('power')
+  PsiWhiteSpace('\n')
   PsiElement(VIRTUAL_END_DECL)('\n')
   ElmValueDeclaration(VALUE_DECLARATION)
-    ElmOperatorDeclarationLeft(OPERATOR_DECLARATION_LEFT)
-      PsiElement(LEFT_PARENTHESIS)('(')
-      PsiElement(OPERATOR_IDENTIFIER)('**')
-      PsiElement(RIGHT_PARENTHESIS)(')')
+    ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
+      PsiElement(LOWER_CASE_IDENTIFIER)('power')
+      PsiWhiteSpace(' ')
+      ElmPattern(PATTERN)
+        ElmLowerPattern(LOWER_PATTERN)
+          PsiElement(LOWER_CASE_IDENTIFIER)('a')
+      PsiWhiteSpace(' ')
+      ElmPattern(PATTERN)
+        ElmLowerPattern(LOWER_PATTERN)
+          PsiElement(LOWER_CASE_IDENTIFIER)('b')
     PsiWhiteSpace(' ')
     PsiElement(EQ)('=')
     PsiWhiteSpace(' ')
     ElmExpression(EXPRESSION)
       ElmListOfOperands(LIST_OF_OPERANDS)
-        ElmOperatorAsFunction(OPERATOR_AS_FUNCTION)
+        ElmValueExpr(VALUE_EXPR)
+          ElmValueQID(VALUE_QID)
+            PsiElement(UPPER_CASE_IDENTIFIER)('List')
+            PsiElement(DOT)('.')
+            PsiElement(LOWER_CASE_IDENTIFIER)('product')
+        PsiWhiteSpace(' ')
+        ElmParenthesedExpression(PARENTHESED_EXPRESSION)
           PsiElement(LEFT_PARENTHESIS)('(')
-          PsiElement(OPERATOR_IDENTIFIER)('^')
+          ElmExpression(EXPRESSION)
+            ElmListOfOperands(LIST_OF_OPERANDS)
+              ElmValueExpr(VALUE_EXPR)
+                ElmValueQID(VALUE_QID)
+                  PsiElement(UPPER_CASE_IDENTIFIER)('List')
+                  PsiElement(DOT)('.')
+                  PsiElement(LOWER_CASE_IDENTIFIER)('repeat')
+              PsiWhiteSpace(' ')
+              ElmValueExpr(VALUE_EXPR)
+                ElmValueQID(VALUE_QID)
+                  PsiElement(LOWER_CASE_IDENTIFIER)('b')
+              PsiWhiteSpace(' ')
+              ElmValueExpr(VALUE_EXPR)
+                ElmValueQID(VALUE_QID)
+                  PsiElement(LOWER_CASE_IDENTIFIER)('a')
           PsiElement(RIGHT_PARENTHESIS)(')')
   PsiWhiteSpace('\n')
   PsiElement(VIRTUAL_END_DECL)('\n')
-  ElmOperatorConfig(OPERATOR_CONFIG)
-    PsiElement(INFIXL)('infixl')
-    PsiWhiteSpace(' ')
-    PsiElement(NUMBER_LITERAL)('0')
-    PsiWhiteSpace(' ')
-    PsiElement(OPERATOR_IDENTIFIER)('**')
-  PsiWhiteSpace('\n')
-  PsiElement(VIRTUAL_END_DECL)('\n')
   ElmValueDeclaration(VALUE_DECLARATION)
     ElmFunctionDeclarationLeft(FUNCTION_DECLARATION_LEFT)
       PsiElement(LOWER_CASE_IDENTIFIER)('f1')

Drop support for Elm 0.18