{
  "name": "fsharp",
  "word": "identifier",
  "rules": {
    "file": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "named_module"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "namespace"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_module_elem"
          }
        }
      ]
    },
    "namespace": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "namespace"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "global"
            },
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "rec"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "long_identifier"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_module_elem"
          }
        }
      ]
    },
    "named_module": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attributes"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "module"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "access_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "long_identifier"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_module_elem"
          }
        }
      ]
    },
    "_module_elem": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "value_declaration"
        },
        {
          "type": "SYMBOL",
          "name": "module_defn"
        },
        {
          "type": "SYMBOL",
          "name": "module_abbrev"
        },
        {
          "type": "SYMBOL",
          "name": "import_decl"
        },
        {
          "type": "SYMBOL",
          "name": "fsi_directive_decl"
        },
        {
          "type": "SYMBOL",
          "name": "type_definition"
        },
        {
          "type": "SYMBOL",
          "name": "exception_definition"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "SYMBOL",
          "name": "preproc_if"
        }
      ]
    },
    "module_abbrev": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attributes"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "module"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "block",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_indent"
              },
              {
                "type": "SYMBOL",
                "name": "long_identifier"
              },
              {
                "type": "SYMBOL",
                "name": "_dedent"
              }
            ]
          }
        }
      ]
    },
    "module_defn": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "attributes"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "module"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "access_modifier"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "identifier"
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_indent"
                },
                {
                  "type": "SYMBOL",
                  "name": "_module_body"
                },
                {
                  "type": "SYMBOL",
                  "name": "_dedent"
                }
              ]
            }
          }
        ]
      }
    },
    "_module_body": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_module_elem"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "PREC",
            "value": 2,
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_newline"
                  },
                  "named": false,
                  "value": ";"
                },
                {
                  "type": "SYMBOL",
                  "name": "_module_elem"
                }
              ]
            }
          }
        }
      ]
    },
    "import_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "open"
        },
        {
          "type": "SYMBOL",
          "name": "long_identifier"
        }
      ]
    },
    "attributes": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "REPEAT1",
        "content": {
          "type": "SYMBOL",
          "name": "_attribute_set"
        }
      }
    },
    "_attribute_set": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[<"
        },
        {
          "type": "SYMBOL",
          "name": "attribute"
        },
        {
          "type": "PREC",
          "value": 2,
          "content": {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_newline"
                },
                {
                  "type": "SYMBOL",
                  "name": "attribute"
                }
              ]
            }
          }
        },
        {
          "type": "STRING",
          "value": ">]"
        }
      ]
    },
    "attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_attribute_target"
                },
                {
                  "type": "STRING",
                  "value": ":"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_object_construction"
        }
      ]
    },
    "_attribute_target": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "assembly"
        },
        {
          "type": "STRING",
          "value": "module"
        },
        {
          "type": "STRING",
          "value": "return"
        },
        {
          "type": "STRING",
          "value": "field"
        },
        {
          "type": "STRING",
          "value": "property"
        },
        {
          "type": "STRING",
          "value": "param"
        },
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "STRING",
          "value": "constructor"
        },
        {
          "type": "STRING",
          "value": "event"
        }
      ]
    },
    "_object_construction": {
      "type": "PREC_LEFT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_type"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "value_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attributes"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "PREC",
              "value": 7,
              "content": {
                "type": "SYMBOL",
                "name": "function_or_value_defn"
              }
            },
            {
              "type": "PREC",
              "value": 10,
              "content": {
                "type": "SYMBOL",
                "name": "do"
              }
            }
          ]
        }
      ]
    },
    "do": {
      "type": "PREC",
      "value": 9,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "do"
          },
          {
            "type": "SYMBOL",
            "name": "_expression_block"
          }
        ]
      }
    },
    "_function_or_value_defns": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_function_or_value_defn_body"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "and"
                },
                {
                  "type": "SYMBOL",
                  "name": "_function_or_value_defn_body"
                }
              ]
            }
          }
        ]
      }
    },
    "function_or_value_defn": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "let"
            },
            {
              "type": "STRING",
              "value": "let!"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_function_or_value_defn_body"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "rec"
                },
                {
                  "type": "SYMBOL",
                  "name": "_function_or_value_defns"
                }
              ]
            }
          ]
        }
      ]
    },
    "_function_or_value_defn_body": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "function_declaration_left"
            },
            {
              "type": "SYMBOL",
              "name": "value_declaration_left"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":"
                },
                {
                  "type": "SYMBOL",
                  "name": "_type"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "_expression_block"
          }
        }
      ]
    },
    "function_declaration_left": {
      "type": "PREC_LEFT",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "inline"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "access_modifier"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "PREC",
            "value": 100,
            "content": {
              "type": "SYMBOL",
              "name": "_identifier_or_op"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_arguments"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "argument_patterns"
          }
        ]
      }
    },
    "value_declaration_left": {
      "type": "PREC_LEFT",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "mutable"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "access_modifier"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_pattern"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_arguments"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "access_modifier": {
      "type": "PREC",
      "value": 100,
      "content": {
        "type": "TOKEN",
        "content": {
          "type": "PREC",
          "value": 1000,
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "private"
              },
              {
                "type": "STRING",
                "value": "internal"
              },
              {
                "type": "STRING",
                "value": "public"
              }
            ]
          }
        }
      }
    },
    "class_as_reference": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "as"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        }
      ]
    },
    "primary_constr_args": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attributes"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "access_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_pattern"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "class_as_reference"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "repeat_pattern": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern"
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "PREC",
              "value": 1,
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_pattern"
                  }
                ]
              }
            }
          }
        ]
      }
    },
    "_pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "null"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "STRING",
            "value": "_"
          },
          "named": true,
          "value": "wildcard_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "const"
        },
        {
          "type": "SYMBOL",
          "name": "as_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "disjunct_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "conjunct_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "cons_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "repeat_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "paren_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "list_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "array_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "record_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "typed_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "attribute_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "type_check_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "optional_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "identifier_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "named_field_pattern"
        }
      ]
    },
    "optional_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "?"
          },
          {
            "type": "SYMBOL",
            "name": "_pattern"
          }
        ]
      }
    },
    "type_check_pattern": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": ":?"
          },
          {
            "type": "SYMBOL",
            "name": "atomic_type"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "as"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "attribute_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "attributes"
          },
          {
            "type": "SYMBOL",
            "name": "_pattern"
          }
        ]
      }
    },
    "paren_pattern": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "SYMBOL",
            "name": "_pattern"
          },
          {
            "type": "STRING",
            "value": ")"
          }
        ]
      }
    },
    "as_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern"
          },
          {
            "type": "STRING",
            "value": "as"
          },
          {
            "type": "SYMBOL",
            "name": "identifier"
          }
        ]
      }
    },
    "cons_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern"
          },
          {
            "type": "STRING",
            "value": "::"
          },
          {
            "type": "SYMBOL",
            "name": "_pattern"
          }
        ]
      }
    },
    "disjunct_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern"
          },
          {
            "type": "STRING",
            "value": "|"
          },
          {
            "type": "SYMBOL",
            "name": "_pattern"
          }
        ]
      }
    },
    "conjunct_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern"
          },
          {
            "type": "STRING",
            "value": "&"
          },
          {
            "type": "SYMBOL",
            "name": "_pattern"
          }
        ]
      }
    },
    "typed_pattern": {
      "type": "PREC_LEFT",
      "value": -1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_pattern"
          },
          {
            "type": "STRING",
            "value": ":"
          },
          {
            "type": "SYMBOL",
            "name": "_type"
          },
          {
            "type": "FIELD",
            "name": "constraints",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "type_argument_constraints"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          }
        ]
      }
    },
    "argument_patterns": {
      "type": "PREC_LEFT",
      "value": 1000,
      "content": {
        "type": "REPEAT1",
        "content": {
          "type": "SYMBOL",
          "name": "_atomic_pattern"
        }
      }
    },
    "field_pattern": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "long_identifier"
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "SYMBOL",
            "name": "_pattern"
          }
        ]
      }
    },
    "_atomic_pattern": {
      "type": "PREC",
      "value": 1000,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "STRING",
            "value": "null"
          },
          {
            "type": "STRING",
            "value": "_"
          },
          {
            "type": "SYMBOL",
            "name": "const"
          },
          {
            "type": "SYMBOL",
            "name": "long_identifier"
          },
          {
            "type": "SYMBOL",
            "name": "list_pattern"
          },
          {
            "type": "SYMBOL",
            "name": "record_pattern"
          },
          {
            "type": "SYMBOL",
            "name": "array_pattern"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "("
              },
              {
                "type": "SYMBOL",
                "name": "_pattern"
              },
              {
                "type": "STRING",
                "value": ")"
              }
            ]
          }
        ]
      }
    },
    "_list_pattern_content": {
      "type": "FIELD",
      "name": "block",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_indent"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_newline"
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              },
              {
                "type": "SYMBOL",
                "name": "_pattern"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_newline"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_pattern"
                    }
                  ]
                }
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_dedent"
          }
        ]
      }
    },
    "list_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_list_pattern_content"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "array_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[|"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_list_pattern_content"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "|]"
        }
      ]
    },
    "record_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "SYMBOL",
            "name": "field_pattern"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_newline"
                },
                {
                  "type": "SYMBOL",
                  "name": "field_pattern"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "named_field": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "identifier"
                },
                {
                  "type": "STRING",
                  "value": "="
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_pattern"
        }
      ]
    },
    "named_field_pattern": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "SYMBOL",
            "name": "named_field"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_newline"
                },
                {
                  "type": "SYMBOL",
                  "name": "named_field"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": ")"
          }
        ]
      }
    },
    "identifier_pattern": {
      "type": "PREC_LEFT",
      "value": -1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "long_identifier_or_op"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_pattern"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_pattern"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "_expression_block": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_indent"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "SYMBOL",
          "name": "_dedent"
        }
      ]
    },
    "_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "null"
        },
        {
          "type": "SYMBOL",
          "name": "const"
        },
        {
          "type": "SYMBOL",
          "name": "paren_expression"
        },
        {
          "type": "SYMBOL",
          "name": "begin_end_expression"
        },
        {
          "type": "SYMBOL",
          "name": "long_identifier_or_op"
        },
        {
          "type": "SYMBOL",
          "name": "typed_expression"
        },
        {
          "type": "SYMBOL",
          "name": "infix_expression"
        },
        {
          "type": "SYMBOL",
          "name": "index_expression"
        },
        {
          "type": "SYMBOL",
          "name": "mutate_expression"
        },
        {
          "type": "SYMBOL",
          "name": "list_expression"
        },
        {
          "type": "SYMBOL",
          "name": "array_expression"
        },
        {
          "type": "SYMBOL",
          "name": "ce_expression"
        },
        {
          "type": "SYMBOL",
          "name": "prefixed_expression"
        },
        {
          "type": "SYMBOL",
          "name": "brace_expression"
        },
        {
          "type": "SYMBOL",
          "name": "anon_record_expression"
        },
        {
          "type": "SYMBOL",
          "name": "typecast_expression"
        },
        {
          "type": "SYMBOL",
          "name": "declaration_expression"
        },
        {
          "type": "SYMBOL",
          "name": "do_expression"
        },
        {
          "type": "SYMBOL",
          "name": "fun_expression"
        },
        {
          "type": "SYMBOL",
          "name": "function_expression"
        },
        {
          "type": "SYMBOL",
          "name": "sequential_expression"
        },
        {
          "type": "SYMBOL",
          "name": "if_expression"
        },
        {
          "type": "SYMBOL",
          "name": "while_expression"
        },
        {
          "type": "SYMBOL",
          "name": "for_expression"
        },
        {
          "type": "SYMBOL",
          "name": "match_expression"
        },
        {
          "type": "SYMBOL",
          "name": "try_expression"
        },
        {
          "type": "SYMBOL",
          "name": "literal_expression"
        },
        {
          "type": "SYMBOL",
          "name": "tuple_expression"
        },
        {
          "type": "SYMBOL",
          "name": "application_expression"
        },
        {
          "type": "SYMBOL",
          "name": "dot_expression"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "preproc_if_in_expression"
          },
          "named": true,
          "value": "preproc_if"
        }
      ]
    },
    "literal_expression": {
      "type": "PREC",
      "value": 21,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "<@"
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "STRING",
                "value": "@>"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "<@@"
              },
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "STRING",
                "value": "@@>"
              }
            ]
          }
        ]
      }
    },
    "long_identifier_or_op": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "long_identifier"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "long_identifier"
              },
              {
                "type": "STRING",
                "value": "."
              },
              {
                "type": "SYMBOL",
                "name": "_identifier_or_op"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_identifier_or_op"
          }
        ]
      }
    },
    "tuple_expression": {
      "type": "PREC_RIGHT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "STRING",
            "value": ","
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_tuple_marker"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          }
        ]
      }
    },
    "brace_expression": {
      "type": "PREC",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_indent"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "field_initializers"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "object_expression"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "with_field_expression"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_dedent"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "anon_record_expression": {
      "type": "PREC",
      "value": 21,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{|"
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_indent"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "field_initializers"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "with_field_expression"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_dedent"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "|}"
          }
        ]
      }
    },
    "_object_expression_inner": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_object_members"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "interface_implementation"
          }
        }
      ]
    },
    "object_expression": {
      "type": "PREC",
      "value": 25,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "new"
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "as"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_object_expression_inner"
          }
        ]
      }
    },
    "with_field_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "STRING",
          "value": "with"
        },
        {
          "type": "FIELD",
          "name": "block",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_indent"
              },
              {
                "type": "SYMBOL",
                "name": "field_initializers"
              },
              {
                "type": "SYMBOL",
                "name": "_dedent"
              }
            ]
          }
        }
      ]
    },
    "prefixed_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "return"
            },
            {
              "type": "STRING",
              "value": "return!"
            },
            {
              "type": "STRING",
              "value": "yield"
            },
            {
              "type": "STRING",
              "value": "yield!"
            },
            {
              "type": "STRING",
              "value": "lazy"
            },
            {
              "type": "STRING",
              "value": "assert"
            },
            {
              "type": "STRING",
              "value": "upcast"
            },
            {
              "type": "STRING",
              "value": "downcast"
            },
            {
              "type": "STRING",
              "value": "new"
            },
            {
              "type": "SYMBOL",
              "name": "prefix_op"
            }
          ]
        },
        {
          "type": "PREC_RIGHT",
          "value": 15,
          "content": {
            "type": "SYMBOL",
            "name": "_expression"
          }
        }
      ]
    },
    "typecast_expression": {
      "type": "PREC_RIGHT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": ":>"
              },
              {
                "type": "STRING",
                "value": ":?"
              },
              {
                "type": "STRING",
                "value": ":?>"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_type"
          }
        ]
      }
    },
    "for_expression": {
      "type": "PREC",
      "value": 9,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "for"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_pattern"
                  },
                  {
                    "type": "STRING",
                    "value": "in"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression_or_range"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  },
                  {
                    "type": "STRING",
                    "value": "="
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "to"
                      },
                      {
                        "type": "STRING",
                        "value": "downto"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression"
                  }
                ]
              }
            ]
          },
          {
            "type": "STRING",
            "value": "do"
          },
          {
            "type": "SYMBOL",
            "name": "_expression_block"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "done"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "while_expression": {
      "type": "PREC",
      "value": 9,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "while"
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "STRING",
            "value": "do"
          },
          {
            "type": "SYMBOL",
            "name": "_expression_block"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "done"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "_else_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "else"
        },
        {
          "type": "FIELD",
          "name": "else",
          "content": {
            "type": "SYMBOL",
            "name": "_expression_block"
          }
        }
      ]
    },
    "_then_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "then"
        },
        {
          "type": "FIELD",
          "name": "then",
          "content": {
            "type": "SYMBOL",
            "name": "_expression_block"
          }
        }
      ]
    },
    "elif_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "elif"
        },
        {
          "type": "FIELD",
          "name": "guard",
          "content": {
            "type": "SYMBOL",
            "name": "_expression_block"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_then_expression"
        }
      ]
    },
    "_if_branch": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "FIELD",
          "name": "guard",
          "content": {
            "type": "SYMBOL",
            "name": "_expression_block"
          }
        }
      ]
    },
    "if_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_if_branch"
        },
        {
          "type": "SYMBOL",
          "name": "_then_expression"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "elif_expression"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_else_expression"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "fun_expression": {
      "type": "PREC_RIGHT",
      "value": 8,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "fun"
          },
          {
            "type": "SYMBOL",
            "name": "argument_patterns"
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "SYMBOL",
            "name": "_expression_block"
          }
        ]
      }
    },
    "try_expression": {
      "type": "PREC",
      "value": 8,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "try"
          },
          {
            "type": "SYMBOL",
            "name": "_expression_block"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_newline"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "with"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "rules"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "finally"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression_block"
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    "match_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "match"
            },
            {
              "type": "STRING",
              "value": "match!"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_newline"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "with"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_newline"
                },
                {
                  "type": "SYMBOL",
                  "name": "rules"
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "block",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_indent"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "rules"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_dedent"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "function_expression": {
      "type": "PREC",
      "value": 8,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "function"
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_indent"
                },
                {
                  "type": "SYMBOL",
                  "name": "rules"
                },
                {
                  "type": "SYMBOL",
                  "name": "_dedent"
                }
              ]
            }
          }
        ]
      }
    },
    "mutate_expression": {
      "type": "PREC_RIGHT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "assignee",
            "content": {
              "type": "SYMBOL",
              "name": "_expression"
            }
          },
          {
            "type": "STRING",
            "value": "<-"
          },
          {
            "type": "FIELD",
            "name": "value",
            "content": {
              "type": "SYMBOL",
              "name": "_expression"
            }
          }
        ]
      }
    },
    "index_expression": {
      "type": "PREC",
      "value": 20,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "STRING",
            "value": ".["
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "FIELD",
                "name": "index",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "SYMBOL",
                "name": "slice_ranges"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "]"
          }
        ]
      }
    },
    "typed_expression": {
      "type": "PREC",
      "value": 21,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "PREC",
              "value": 21,
              "content": {
                "type": "STRING",
                "value": "<"
              }
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "types"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "PREC",
            "value": 21,
            "content": {
              "type": "STRING",
              "value": ">"
            }
          }
        ]
      }
    },
    "declaration_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "use"
                    },
                    {
                      "type": "STRING",
                      "value": "use!"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "identifier"
                },
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "SYMBOL",
                  "name": "_expression_block"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "function_or_value_defn"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "in",
          "content": {
            "type": "SYMBOL",
            "name": "_expression"
          }
        }
      ]
    },
    "do_expression": {
      "type": "PREC",
      "value": 8,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "do"
              },
              {
                "type": "STRING",
                "value": "do!"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_expression_block"
          }
        ]
      }
    },
    "_list_elements": {
      "type": "PREC_RIGHT",
      "value": 113,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_newline"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "PREC_RIGHT",
              "value": 113,
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_newline"
                    },
                    "named": false,
                    "value": ";"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression"
                  }
                ]
              }
            }
          }
        ]
      }
    },
    "_list_element": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_indent"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_list_elements"
            },
            {
              "type": "SYMBOL",
              "name": "_comp_or_range_expression"
            },
            {
              "type": "SYMBOL",
              "name": "slice_ranges"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_dedent"
        }
      ]
    },
    "list_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_list_element"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "array_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "[|"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_list_element"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "|]"
        }
      ]
    },
    "range_expression": {
      "type": "PREC",
      "value": 22,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "STRING",
            "value": ".."
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ".."
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "_expression_or_range": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "SYMBOL",
          "name": "range_expression"
        }
      ]
    },
    "rule": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "pattern",
            "content": {
              "type": "SYMBOL",
              "name": "_pattern"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "when"
                  },
                  {
                    "type": "FIELD",
                    "name": "guard",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_expression"
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SYMBOL",
              "name": "_expression_block"
            }
          }
        ]
      }
    },
    "rules": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "rule"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_newline"
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              },
              {
                "type": "STRING",
                "value": "|"
              },
              {
                "type": "SYMBOL",
                "name": "rule"
              }
            ]
          }
        }
      ]
    },
    "begin_end_expression": {
      "type": "PREC",
      "value": 21,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "begin"
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_indent"
                },
                {
                  "type": "SYMBOL",
                  "name": "_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "_dedent"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "end"
          }
        ]
      }
    },
    "paren_expression": {
      "type": "PREC",
      "value": 21,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "SYMBOL",
            "name": "_expression_block"
          },
          {
            "type": "STRING",
            "value": ")"
          }
        ]
      }
    },
    "_high_prec_app": {
      "type": "PREC_LEFT",
      "value": 20,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "unit"
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "IMMEDIATE_TOKEN",
                    "content": {
                      "type": "PREC",
                      "value": 10000,
                      "content": {
                        "type": "STRING",
                        "value": "("
                      }
                    }
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression_block"
                  },
                  {
                    "type": "STRING",
                    "value": ")"
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    "_low_prec_app": {
      "type": "PREC_LEFT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          }
        ]
      }
    },
    "application_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_high_prec_app"
        },
        {
          "type": "SYMBOL",
          "name": "_low_prec_app"
        }
      ]
    },
    "dot_expression": {
      "type": "PREC_RIGHT",
      "value": 19,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "base",
            "content": {
              "type": "SYMBOL",
              "name": "_expression"
            }
          },
          {
            "type": "STRING",
            "value": "."
          },
          {
            "type": "FIELD",
            "name": "field",
            "content": {
              "type": "SYMBOL",
              "name": "long_identifier_or_op"
            }
          }
        ]
      }
    },
    "infix_expression": {
      "type": "PREC_LEFT",
      "value": 16,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "SYMBOL",
            "name": "infix_op"
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          }
        ]
      }
    },
    "ce_expression": {
      "type": "PREC_LEFT",
      "value": 15,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "PREC",
            "value": -1,
            "content": {
              "type": "SYMBOL",
              "name": "_expression"
            }
          },
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_indent"
                },
                {
                  "type": "SYMBOL",
                  "name": "_comp_or_range_expression"
                },
                {
                  "type": "SYMBOL",
                  "name": "_dedent"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "sequential_expression": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "PREC_RIGHT",
              "value": 1,
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_newline"
                    },
                    "named": false,
                    "value": ";"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression"
                  }
                ]
              }
            }
          }
        ]
      }
    },
    "_comp_or_range_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "SYMBOL",
          "name": "short_comp_expression"
        }
      ]
    },
    "short_comp_expression": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "for"
        },
        {
          "type": "SYMBOL",
          "name": "_pattern"
        },
        {
          "type": "STRING",
          "value": "in"
        },
        {
          "type": "SYMBOL",
          "name": "_expression_or_range"
        },
        {
          "type": "STRING",
          "value": "->"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        }
      ]
    },
    "slice_ranges": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "slice_range"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "SYMBOL",
                "name": "slice_range"
              }
            ]
          }
        }
      ]
    },
    "_slice_range_special": {
      "type": "PREC_LEFT",
      "value": 23,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "from",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "TOKEN",
                "content": {
                  "type": "PREC",
                  "value": 22,
                  "content": {
                    "type": "STRING",
                    "value": ".."
                  }
                }
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "TOKEN",
                "content": {
                  "type": "PREC",
                  "value": 100022,
                  "content": {
                    "type": "STRING",
                    "value": ".."
                  }
                }
              },
              {
                "type": "FIELD",
                "name": "to",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "from",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "TOKEN",
                "content": {
                  "type": "PREC",
                  "value": 22,
                  "content": {
                    "type": "STRING",
                    "value": ".."
                  }
                }
              },
              {
                "type": "FIELD",
                "name": "to",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        ]
      }
    },
    "slice_range": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_slice_range_special"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "STRING",
          "value": "*"
        }
      ]
    },
    "_type": {
      "type": "PREC",
      "value": 4,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "simple_type"
          },
          {
            "type": "SYMBOL",
            "name": "generic_type"
          },
          {
            "type": "SYMBOL",
            "name": "paren_type"
          },
          {
            "type": "SYMBOL",
            "name": "function_type"
          },
          {
            "type": "SYMBOL",
            "name": "compound_type"
          },
          {
            "type": "SYMBOL",
            "name": "postfix_type"
          },
          {
            "type": "SYMBOL",
            "name": "list_type"
          },
          {
            "type": "SYMBOL",
            "name": "static_type"
          },
          {
            "type": "SYMBOL",
            "name": "type_argument"
          },
          {
            "type": "SYMBOL",
            "name": "constrained_type"
          },
          {
            "type": "SYMBOL",
            "name": "flexible_type"
          },
          {
            "type": "SYMBOL",
            "name": "anon_record_type"
          }
        ]
      }
    },
    "simple_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "long_identifier"
        },
        {
          "type": "SYMBOL",
          "name": "_static_type_identifier"
        }
      ]
    },
    "generic_type": {
      "type": "PREC_RIGHT",
      "value": 5,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "long_identifier"
          },
          {
            "type": "STRING",
            "value": "<"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_attributes"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": ">"
          }
        ]
      }
    },
    "paren_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "function_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_type"
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "SYMBOL",
            "name": "_type"
          }
        ]
      }
    },
    "compound_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_type"
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "PREC_RIGHT",
              "value": 0,
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "*"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_type"
                  }
                ]
              }
            }
          }
        ]
      }
    },
    "postfix_type": {
      "type": "PREC_LEFT",
      "value": 4,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_type"
          },
          {
            "type": "SYMBOL",
            "name": "long_identifier"
          }
        ]
      }
    },
    "list_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "STRING",
          "value": "[]"
        }
      ]
    },
    "static_type": {
      "type": "PREC",
      "value": 10,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_type"
          },
          {
            "type": "SYMBOL",
            "name": "type_arguments"
          }
        ]
      }
    },
    "constrained_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "type_argument"
          },
          {
            "type": "STRING",
            "value": ":>"
          },
          {
            "type": "SYMBOL",
            "name": "_type"
          }
        ]
      }
    },
    "flexible_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#"
          },
          {
            "type": "SYMBOL",
            "name": "_type"
          }
        ]
      }
    },
    "anon_record_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{|"
        },
        {
          "type": "FIELD",
          "name": "block",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_indent"
              },
              {
                "type": "SYMBOL",
                "name": "record_fields"
              },
              {
                "type": "SYMBOL",
                "name": "_dedent"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "|}"
        }
      ]
    },
    "types": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "PREC_LEFT",
            "value": 12,
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ","
                },
                {
                  "type": "SYMBOL",
                  "name": "_type"
                }
              ]
            }
          }
        }
      ]
    },
    "_static_type_identifier": {
      "type": "PREC",
      "value": 10,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "^"
              },
              {
                "type": "TOKEN",
                "content": {
                  "type": "PREC",
                  "value": 100,
                  "content": {
                    "type": "STRING",
                    "value": "'"
                  }
                }
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "identifier"
          }
        ]
      }
    },
    "_static_parameter": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "static_parameter_value"
        },
        {
          "type": "SYMBOL",
          "name": "named_static_parameter"
        }
      ]
    },
    "named_static_parameter": {
      "type": "PREC",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "identifier"
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "SYMBOL",
            "name": "static_parameter_value"
          }
        ]
      }
    },
    "type_attribute": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "SYMBOL",
          "name": "_static_parameter"
        }
      ]
    },
    "type_attributes": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_attribute"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "PREC_RIGHT",
            "value": 13,
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ","
                },
                {
                  "type": "SYMBOL",
                  "name": "type_attribute"
                }
              ]
            }
          }
        }
      ]
    },
    "atomic_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "#"
              },
              {
                "type": "SYMBOL",
                "name": "_type"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "type_argument"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "("
              },
              {
                "type": "SYMBOL",
                "name": "_type"
              },
              {
                "type": "STRING",
                "value": ")"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "long_identifier"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "long_identifier"
              },
              {
                "type": "STRING",
                "value": "<"
              },
              {
                "type": "SYMBOL",
                "name": "type_attributes"
              },
              {
                "type": "STRING",
                "value": ">"
              }
            ]
          }
        ]
      }
    },
    "constraint": {
      "type": "PREC",
      "value": 1000000,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":>"
              },
              {
                "type": "SYMBOL",
                "name": "_type"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": "null"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": "("
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "trait_member_constraint"
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "new"
                      },
                      {
                        "type": "STRING",
                        "value": ":"
                      },
                      {
                        "type": "STRING",
                        "value": "unit"
                      },
                      {
                        "type": "STRING",
                        "value": "->"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_type"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "STRING",
                "value": ")"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": "struct"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": "not"
              },
              {
                "type": "STRING",
                "value": "struct"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": "enum"
              },
              {
                "type": "STRING",
                "value": "<"
              },
              {
                "type": "SYMBOL",
                "name": "_type"
              },
              {
                "type": "STRING",
                "value": ">"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": "unmanaged"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": "equality"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": "comparison"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "STRING",
                "value": "delegate"
              },
              {
                "type": "STRING",
                "value": "<"
              },
              {
                "type": "SYMBOL",
                "name": "_type"
              },
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "SYMBOL",
                "name": "_type"
              },
              {
                "type": "STRING",
                "value": ">"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "default"
              },
              {
                "type": "SYMBOL",
                "name": "type_argument"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "SYMBOL",
                "name": "_type"
              }
            ]
          }
        ]
      }
    },
    "type_argument_constraints": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "when"
        },
        {
          "type": "SYMBOL",
          "name": "constraint"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "and"
              },
              {
                "type": "SYMBOL",
                "name": "constraint"
              }
            ]
          }
        }
      ]
    },
    "type_argument": {
      "type": "PREC",
      "value": 10,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "STRING",
            "value": "_"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_static_type_identifier"
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "or"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_static_type_identifier"
                    }
                  ]
                }
              }
            ]
          }
        ]
      }
    },
    "type_argument_defn": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attributes"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "type_argument"
        }
      ]
    },
    "type_arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "SYMBOL",
          "name": "type_argument_defn"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "PREC_LEFT",
            "value": 13,
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ","
                },
                {
                  "type": "SYMBOL",
                  "name": "type_argument_defn"
                }
              ]
            }
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_argument_constraints"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ">"
        }
      ]
    },
    "trait_member_constraint": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "static"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "member"
        },
        {
          "type": "SYMBOL",
          "name": "_identifier_or_op"
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "member_signature": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "identifier"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_arguments"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": ":"
          },
          {
            "type": "SYMBOL",
            "name": "curried_spec"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "with"
                      },
                      {
                        "type": "STRING",
                        "value": "get"
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "with"
                      },
                      {
                        "type": "STRING",
                        "value": "set"
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "with"
                      },
                      {
                        "type": "STRING",
                        "value": "get"
                      },
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "STRING",
                        "value": "set"
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "with"
                      },
                      {
                        "type": "STRING",
                        "value": "set"
                      },
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "STRING",
                        "value": "get"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "curried_spec": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "arguments_spec"
              },
              {
                "type": "STRING",
                "value": "->"
              }
            ]
          }
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "argument_spec": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "attributes"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "argument_name_spec"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "_type"
          }
        ]
      }
    },
    "arguments_spec": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "argument_spec"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "*"
              },
              {
                "type": "SYMBOL",
                "name": "argument_spec"
              }
            ]
          }
        }
      ]
    },
    "argument_name_spec": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "?"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": ":"
        }
      ]
    },
    "interface_spec": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "interface"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "static_parameter": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "static_parameter_value"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "id"
            },
            {
              "type": "STRING",
              "value": "="
            },
            {
              "type": "SYMBOL",
              "name": "static_parameter_value"
            }
          ]
        }
      ]
    },
    "static_parameter_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "const"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "const"
            },
            {
              "type": "SYMBOL",
              "name": "_expression"
            }
          ]
        }
      ]
    },
    "exception_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attributes"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "exception"
        },
        {
          "type": "FIELD",
          "name": "exception_name",
          "content": {
            "type": "SYMBOL",
            "name": "long_identifier"
          }
        },
        {
          "type": "STRING",
          "value": "of"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "type_definition": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "attributes"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "type"
          },
          {
            "type": "SYMBOL",
            "name": "_type_defn_body"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "attributes"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": "and"
                },
                {
                  "type": "SYMBOL",
                  "name": "_type_defn_body"
                }
              ]
            }
          }
        ]
      }
    },
    "_type_defn_body": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "delegate_type_defn"
        },
        {
          "type": "SYMBOL",
          "name": "record_type_defn"
        },
        {
          "type": "SYMBOL",
          "name": "union_type_defn"
        },
        {
          "type": "SYMBOL",
          "name": "interface_type_defn"
        },
        {
          "type": "SYMBOL",
          "name": "anon_type_defn"
        },
        {
          "type": "SYMBOL",
          "name": "enum_type_defn"
        },
        {
          "type": "SYMBOL",
          "name": "type_abbrev_defn"
        },
        {
          "type": "SYMBOL",
          "name": "type_extension"
        }
      ]
    },
    "type_name": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "attributes"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "access_modifier"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "FIELD",
                    "name": "type_name",
                    "content": {
                      "type": "SYMBOL",
                      "name": "long_identifier"
                    }
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "type_arguments"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "type_argument"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "FIELD",
                    "name": "type_name",
                    "content": {
                      "type": "SYMBOL",
                      "name": "identifier"
                    }
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    "type_extension": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_name"
        },
        {
          "type": "SYMBOL",
          "name": "type_extension_elements"
        }
      ]
    },
    "delegate_type_defn": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_name"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "block",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_indent"
              },
              {
                "type": "SYMBOL",
                "name": "delegate_signature"
              },
              {
                "type": "SYMBOL",
                "name": "_dedent"
              }
            ]
          }
        }
      ]
    },
    "delegate_signature": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "delegate"
        },
        {
          "type": "STRING",
          "value": "of"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "type_abbrev_defn": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_name"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "block",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_indent"
              },
              {
                "type": "SYMBOL",
                "name": "_type"
              },
              {
                "type": "SYMBOL",
                "name": "_dedent"
              }
            ]
          }
        }
      ]
    },
    "_class_type_body_inner": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "class_inherits_decl"
        },
        {
          "type": "SYMBOL",
          "name": "type_extension_elements"
        }
      ]
    },
    "_class_type_body": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_class_type_body_inner"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_newline"
              },
              {
                "type": "SYMBOL",
                "name": "_class_type_body_inner"
              }
            ]
          }
        }
      ]
    },
    "_record_type_defn_inner": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "access_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "FIELD",
          "name": "block",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_indent"
              },
              {
                "type": "SYMBOL",
                "name": "record_fields"
              },
              {
                "type": "SYMBOL",
                "name": "_dedent"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "}"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_extension_elements"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "record_type_defn": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "type_name"
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_indent"
                },
                {
                  "type": "SYMBOL",
                  "name": "_record_type_defn_inner"
                },
                {
                  "type": "SYMBOL",
                  "name": "_dedent"
                }
              ]
            }
          }
        ]
      }
    },
    "record_fields": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "record_field"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_newline"
              },
              {
                "type": "SYMBOL",
                "name": "record_field"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_newline"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "record_field": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attributes"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "mutable"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "access_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "enum_type_defn": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_name"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "block",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_indent"
              },
              {
                "type": "SYMBOL",
                "name": "enum_type_cases"
              },
              {
                "type": "SYMBOL",
                "name": "_dedent"
              }
            ]
          }
        }
      ]
    },
    "enum_type_cases": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "|"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "enum_type_case"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "|"
                },
                {
                  "type": "SYMBOL",
                  "name": "enum_type_case"
                }
              ]
            },
            {
              "type": "REPEAT1",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "|"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "enum_type_case"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "enum_type_case": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "const"
        }
      ]
    },
    "_union_type_defn_inner": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "access_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "union_type_cases"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_extension_elements"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "union_type_defn": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "type_name"
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_indent"
                },
                {
                  "type": "SYMBOL",
                  "name": "_union_type_defn_inner"
                },
                {
                  "type": "SYMBOL",
                  "name": "_dedent"
                }
              ]
            }
          }
        ]
      }
    },
    "union_type_cases": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "union_type_case"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "|"
              },
              {
                "type": "SYMBOL",
                "name": "union_type_case"
              }
            ]
          }
        }
      ]
    },
    "union_type_case": {
      "type": "PREC",
      "value": 8,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "attributes"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "identifier"
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  },
                  {
                    "type": "STRING",
                    "value": "of"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "union_type_fields"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  },
                  {
                    "type": "STRING",
                    "value": ":"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_type"
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    "union_type_fields": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "union_type_field"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "*"
              },
              {
                "type": "SYMBOL",
                "name": "union_type_field"
              }
            ]
          }
        }
      ]
    },
    "union_type_field": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_type"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "identifier"
              },
              {
                "type": "STRING",
                "value": ":"
              },
              {
                "type": "SYMBOL",
                "name": "_type"
              }
            ]
          }
        ]
      }
    },
    "interface_type_defn": {
      "type": "PREC_LEFT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "type_name"
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_interface_begin"
                },
                "named": false,
                "value": "interface"
              },
              {
                "type": "FIELD",
                "name": "block",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_indent"
                    },
                    {
                      "type": "REPEAT1",
                      "content": {
                        "type": "SYMBOL",
                        "name": "_type_defn_elements"
                      }
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_dedent"
                    }
                  ]
                }
              },
              {
                "type": "STRING",
                "value": "end"
              }
            ]
          }
        ]
      }
    },
    "anon_type_defn": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "type_name"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "primary_constr_args"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "FIELD",
                "name": "block",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_indent"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_class_type_body"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_dedent"
                    }
                  ]
                }
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "begin"
                      },
                      {
                        "type": "STRING",
                        "value": "class"
                      }
                    ]
                  },
                  {
                    "type": "FIELD",
                    "name": "block",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_indent"
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "SYMBOL",
                              "name": "_class_type_body"
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_dedent"
                        }
                      ]
                    }
                  },
                  {
                    "type": "STRING",
                    "value": "end"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_struct_begin"
                    },
                    "named": false,
                    "value": "struct"
                  },
                  {
                    "type": "FIELD",
                    "name": "block",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_indent"
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "SYMBOL",
                            "name": "_type_defn_elements"
                          }
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_dedent"
                        }
                      ]
                    }
                  },
                  {
                    "type": "STRING",
                    "value": "end"
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    "_class_function_or_value_defn": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attributes"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "static"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "function_or_value_defn"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "do"
                },
                {
                  "type": "SYMBOL",
                  "name": "_expression_block"
                }
              ]
            }
          ]
        }
      ]
    },
    "_type_extension_inner": {
      "type": "REPEAT1",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_class_function_or_value_defn"
          },
          {
            "type": "SYMBOL",
            "name": "_type_defn_elements"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "preproc_if_in_class_definition"
            },
            "named": true,
            "value": "preproc_if"
          }
        ]
      }
    },
    "type_extension_elements": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "with"
                  },
                  {
                    "type": "FIELD",
                    "name": "block",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_indent"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_type_extension_inner"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_dedent"
                        }
                      ]
                    }
                  }
                ]
              },
              {
                "type": "SYMBOL",
                "name": "_type_extension_inner"
              }
            ]
          }
        ]
      }
    },
    "_type_defn_elements": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "member_defn"
        },
        {
          "type": "SYMBOL",
          "name": "interface_implementation"
        }
      ]
    },
    "interface_implementation": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "interface"
          },
          {
            "type": "SYMBOL",
            "name": "_type"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_object_members"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "_member_defns": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "member_defn"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_newline"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "member_defn"
                }
              ]
            }
          }
        ]
      }
    },
    "_object_members": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "with"
        },
        {
          "type": "FIELD",
          "name": "block",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_indent"
              },
              {
                "type": "SYMBOL",
                "name": "_member_defns"
              },
              {
                "type": "SYMBOL",
                "name": "_dedent"
              }
            ]
          }
        }
      ]
    },
    "member_defn": {
      "type": "PREC",
      "value": 100016,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "attributes"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "static"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "STRING",
                    "value": "member"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "inline"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "access_modifier"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "method_or_prop_defn"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "abstract"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "member"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "access_modifier"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "member_signature"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "member"
                  },
                  {
                    "type": "STRING",
                    "value": "val"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "property_or_ident"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_val_property_defn"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "override"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "access_modifier"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "method_or_prop_defn"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "default"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "access_modifier"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "method_or_prop_defn"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "static"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "STRING",
                    "value": "val"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "mutable"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "access_modifier"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  },
                  {
                    "type": "STRING",
                    "value": ":"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_type"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "static"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "value_declaration"
                  }
                ]
              },
              {
                "type": "SYMBOL",
                "name": "additional_constr_defn"
              }
            ]
          }
        ]
      }
    },
    "property_or_ident": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "instance",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              }
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "FIELD",
              "name": "method",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              }
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_identifier_or_op"
        }
      ]
    },
    "_method_defn": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "type_arguments"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "args",
              "content": {
                "type": "REPEAT1",
                "content": {
                  "type": "SYMBOL",
                  "name": "_pattern"
                }
              }
            },
            {
              "type": "STRING",
              "value": "="
            },
            {
              "type": "SYMBOL",
              "name": "_expression_block"
            }
          ]
        }
      ]
    },
    "_property_accessor_body": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "argument_patterns"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":"
                },
                {
                  "type": "SYMBOL",
                  "name": "_type"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        }
      ]
    },
    "property_accessor": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "get"
            },
            {
              "type": "STRING",
              "value": "set"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_property_accessor_body"
        }
      ]
    },
    "_property_defn": {
      "type": "PREC_LEFT",
      "value": 100017,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ":"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_type"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "="
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression_block"
                  }
                ]
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "with"
                  },
                  {
                    "type": "FIELD",
                    "name": "block",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_indent"
                        },
                        {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "SYMBOL",
                              "name": "property_accessor"
                            },
                            {
                              "type": "REPEAT",
                              "content": {
                                "type": "SEQ",
                                "members": [
                                  {
                                    "type": "STRING",
                                    "value": "and"
                                  },
                                  {
                                    "type": "SYMBOL",
                                    "name": "property_accessor"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_dedent"
                        }
                      ]
                    }
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    "_val_property_defn": {
      "type": "PREC_LEFT",
      "value": 100016,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ":"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_type"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "SYMBOL",
            "name": "_expression"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "with"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "get"
                      },
                      {
                        "type": "STRING",
                        "value": "set"
                      },
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": "get"
                          },
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "STRING",
                            "value": "set"
                          }
                        ]
                      },
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": "set"
                          },
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "STRING",
                            "value": "get"
                          }
                        ]
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "method_or_prop_defn": {
      "type": "PREC",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "property_or_ident"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_method_defn"
              },
              {
                "type": "SYMBOL",
                "name": "_property_defn"
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "with"
                  },
                  {
                    "type": "FIELD",
                    "name": "block",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_indent"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_function_or_value_defns"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_dedent"
                        }
                      ]
                    }
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    "additional_constr_defn": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "access_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "new"
        },
        {
          "type": "SYMBOL",
          "name": "_pattern"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_expression_block"
        }
      ]
    },
    "class_inherits_decl": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "inherit"
          },
          {
            "type": "FIELD",
            "name": "block",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_indent"
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_type"
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_expression"
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_dedent"
                }
              ]
            }
          }
        ]
      }
    },
    "field_initializer": {
      "type": "PREC",
      "value": 17,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "field",
            "content": {
              "type": "SYMBOL",
              "name": "long_identifier"
            }
          },
          {
            "type": "TOKEN",
            "content": {
              "type": "PREC",
              "value": 10000000,
              "content": {
                "type": "STRING",
                "value": "="
              }
            }
          },
          {
            "type": "FIELD",
            "name": "value",
            "content": {
              "type": "SYMBOL",
              "name": "_expression"
            }
          }
        ]
      }
    },
    "field_initializers": {
      "type": "PREC",
      "value": 10000000,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "field_initializer"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_newline"
                },
                {
                  "type": "SYMBOL",
                  "name": "field_initializer"
                }
              ]
            }
          }
        ]
      }
    },
    "_escape_char": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "PREC",
        "value": 100,
        "content": {
          "type": "PATTERN",
          "value": "\\\\[\"\\'ntbrafv]"
        }
      }
    },
    "_non_escape_char": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "PREC",
        "value": 100,
        "content": {
          "type": "PATTERN",
          "value": "\\\\[^\"\\'ntbrafv]"
        }
      }
    },
    "_simple_char_char": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "[^\\n\\t\\r\\u0008\\a\\f\\v'\\\\]"
      }
    },
    "_unicodegraph_short": {
      "type": "PATTERN",
      "value": "\\\\u[0-9a-fA-F]{4}"
    },
    "_unicodegraph_long": {
      "type": "PATTERN",
      "value": "\\\\u[0-9a-fA-F]{8}"
    },
    "_trigraph": {
      "type": "PATTERN",
      "value": "\\\\[0-9]{3}"
    },
    "_char_char": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_char_char"
        },
        {
          "type": "SYMBOL",
          "name": "_escape_char"
        },
        {
          "type": "SYMBOL",
          "name": "_trigraph"
        },
        {
          "type": "SYMBOL",
          "name": "_unicodegraph_short"
        }
      ]
    },
    "_simple_string_char": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_inside_string_marker"
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "PREC",
            "value": 1,
            "content": {
              "type": "PATTERN",
              "value": "[^\\t\\r\\u0008\\a\\f\\v\\\\\"]"
            }
          }
        }
      ]
    },
    "_string_char": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_string_char"
        },
        {
          "type": "SYMBOL",
          "name": "_escape_char"
        },
        {
          "type": "SYMBOL",
          "name": "_trigraph"
        },
        {
          "type": "SYMBOL",
          "name": "_unicodegraph_short"
        },
        {
          "type": "SYMBOL",
          "name": "_non_escape_char"
        },
        {
          "type": "SYMBOL",
          "name": "_unicodegraph_long"
        }
      ]
    },
    "char": {
      "type": "PREC",
      "value": -1,
      "content": {
        "type": "PATTERN",
        "value": "'([^\\n\\t\\r\\u0008\\a\\f\\v\\\\]|\\\\[\"\\'ntbrafv]|\\\\[0-9]{3}|\\\\u[0-9a-fA-F]{4}|(\\\\\\\\))?'B?"
      }
    },
    "format_string_eval": {
      "type": "SEQ",
      "members": [
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "PREC",
            "value": 1000,
            "content": {
              "type": "STRING",
              "value": "{"
            }
          }
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "format_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "TOKEN",
          "content": {
            "type": "PREC",
            "value": 100,
            "content": {
              "type": "STRING",
              "value": "$\""
            }
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "format_string_eval"
              },
              {
                "type": "SYMBOL",
                "name": "_string_char"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "\""
        }
      ]
    },
    "_string_literal": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "\""
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_string_char"
          }
        },
        {
          "type": "STRING",
          "value": "\""
        }
      ]
    },
    "string": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_string_literal"
        },
        {
          "type": "SYMBOL",
          "name": "format_string"
        }
      ]
    },
    "_verbatim_string_char": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_string_char"
        },
        {
          "type": "SYMBOL",
          "name": "_non_escape_char"
        },
        {
          "type": "STRING",
          "value": "\\"
        },
        {
          "type": "PATTERN",
          "value": "\\\"\\\""
        }
      ]
    },
    "verbatim_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "@\""
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_verbatim_string_char"
          }
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "\""
          }
        }
      ]
    },
    "bytearray": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "\""
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_string_char"
          }
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "\"B"
          }
        }
      ]
    },
    "verbatim_bytearray": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "@\""
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_verbatim_string_char"
          }
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "\"B"
          }
        }
      ]
    },
    "format_triple_quoted_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "TOKEN",
          "content": {
            "type": "PREC",
            "value": 100,
            "content": {
              "type": "STRING",
              "value": "$\"\"\""
            }
          }
        },
        {
          "type": "SYMBOL",
          "name": "_triple_quoted_content"
        },
        {
          "type": "STRING",
          "value": "\"\"\""
        }
      ]
    },
    "triple_quoted_string": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "\"\"\""
            },
            {
              "type": "SYMBOL",
              "name": "_triple_quoted_content"
            },
            {
              "type": "STRING",
              "value": "\"\"\""
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "format_triple_quoted_string"
        }
      ]
    },
    "bool": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "STRING",
            "value": "true"
          },
          {
            "type": "STRING",
            "value": "false"
          }
        ]
      }
    },
    "unit": {
      "type": "TOKEN",
      "content": {
        "type": "PREC",
        "value": 100000,
        "content": {
          "type": "STRING",
          "value": "()"
        }
      }
    },
    "const": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "sbyte"
        },
        {
          "type": "SYMBOL",
          "name": "int16"
        },
        {
          "type": "SYMBOL",
          "name": "int32"
        },
        {
          "type": "SYMBOL",
          "name": "int64"
        },
        {
          "type": "SYMBOL",
          "name": "byte"
        },
        {
          "type": "SYMBOL",
          "name": "uint16"
        },
        {
          "type": "SYMBOL",
          "name": "uint32"
        },
        {
          "type": "SYMBOL",
          "name": "int"
        },
        {
          "type": "SYMBOL",
          "name": "xint"
        },
        {
          "type": "SYMBOL",
          "name": "nativeint"
        },
        {
          "type": "SYMBOL",
          "name": "unativeint"
        },
        {
          "type": "SYMBOL",
          "name": "decimal"
        },
        {
          "type": "SYMBOL",
          "name": "float"
        },
        {
          "type": "SYMBOL",
          "name": "uint64"
        },
        {
          "type": "SYMBOL",
          "name": "ieee32"
        },
        {
          "type": "SYMBOL",
          "name": "ieee64"
        },
        {
          "type": "SYMBOL",
          "name": "bignum"
        },
        {
          "type": "SYMBOL",
          "name": "char"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "verbatim_string"
        },
        {
          "type": "SYMBOL",
          "name": "triple_quoted_string"
        },
        {
          "type": "SYMBOL",
          "name": "bytearray"
        },
        {
          "type": "SYMBOL",
          "name": "verbatim_bytearray"
        },
        {
          "type": "SYMBOL",
          "name": "bool"
        },
        {
          "type": "SYMBOL",
          "name": "unit"
        }
      ]
    },
    "long_identifier": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "identifier"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "."
                },
                {
                  "type": "SYMBOL",
                  "name": "identifier"
                }
              ]
            }
          }
        ]
      }
    },
    "active_pattern": {
      "type": "PREC",
      "value": 1000,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "(|"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            },
            "named": true,
            "value": "active_pattern_op_name"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "|"
                },
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "identifier"
                  },
                  "named": true,
                  "value": "active_pattern_op_name"
                }
              ]
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "|"
                  },
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "STRING",
                      "value": "_"
                    },
                    "named": true,
                    "value": "wildcard_active_pattern_op"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "|)"
          }
        ]
      }
    },
    "op_identifier": {
      "type": "TOKEN",
      "content": {
        "type": "PREC",
        "value": 1000,
        "content": {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "PATTERN",
              "value": "\\s*"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "?"
                },
                {
                  "type": "PATTERN",
                  "value": "[!%&*+-./<=>@^|~$][!%&*+-./<=>@^|~?]*"
                },
                {
                  "type": "STRING",
                  "value": ".. .."
                }
              ]
            },
            {
              "type": "PATTERN",
              "value": "\\s*"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      }
    },
    "_identifier_or_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "op_identifier"
        },
        {
          "type": "SYMBOL",
          "name": "active_pattern"
        }
      ]
    },
    "_infix_or_prefix_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "+"
        },
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "STRING",
          "value": "+."
        },
        {
          "type": "STRING",
          "value": "-."
        },
        {
          "type": "STRING",
          "value": "%"
        },
        {
          "type": "STRING",
          "value": "&"
        },
        {
          "type": "STRING",
          "value": "&&"
        }
      ]
    },
    "prefix_op": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_infix_or_prefix_op"
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "STRING",
              "value": "~"
            }
          },
          {
            "type": "PATTERN",
            "value": "[!?][!%&*+-./<=>@^|~?]*"
          }
        ]
      }
    },
    "infix_op": {
      "type": "PREC",
      "value": 4,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_infix_or_prefix_op"
          },
          {
            "type": "IMMEDIATE_TOKEN",
            "content": {
              "type": "PREC",
              "value": 1,
              "content": {
                "type": "PATTERN",
                "value": "[+-]"
              }
            }
          },
          {
            "type": "PATTERN",
            "value": "[-+<>|&^*/'%@][!%&*+./<=>@^|~?-]*"
          },
          {
            "type": "STRING",
            "value": "||"
          },
          {
            "type": "STRING",
            "value": "="
          },
          {
            "type": "STRING",
            "value": "!="
          },
          {
            "type": "STRING",
            "value": ":="
          },
          {
            "type": "STRING",
            "value": "::"
          },
          {
            "type": "STRING",
            "value": "$"
          },
          {
            "type": "STRING",
            "value": "or"
          },
          {
            "type": "STRING",
            "value": "?"
          },
          {
            "type": "STRING",
            "value": "?"
          },
          {
            "type": "STRING",
            "value": "?<-"
          }
        ]
      }
    },
    "int": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "[+-]?([0-9]_?)+"
      }
    },
    "xint": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "PATTERN",
            "value": "0[xX]([0-9a-fA-F]_?)+"
          },
          {
            "type": "PATTERN",
            "value": "0[oO]([0-7]_?)+"
          },
          {
            "type": "PATTERN",
            "value": "0[bB]([0-1]_?)+"
          }
        ]
      }
    },
    "sbyte": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "y"
          }
        }
      ]
    },
    "byte": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "uy"
          }
        }
      ]
    },
    "int16": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "s"
          }
        }
      ]
    },
    "uint16": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "us"
          }
        }
      ]
    },
    "int32": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "l"
          }
        }
      ]
    },
    "uint32": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "ul"
              },
              {
                "type": "STRING",
                "value": "u"
              }
            ]
          }
        }
      ]
    },
    "nativeint": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "n"
          }
        }
      ]
    },
    "unativeint": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "un"
          }
        }
      ]
    },
    "int64": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "L"
          }
        }
      ]
    },
    "uint64": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "int"
            },
            {
              "type": "SYMBOL",
              "name": "xint"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "UL"
              },
              {
                "type": "STRING",
                "value": "uL"
              }
            ]
          }
        }
      ]
    },
    "ieee32": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "float"
            },
            {
              "type": "IMMEDIATE_TOKEN",
              "content": {
                "type": "STRING",
                "value": "f"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "xint"
            },
            {
              "type": "IMMEDIATE_TOKEN",
              "content": {
                "type": "STRING",
                "value": "lf"
              }
            }
          ]
        }
      ]
    },
    "ieee64": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "xint"
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "LF"
          }
        }
      ]
    },
    "bignum": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "int"
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "PATTERN",
            "value": "[QRZING]"
          }
        }
      ]
    },
    "decimal": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "float"
            },
            {
              "type": "SYMBOL",
              "name": "int"
            }
          ]
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "PATTERN",
            "value": "[Mm]"
          }
        }
      ]
    },
    "float": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "ALIAS",
        "content": {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "int"
                },
                {
                  "type": "IMMEDIATE_TOKEN",
                  "content": {
                    "type": "STRING",
                    "value": "."
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "int"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "int"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "IMMEDIATE_TOKEN",
                          "content": {
                            "type": "STRING",
                            "value": "."
                          }
                        },
                        {
                          "type": "SYMBOL",
                          "name": "int"
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "IMMEDIATE_TOKEN",
                  "content": {
                    "type": "PATTERN",
                    "value": "[eE][+-]?"
                  }
                },
                {
                  "type": "SYMBOL",
                  "name": "int"
                }
              ]
            }
          ]
        },
        "named": false,
        "value": "float"
      }
    },
    "block_comment": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "(*"
        },
        {
          "type": "SYMBOL",
          "name": "block_comment_content"
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "*)"
          }
        }
      ]
    },
    "line_comment": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "\\/\\/+[^\\n\\r]*"
      }
    },
    "identifier": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "PATTERN",
            "value": "[_\\p{XID_Start}][_'\\p{XID_Continue}]*"
          },
          {
            "type": "PATTERN",
            "value": "``([^`\\n\\r\\t])+``"
          }
        ]
      }
    },
    "compiler_directive_decl": {
      "type": "PREC",
      "value": 100000,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "#nowarn"
              },
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_string_literal"
                },
                "named": true,
                "value": "string"
              },
              {
                "type": "SYMBOL",
                "name": "_newline_not_aligned"
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "#light"
              },
              {
                "type": "SYMBOL",
                "name": "_newline_not_aligned"
              }
            ]
          }
        ]
      }
    },
    "fsi_directive_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "#r"
            },
            {
              "type": "STRING",
              "value": "#load"
            }
          ]
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_string_literal"
          },
          "named": true,
          "value": "string"
        },
        {
          "type": "PATTERN",
          "value": "\\n"
        }
      ]
    },
    "preproc_line": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "PATTERN",
            "value": "#(line)?"
          },
          "named": false,
          "value": "#line"
        },
        {
          "type": "SYMBOL",
          "name": "int"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_string_literal"
                  },
                  "named": true,
                  "value": "string"
                },
                {
                  "type": "SYMBOL",
                  "name": "verbatim_string"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_newline_not_aligned"
        }
      ]
    },
    "preproc_if": {
      "type": "PREC",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#if"
          },
          {
            "type": "FIELD",
            "name": "condition",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            }
          },
          {
            "type": "SYMBOL",
            "name": "_newline_not_aligned"
          },
          {
            "type": "SYMBOL",
            "name": "_module_elem"
          },
          {
            "type": "FIELD",
            "name": "alternative",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "preproc_else"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "#endif"
          }
        ]
      }
    },
    "preproc_else": {
      "type": "PREC",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#else"
          },
          {
            "type": "SYMBOL",
            "name": "_module_elem"
          }
        ]
      }
    },
    "preproc_if_in_expression": {
      "type": "PREC",
      "value": -2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#if"
          },
          {
            "type": "FIELD",
            "name": "condition",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            }
          },
          {
            "type": "SYMBOL",
            "name": "_newline_not_aligned"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_newline"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              ]
            }
          },
          {
            "type": "FIELD",
            "name": "alternative",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "preproc_else_in_expression"
                  },
                  "named": true,
                  "value": "preproc_else"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "#endif"
          }
        ]
      }
    },
    "preproc_else_in_expression": {
      "type": "PREC",
      "value": -2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#else"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_newline"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              ]
            }
          }
        ]
      }
    },
    "preproc_if_in_class_definition": {
      "type": "PREC",
      "value": -2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#if"
          },
          {
            "type": "FIELD",
            "name": "condition",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            }
          },
          {
            "type": "SYMBOL",
            "name": "_newline_not_aligned"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_newline"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_class_type_body_inner"
                }
              ]
            }
          },
          {
            "type": "FIELD",
            "name": "alternative",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "preproc_else_in_class_definition"
                  },
                  "named": true,
                  "value": "preproc_else"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "#endif"
          }
        ]
      }
    },
    "preproc_else_in_class_definition": {
      "type": "PREC",
      "value": -2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#else"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_newline"
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_class_type_body_inner"
                }
              ]
            }
          }
        ]
      }
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "[ \\s\\f\\uFEFF\\u2060\\u200B]|\\\\\\r?n"
    },
    {
      "type": "SYMBOL",
      "name": "block_comment"
    },
    {
      "type": "SYMBOL",
      "name": "line_comment"
    },
    {
      "type": "SYMBOL",
      "name": "preproc_line"
    },
    {
      "type": "SYMBOL",
      "name": "compiler_directive_decl"
    },
    {
      "type": "SYMBOL",
      "name": "fsi_directive_decl"
    },
    {
      "type": "STRING",
      "value": ";"
    }
  ],
  "conflicts": [
    [
      "long_identifier",
      "_identifier_or_op"
    ],
    [
      "simple_type",
      "type_argument"
    ],
    [
      "preproc_if",
      "preproc_if_in_expression"
    ],
    [
      "rules"
    ]
  ],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "_newline"
    },
    {
      "type": "SYMBOL",
      "name": "_indent"
    },
    {
      "type": "SYMBOL",
      "name": "_dedent"
    },
    {
      "type": "STRING",
      "value": "then"
    },
    {
      "type": "STRING",
      "value": "else"
    },
    {
      "type": "STRING",
      "value": "elif"
    },
    {
      "type": "STRING",
      "value": "#if"
    },
    {
      "type": "STRING",
      "value": "#else"
    },
    {
      "type": "STRING",
      "value": "#endif"
    },
    {
      "type": "STRING",
      "value": "class"
    },
    {
      "type": "SYMBOL",
      "name": "_struct_begin"
    },
    {
      "type": "SYMBOL",
      "name": "_interface_begin"
    },
    {
      "type": "STRING",
      "value": "end"
    },
    {
      "type": "STRING",
      "value": "and"
    },
    {
      "type": "SYMBOL",
      "name": "_triple_quoted_content"
    },
    {
      "type": "SYMBOL",
      "name": "block_comment_content"
    },
    {
      "type": "SYMBOL",
      "name": "_inside_string_marker"
    },
    {
      "type": "SYMBOL",
      "name": "_newline_not_aligned"
    },
    {
      "type": "SYMBOL",
      "name": "_tuple_marker"
    },
    {
      "type": "SYMBOL",
      "name": "_error_sentinel"
    }
  ],
  "inline": [
    "_module_elem",
    "_expression_or_range",
    "_object_expression_inner",
    "_record_type_defn_inner",
    "_union_type_defn_inner",
    "_then_expression"
  ],
  "supertypes": [
    "_module_elem",
    "_pattern",
    "_expression",
    "_type",
    "_type_defn_body",
    "_static_parameter"
  ]
}
