{
  "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
  "name": "gleam",
  "rules": {
    "source_file": {
      "type": "REPEAT",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "target_group"
          },
          {
            "type": "SYMBOL",
            "name": "_module_statement"
          },
          {
            "type": "SYMBOL",
            "name": "_statement_seq"
          }
        ]
      }
    },
    "_module_statement": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "import"
        },
        {
          "type": "SYMBOL",
          "name": "constant"
        },
        {
          "type": "SYMBOL",
          "name": "external_type"
        },
        {
          "type": "SYMBOL",
          "name": "external_function"
        },
        {
          "type": "SYMBOL",
          "name": "function"
        },
        {
          "type": "SYMBOL",
          "name": "type_definition"
        },
        {
          "type": "SYMBOL",
          "name": "type_alias"
        },
        {
          "type": "SYMBOL",
          "name": "attribute"
        }
      ]
    },
    "module_comment": {
      "type": "PREC",
      "value": 3,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "////"
          },
          {
            "type": "SYMBOL",
            "name": "doc_comment_content"
          }
        ]
      }
    },
    "statement_comment": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "///"
          },
          {
            "type": "SYMBOL",
            "name": "doc_comment_content"
          }
        ]
      }
    },
    "comment": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "//"
              },
              {
                "type": "PATTERN",
                "value": ".*"
              }
            ]
          }
        },
        {
          "type": "PREC",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "/////"
              },
              {
                "type": "PATTERN",
                "value": ".*"
              }
            ]
          }
        }
      ]
    },
    "target_group": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "FIELD",
          "name": "target",
          "content": {
            "type": "SYMBOL",
            "name": "target"
          }
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_module_statement"
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "target": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "erlang"
        },
        {
          "type": "STRING",
          "value": "javascript"
        }
      ]
    },
    "attribute": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "@"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "arguments",
              "content": {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_attribute_arguments"
                },
                "named": true,
                "value": "arguments"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_attribute_arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attribute_value"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "attribute_value"
                  }
                ]
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": ","
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "attribute_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_constant_value"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "label",
              "content": {
                "type": "SYMBOL",
                "name": "label"
              }
            },
            {
              "type": "STRING",
              "value": ":"
            },
            {
              "type": "FIELD",
              "name": "value",
              "content": {
                "type": "SYMBOL",
                "name": "_constant_value"
              }
            }
          ]
        }
      ]
    },
    "import": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "import"
        },
        {
          "type": "FIELD",
          "name": "module",
          "content": {
            "type": "SYMBOL",
            "name": "module"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "."
                },
                {
                  "type": "FIELD",
                  "name": "imports",
                  "content": {
                    "type": "SYMBOL",
                    "name": "unqualified_imports"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "as"
                },
                {
                  "type": "FIELD",
                  "name": "alias",
                  "content": {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "identifier"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "discard"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "module": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "/"
              },
              {
                "type": "SYMBOL",
                "name": "_name"
              }
            ]
          }
        }
      ]
    },
    "unqualified_imports": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "unqualified_import"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "unqualified_import"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "unqualified_import": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "as"
                    },
                    {
                      "type": "FIELD",
                      "name": "alias",
                      "content": {
                        "type": "SYMBOL",
                        "name": "identifier"
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "type"
            },
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SYMBOL",
                "name": "type_identifier"
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "as"
                    },
                    {
                      "type": "FIELD",
                      "name": "alias",
                      "content": {
                        "type": "SYMBOL",
                        "name": "type_identifier"
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "name",
              "content": {
                "type": "SYMBOL",
                "name": "constructor_name"
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": "as"
                    },
                    {
                      "type": "FIELD",
                      "name": "alias",
                      "content": {
                        "type": "SYMBOL",
                        "name": "constructor_name"
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "constant": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "visibility_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "const"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_constant_type_annotation"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_constant_value"
          }
        }
      ]
    },
    "_constant_value": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "float"
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "constant_tuple"
          },
          "named": true,
          "value": "tuple"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "constant_list"
          },
          "named": true,
          "value": "list"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_constant_bit_string"
          },
          "named": true,
          "value": "bit_string"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "constant_record"
          },
          "named": true,
          "value": "record"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "constant_field_access"
          },
          "named": true,
          "value": "field_access"
        }
      ]
    },
    "constant_tuple": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_constant_value"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_constant_value"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "constant_list": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_constant_value"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_constant_value"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "_constant_bit_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<<"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "constant_bit_string_segment"
                  },
                  "named": true,
                  "value": "bit_string_segment"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "ALIAS",
                        "content": {
                          "type": "SYMBOL",
                          "name": "constant_bit_string_segment"
                        },
                        "named": true,
                        "value": "bit_string_segment"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ">>"
        }
      ]
    },
    "constant_bit_string_segment": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_constant_value"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "options",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ":"
                  },
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "SYMBOL",
                      "name": "constant_bit_string_segment_options"
                    },
                    "named": true,
                    "value": "bit_string_segment_options"
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "constant_bit_string_segment_options": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_constant_bit_string_segment_option"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "-"
              },
              {
                "type": "SYMBOL",
                "name": "_constant_bit_string_segment_option"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "-"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_constant_bit_string_segment_option": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_constant_bit_string_named_segment_option"
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        }
      ]
    },
    "_constant_bit_string_named_segment_option": {
      "type": "ALIAS",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_bit_string_segment_option"
          },
          {
            "type": "SYMBOL",
            "name": "_constant_bit_string_segment_option_size"
          }
        ]
      },
      "named": true,
      "value": "bit_string_segment_option"
    },
    "_constant_bit_string_segment_option_size": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "size"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "constant_record": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "constructor_name"
              },
              {
                "type": "SYMBOL",
                "name": "remote_constructor_name"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "arguments",
              "content": {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "constant_record_arguments"
                },
                "named": true,
                "value": "arguments"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "constant_record_arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "constant_record_argument"
                  },
                  "named": true,
                  "value": "argument"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "ALIAS",
                        "content": {
                          "type": "SYMBOL",
                          "name": "constant_record_argument"
                        },
                        "named": true,
                        "value": "argument"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "constant_record_argument": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "FIELD",
                      "name": "label",
                      "content": {
                        "type": "SYMBOL",
                        "name": "label"
                      }
                    },
                    {
                      "type": "STRING",
                      "value": ":"
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "value",
              "content": {
                "type": "SYMBOL",
                "name": "_constant_value"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "label",
              "content": {
                "type": "SYMBOL",
                "name": "label"
              }
            },
            {
              "type": "STRING",
              "value": ":"
            }
          ]
        }
      ]
    },
    "constant_field_access": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "record",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "FIELD",
          "name": "field",
          "content": {
            "type": "SYMBOL",
            "name": "label"
          }
        }
      ]
    },
    "_constant_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_hole"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "constant_tuple_type"
          },
          "named": true,
          "value": "tuple_type"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "constant_function_type"
          },
          "named": true,
          "value": "function_type"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "constant_type"
          },
          "named": true,
          "value": "type"
        }
      ]
    },
    "_constant_type_annotation": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "type",
          "content": {
            "type": "SYMBOL",
            "name": "_constant_type"
          }
        }
      ]
    },
    "constant_tuple_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_constant_type"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_constant_type"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "constant_function_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "fn"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "parameter_types",
              "content": {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "constant_function_parameter_types"
                },
                "named": true,
                "value": "function_parameter_types"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "->"
        },
        {
          "type": "FIELD",
          "name": "return_type",
          "content": {
            "type": "SYMBOL",
            "name": "_constant_type"
          }
        }
      ]
    },
    "constant_function_parameter_types": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_constant_type"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_constant_type"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "constant_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_identifier"
              },
              {
                "type": "SYMBOL",
                "name": "remote_type_identifier"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "arguments",
              "content": {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "constant_type_arguments"
                },
                "named": true,
                "value": "type_arguments"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "constant_type_arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "constant_type_argument"
                  },
                  "named": true,
                  "value": "type_argument"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "ALIAS",
                        "content": {
                          "type": "SYMBOL",
                          "name": "constant_type_argument"
                        },
                        "named": true,
                        "value": "type_argument"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "constant_type_argument": {
      "type": "SYMBOL",
      "name": "_constant_type"
    },
    "external_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "visibility_modifier"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "external"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "type"
          },
          {
            "type": "SYMBOL",
            "name": "type_name"
          }
        ]
      }
    },
    "external_function": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "visibility_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "external"
        },
        {
          "type": "STRING",
          "value": "fn"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "FIELD",
          "name": "parameters",
          "content": {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "external_function_parameters"
            },
            "named": true,
            "value": "function_parameters"
          }
        },
        {
          "type": "STRING",
          "value": "->"
        },
        {
          "type": "FIELD",
          "name": "return_type",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "external_function_body"
          }
        }
      ]
    },
    "external_function_parameters": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "external_function_parameter"
                  },
                  "named": true,
                  "value": "function_parameter"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "ALIAS",
                        "content": {
                          "type": "SYMBOL",
                          "name": "external_function_parameter"
                        },
                        "named": true,
                        "value": "function_parameter"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "external_function_parameter": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "name",
                  "content": {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                },
                {
                  "type": "STRING",
                  "value": ":"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "type",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        }
      ]
    },
    "external_function_body": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        }
      ]
    },
    "function": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "visibility_modifier"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "fn"
          },
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            }
          },
          {
            "type": "FIELD",
            "name": "parameters",
            "content": {
              "type": "SYMBOL",
              "name": "function_parameters"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "->"
                  },
                  {
                    "type": "FIELD",
                    "name": "return_type",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_type"
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "FIELD",
                "name": "body",
                "content": {
                  "type": "SYMBOL",
                  "name": "block"
                }
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "function_parameters": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "function_parameter"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "function_parameter"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "function_parameter": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_labeled_discard_param"
            },
            {
              "type": "SYMBOL",
              "name": "_discard_param"
            },
            {
              "type": "SYMBOL",
              "name": "_labeled_name_param"
            },
            {
              "type": "SYMBOL",
              "name": "_name_param"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type_annotation"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_labeled_discard_param": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "label",
          "content": {
            "type": "SYMBOL",
            "name": "label"
          }
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "discard"
          }
        }
      ]
    },
    "_discard_param": {
      "type": "FIELD",
      "name": "name",
      "content": {
        "type": "SYMBOL",
        "name": "discard"
      }
    },
    "_labeled_name_param": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "label",
          "content": {
            "type": "SYMBOL",
            "name": "label"
          }
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        }
      ]
    },
    "_name_param": {
      "type": "FIELD",
      "name": "name",
      "content": {
        "type": "SYMBOL",
        "name": "identifier"
      }
    },
    "_statement_seq": {
      "type": "REPEAT1",
      "content": {
        "type": "SYMBOL",
        "name": "_statement"
      }
    },
    "_statement": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "SYMBOL",
          "name": "let"
        },
        {
          "type": "SYMBOL",
          "name": "let_assert"
        },
        {
          "type": "SYMBOL",
          "name": "use"
        },
        {
          "type": "SYMBOL",
          "name": "assert"
        }
      ]
    },
    "_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression_unit"
        },
        {
          "type": "SYMBOL",
          "name": "binary_expression"
        }
      ]
    },
    "binary_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_LEFT",
          "value": 1,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "||"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 2,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "&&"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 3,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "=="
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 3,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "!="
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<="
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<=."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": ">"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": ">="
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": ">."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": ">=."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 5,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "|>"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "pipeline_echo"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_expression"
                    }
                  ]
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "+"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "+."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "-"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "-."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 7,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "*"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 7,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "*."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 7,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "/"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 7,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "/."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 7,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "%"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 7,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<>"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_expression"
                }
              }
            ]
          }
        }
      ]
    },
    "_expression_unit": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "SYMBOL",
          "name": "float"
        },
        {
          "type": "SYMBOL",
          "name": "record"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "todo"
        },
        {
          "type": "SYMBOL",
          "name": "panic"
        },
        {
          "type": "SYMBOL",
          "name": "tuple"
        },
        {
          "type": "SYMBOL",
          "name": "echo"
        },
        {
          "type": "SYMBOL",
          "name": "list"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_expression_bit_string"
          },
          "named": true,
          "value": "bit_string"
        },
        {
          "type": "SYMBOL",
          "name": "anonymous_function"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        },
        {
          "type": "SYMBOL",
          "name": "case"
        },
        {
          "type": "SYMBOL",
          "name": "boolean_negation"
        },
        {
          "type": "SYMBOL",
          "name": "integer_negation"
        },
        {
          "type": "SYMBOL",
          "name": "record_update"
        },
        {
          "type": "SYMBOL",
          "name": "tuple_access"
        },
        {
          "type": "SYMBOL",
          "name": "field_access"
        },
        {
          "type": "SYMBOL",
          "name": "function_call"
        }
      ]
    },
    "record": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "constructor_name"
              },
              {
                "type": "SYMBOL",
                "name": "remote_constructor_name"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "arguments",
              "content": {
                "type": "SYMBOL",
                "name": "arguments"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "todo": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "todo"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "("
                      },
                      {
                        "type": "FIELD",
                        "name": "message",
                        "content": {
                          "type": "SYMBOL",
                          "name": "string"
                        }
                      },
                      {
                        "type": "STRING",
                        "value": ")"
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "as"
                      },
                      {
                        "type": "FIELD",
                        "name": "message",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_expression"
                        }
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "panic": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "panic"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "("
                      },
                      {
                        "type": "FIELD",
                        "name": "message",
                        "content": {
                          "type": "SYMBOL",
                          "name": "string"
                        }
                      },
                      {
                        "type": "STRING",
                        "value": ")"
                      }
                    ]
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "as"
                      },
                      {
                        "type": "FIELD",
                        "name": "message",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_expression"
                        }
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "pipeline_echo": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "STRING",
        "value": "echo"
      }
    },
    "echo": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "echo"
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        }
      ]
    },
    "tuple": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_expression"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_expression"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "list": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_expression"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_expression"
                          }
                        ]
                      }
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ".."
                        },
                        {
                          "type": "FIELD",
                          "name": "spread",
                          "content": {
                            "type": "SYMBOL",
                            "name": "_expression"
                          }
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "_expression_bit_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<<"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "expression_bit_string_segment"
                  },
                  "named": true,
                  "value": "bit_string_segment"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "ALIAS",
                        "content": {
                          "type": "SYMBOL",
                          "name": "expression_bit_string_segment"
                        },
                        "named": true,
                        "value": "bit_string_segment"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ">>"
        }
      ]
    },
    "expression_bit_string_segment": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_expression_unit"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "options",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ":"
                  },
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "SYMBOL",
                      "name": "expression_bit_string_segment_options"
                    },
                    "named": true,
                    "value": "bit_string_segment_options"
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "expression_bit_string_segment_options": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression_bit_string_segment_option"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "-"
              },
              {
                "type": "SYMBOL",
                "name": "_expression_bit_string_segment_option"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "-"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_expression_bit_string_segment_option": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_expression_bit_string_named_segment_option"
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        }
      ]
    },
    "_expression_bit_string_named_segment_option": {
      "type": "ALIAS",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_bit_string_segment_option"
          },
          {
            "type": "SYMBOL",
            "name": "_expression_bit_string_segment_option_size"
          }
        ]
      },
      "named": true,
      "value": "bit_string_segment_option"
    },
    "_expression_bit_string_segment_option_size": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "size"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_expression"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "anonymous_function": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "fn"
        },
        {
          "type": "FIELD",
          "name": "parameters",
          "content": {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "anonymous_function_parameters"
            },
            "named": true,
            "value": "function_parameters"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "->"
                },
                {
                  "type": "FIELD",
                  "name": "return_type",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_type"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "block"
          }
        }
      ]
    },
    "anonymous_function_parameters": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "anonymous_function_parameter"
                  },
                  "named": true,
                  "value": "function_parameter"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "ALIAS",
                        "content": {
                          "type": "SYMBOL",
                          "name": "anonymous_function_parameter"
                        },
                        "named": true,
                        "value": "function_parameter"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "anonymous_function_parameter": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_discard_param"
            },
            {
              "type": "SYMBOL",
              "name": "_name_param"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type_annotation"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "block": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_statement_seq"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "case": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "case"
        },
        {
          "type": "FIELD",
          "name": "subjects",
          "content": {
            "type": "SYMBOL",
            "name": "case_subjects"
          }
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "clauses",
              "content": {
                "type": "SYMBOL",
                "name": "case_clauses"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "case_subjects": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_expression"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression"
                  }
                ]
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": ","
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "case_clauses": {
      "type": "REPEAT1",
      "content": {
        "type": "SYMBOL",
        "name": "case_clause"
      }
    },
    "case_clause": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "patterns",
          "content": {
            "type": "SYMBOL",
            "name": "case_clause_patterns"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "guard",
              "content": {
                "type": "SYMBOL",
                "name": "case_clause_guard"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "->"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_expression"
          }
        }
      ]
    },
    "case_clause_patterns": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "case_clause_pattern"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "|"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "case_clause_pattern"
                  }
                ]
              }
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "STRING",
                  "value": "|"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "case_clause_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pattern"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "SYMBOL",
                "name": "_pattern"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "case_clause_guard": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "SYMBOL",
          "name": "_case_clause_guard_expression"
        }
      ]
    },
    "_case_clause_guard_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_case_clause_guard_unit"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_case_clause_guard_binary_expression"
          },
          "named": true,
          "value": "binary_expression"
        },
        {
          "type": "SYMBOL",
          "name": "boolean_negation"
        }
      ]
    },
    "_case_clause_guard_binary_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_LEFT",
          "value": 1,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "||"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 2,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "&&"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 3,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "=="
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 3,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "!="
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<="
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<=."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": ">"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": ">="
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": ">."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": ">=."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 5,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "+"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 5,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "+."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 5,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "-"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 5,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "-."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "*"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "*."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "/"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "/."
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "%"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_case_clause_guard_expression"
                }
              }
            ]
          }
        }
      ]
    },
    "_case_clause_guard_unit": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "_case_clause_tuple_access"
            },
            "named": true,
            "value": "tuple_access"
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "{"
            },
            {
              "type": "SYMBOL",
              "name": "_case_clause_guard_expression"
            },
            {
              "type": "STRING",
              "value": "}"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_constant_value"
        }
      ]
    },
    "_case_clause_tuple_access": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "tuple",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "FIELD",
          "name": "index",
          "content": {
            "type": "SYMBOL",
            "name": "integer"
          }
        }
      ]
    },
    "let_assert": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "let"
        },
        {
          "type": "STRING",
          "value": "assert"
        },
        {
          "type": "SYMBOL",
          "name": "_assignment"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "as"
                },
                {
                  "type": "FIELD",
                  "name": "message",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_expression"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "assert": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "assert"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_expression"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "as"
                },
                {
                  "type": "FIELD",
                  "name": "message",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_expression"
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "let": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "let"
        },
        {
          "type": "SYMBOL",
          "name": "_assignment"
        }
      ]
    },
    "use": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "use"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "assignments",
              "content": {
                "type": "SYMBOL",
                "name": "use_assignments"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "<-"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_expression"
          }
        }
      ]
    },
    "use_assignments": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "use_assignment"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "SYMBOL",
                "name": "use_assignment"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "use_assignment": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pattern"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type_annotation"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "boolean_negation": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "!"
        },
        {
          "type": "SYMBOL",
          "name": "_expression_unit"
        }
      ]
    },
    "integer_negation": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "SYMBOL",
          "name": "_expression_unit"
        }
      ]
    },
    "_assignment": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "pattern",
          "content": {
            "type": "SYMBOL",
            "name": "_pattern"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_type_annotation"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_expression"
          }
        }
      ]
    },
    "record_update": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "constructor",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "constructor_name"
              },
              {
                "type": "SYMBOL",
                "name": "remote_constructor_name"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "STRING",
          "value": ".."
        },
        {
          "type": "FIELD",
          "name": "spread",
          "content": {
            "type": "SYMBOL",
            "name": "_expression"
          }
        },
        {
          "type": "STRING",
          "value": ","
        },
        {
          "type": "FIELD",
          "name": "arguments",
          "content": {
            "type": "SYMBOL",
            "name": "record_update_arguments"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "record_update_arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "record_update_argument"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": ","
              },
              {
                "type": "SYMBOL",
                "name": "record_update_argument"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "record_update_argument": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "label",
              "content": {
                "type": "SYMBOL",
                "name": "label"
              }
            },
            {
              "type": "STRING",
              "value": ":"
            },
            {
              "type": "FIELD",
              "name": "value",
              "content": {
                "type": "SYMBOL",
                "name": "_expression"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "label",
              "content": {
                "type": "SYMBOL",
                "name": "label"
              }
            },
            {
              "type": "STRING",
              "value": ":"
            }
          ]
        }
      ]
    },
    "_maybe_tuple_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "function_call"
        },
        {
          "type": "SYMBOL",
          "name": "tuple"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        },
        {
          "type": "SYMBOL",
          "name": "case"
        },
        {
          "type": "SYMBOL",
          "name": "field_access"
        },
        {
          "type": "SYMBOL",
          "name": "tuple_access"
        }
      ]
    },
    "tuple_access": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "tuple",
            "content": {
              "type": "SYMBOL",
              "name": "_maybe_tuple_expression"
            }
          },
          {
            "type": "STRING",
            "value": "."
          },
          {
            "type": "FIELD",
            "name": "index",
            "content": {
              "type": "SYMBOL",
              "name": "integer"
            }
          }
        ]
      }
    },
    "_maybe_record_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "record"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "function_call"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        },
        {
          "type": "SYMBOL",
          "name": "case"
        },
        {
          "type": "SYMBOL",
          "name": "record_update"
        },
        {
          "type": "SYMBOL",
          "name": "field_access"
        },
        {
          "type": "SYMBOL",
          "name": "tuple_access"
        }
      ]
    },
    "field_access": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "record",
            "content": {
              "type": "SYMBOL",
              "name": "_maybe_record_expression"
            }
          },
          {
            "type": "STRING",
            "value": "."
          },
          {
            "type": "FIELD",
            "name": "field",
            "content": {
              "type": "SYMBOL",
              "name": "label"
            }
          }
        ]
      }
    },
    "_maybe_function_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "anonymous_function"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        },
        {
          "type": "SYMBOL",
          "name": "case"
        },
        {
          "type": "SYMBOL",
          "name": "tuple_access"
        },
        {
          "type": "SYMBOL",
          "name": "field_access"
        },
        {
          "type": "SYMBOL",
          "name": "function_call"
        }
      ]
    },
    "arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "argument"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "argument"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "argument": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "FIELD",
                      "name": "label",
                      "content": {
                        "type": "SYMBOL",
                        "name": "label"
                      }
                    },
                    {
                      "type": "STRING",
                      "value": ":"
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "value",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "hole"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_expression"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "label",
              "content": {
                "type": "SYMBOL",
                "name": "label"
              }
            },
            {
              "type": "STRING",
              "value": ":"
            }
          ]
        }
      ]
    },
    "hole": {
      "type": "SYMBOL",
      "name": "_discard_name"
    },
    "function_call": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "function",
          "content": {
            "type": "SYMBOL",
            "name": "_maybe_function_expression"
          }
        },
        {
          "type": "FIELD",
          "name": "arguments",
          "content": {
            "type": "SYMBOL",
            "name": "arguments"
          }
        }
      ]
    },
    "_pattern_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "discard"
        },
        {
          "type": "SYMBOL",
          "name": "record_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "SYMBOL",
          "name": "float"
        },
        {
          "type": "SYMBOL",
          "name": "tuple_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_pattern_bit_string"
          },
          "named": true,
          "value": "bit_string_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "list_pattern"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_pattern_binary_expression"
          },
          "named": true,
          "value": "binary_expression"
        }
      ]
    },
    "_pattern_binary_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_LEFT",
          "value": 1,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "_pattern_expression"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "<>"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "_pattern_expression"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": 1,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "left",
                "content": {
                  "type": "SYMBOL",
                  "name": "string"
                }
              },
              {
                "type": "FIELD",
                "name": "operator",
                "content": {
                  "type": "STRING",
                  "value": "as"
                }
              },
              {
                "type": "FIELD",
                "name": "right",
                "content": {
                  "type": "SYMBOL",
                  "name": "identifier"
                }
              }
            ]
          }
        }
      ]
    },
    "_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pattern_expression"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "assign",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "as"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "identifier"
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "record_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "constructor_name"
              },
              {
                "type": "SYMBOL",
                "name": "remote_constructor_name"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "arguments",
              "content": {
                "type": "SYMBOL",
                "name": "record_pattern_arguments"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "record_pattern_arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "record_pattern_argument"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "record_pattern_argument"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "pattern_spread"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "record_pattern_argument": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "FIELD",
                      "name": "label",
                      "content": {
                        "type": "SYMBOL",
                        "name": "label"
                      }
                    },
                    {
                      "type": "STRING",
                      "value": ":"
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "pattern",
              "content": {
                "type": "SYMBOL",
                "name": "_pattern"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "label",
              "content": {
                "type": "SYMBOL",
                "name": "label"
              }
            },
            {
              "type": "STRING",
              "value": ":"
            }
          ]
        }
      ]
    },
    "pattern_spread": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ".."
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": ","
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "tuple_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_pattern"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_pattern"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_pattern_bit_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "<<"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "pattern_bit_string_segment"
                  },
                  "named": true,
                  "value": "bit_string_segment"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "ALIAS",
                        "content": {
                          "type": "SYMBOL",
                          "name": "pattern_bit_string_segment"
                        },
                        "named": true,
                        "value": "bit_string_segment"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ">>"
        }
      ]
    },
    "pattern_bit_string_segment": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_pattern"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "options",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ":"
                  },
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "SYMBOL",
                      "name": "pattern_bit_string_segment_options"
                    },
                    "named": true,
                    "value": "bit_string_segment_options"
                  }
                ]
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "pattern_bit_string_segment_options": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pattern_bit_string_segment_option"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "-"
              },
              {
                "type": "SYMBOL",
                "name": "_pattern_bit_string_segment_option"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "-"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_pattern_bit_string_segment_option": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pattern_bit_string_named_segment_option"
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        }
      ]
    },
    "_pattern_bit_string_named_segment_option": {
      "type": "ALIAS",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_bit_string_segment_option"
          },
          {
            "type": "SYMBOL",
            "name": "_pattern_bit_string_segment_option_size"
          }
        ]
      },
      "named": true,
      "value": "bit_string_segment_option"
    },
    "_pattern_bit_string_segment_option_size": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "size"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_pattern_bit_string_segment_argument"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_pattern_bit_string_segment_argument": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "SYMBOL",
          "name": "integer"
        }
      ]
    },
    "list_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_pattern"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_pattern"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "list_pattern_tail"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "list_pattern_tail": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ".."
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "identifier"
                },
                {
                  "type": "SYMBOL",
                  "name": "discard"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "visibility_modifier": {
      "type": "STRING",
      "value": "pub"
    },
    "opacity_modifier": {
      "type": "STRING",
      "value": "opaque"
    },
    "type_definition": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "visibility_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "opacity_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "SYMBOL",
          "name": "type_name"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SYMBOL",
          "name": "data_constructors"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "data_constructors": {
      "type": "REPEAT1",
      "content": {
        "type": "SYMBOL",
        "name": "data_constructor"
      }
    },
    "data_constructor": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "attribute"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "constructor_name"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "arguments",
              "content": {
                "type": "SYMBOL",
                "name": "data_constructor_arguments"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "data_constructor_arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "data_constructor_argument"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "data_constructor_argument"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "data_constructor_argument": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "label",
                  "content": {
                    "type": "SYMBOL",
                    "name": "label"
                  }
                },
                {
                  "type": "STRING",
                  "value": ":"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        }
      ]
    },
    "type_alias": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "visibility_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "opacity_modifier"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "SYMBOL",
          "name": "type_name"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "string": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "\""
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "escape_sequence"
              },
              {
                "type": "SYMBOL",
                "name": "quoted_content"
              }
            ]
          }
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "\""
          }
        }
      ]
    },
    "escape_sequence": {
      "type": "CHOICE",
      "members": [
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "PATTERN",
            "value": "\\\\[efnrt\\\"\\\\]"
          }
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "PATTERN",
            "value": "\\\\u\\{[0-9a-fA-F]{1,6}\\}"
          }
        }
      ]
    },
    "float": {
      "type": "PATTERN",
      "value": "-?[0-9_]+\\.[0-9_]*(e-?[0-9_]+)?"
    },
    "integer": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "-"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_hex"
            },
            {
              "type": "SYMBOL",
              "name": "_decimal"
            },
            {
              "type": "SYMBOL",
              "name": "_octal"
            },
            {
              "type": "SYMBOL",
              "name": "_binary"
            }
          ]
        }
      ]
    },
    "_hex": {
      "type": "PATTERN",
      "value": "0[xX][0-9a-fA-F_]+"
    },
    "_decimal": {
      "type": "PATTERN",
      "value": "[0-9][0-9_]*"
    },
    "_octal": {
      "type": "PATTERN",
      "value": "0[oO][0-7_]+"
    },
    "_binary": {
      "type": "PATTERN",
      "value": "0[bB][0-1_]+"
    },
    "_bit_string_segment_option": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "binary"
        },
        {
          "type": "STRING",
          "value": "bytes"
        },
        {
          "type": "STRING",
          "value": "int"
        },
        {
          "type": "STRING",
          "value": "float"
        },
        {
          "type": "STRING",
          "value": "bit_string"
        },
        {
          "type": "STRING",
          "value": "bits"
        },
        {
          "type": "STRING",
          "value": "utf8"
        },
        {
          "type": "STRING",
          "value": "utf16"
        },
        {
          "type": "STRING",
          "value": "utf32"
        },
        {
          "type": "STRING",
          "value": "utf8_codepoint"
        },
        {
          "type": "STRING",
          "value": "utf16_codepoint"
        },
        {
          "type": "STRING",
          "value": "utf32_codepoint"
        },
        {
          "type": "STRING",
          "value": "signed"
        },
        {
          "type": "STRING",
          "value": "unsigned"
        },
        {
          "type": "STRING",
          "value": "big"
        },
        {
          "type": "STRING",
          "value": "little"
        },
        {
          "type": "STRING",
          "value": "native"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "unit"
            },
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "integer"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_hole"
        },
        {
          "type": "SYMBOL",
          "name": "tuple_type"
        },
        {
          "type": "SYMBOL",
          "name": "function_type"
        },
        {
          "type": "SYMBOL",
          "name": "type"
        },
        {
          "type": "SYMBOL",
          "name": "type_var"
        }
      ]
    },
    "_type_annotation": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "type",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        }
      ]
    },
    "type_hole": {
      "type": "SYMBOL",
      "name": "_discard_name"
    },
    "tuple_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_type"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_type"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "function_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "fn"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "parameter_types",
              "content": {
                "type": "SYMBOL",
                "name": "function_parameter_types"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "->"
        },
        {
          "type": "FIELD",
          "name": "return_type",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        }
      ]
    },
    "function_parameter_types": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_type"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_type"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "type": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_identifier"
              },
              {
                "type": "SYMBOL",
                "name": "remote_type_identifier"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "arguments",
              "content": {
                "type": "SYMBOL",
                "name": "type_arguments"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "type_arguments": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "type_argument"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "type_argument"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "type_argument": {
      "type": "SYMBOL",
      "name": "_type"
    },
    "type_var": {
      "type": "SYMBOL",
      "name": "_name"
    },
    "type_name": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "type_identifier"
              },
              {
                "type": "SYMBOL",
                "name": "remote_type_identifier"
              }
            ]
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "parameters",
              "content": {
                "type": "SYMBOL",
                "name": "type_parameters"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "type_parameters": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "type_parameter"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "type_parameter"
                      }
                    ]
                  }
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "type_parameter": {
      "type": "SYMBOL",
      "name": "_name"
    },
    "identifier": {
      "type": "SYMBOL",
      "name": "_name"
    },
    "label": {
      "type": "SYMBOL",
      "name": "_name"
    },
    "discard": {
      "type": "SYMBOL",
      "name": "_discard_name"
    },
    "type_identifier": {
      "type": "SYMBOL",
      "name": "_upname"
    },
    "remote_type_identifier": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "module",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "type_identifier"
          }
        }
      ]
    },
    "constructor_name": {
      "type": "SYMBOL",
      "name": "_upname"
    },
    "remote_constructor_name": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "module",
          "content": {
            "type": "SYMBOL",
            "name": "identifier"
          }
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "constructor_name"
          }
        }
      ]
    },
    "_discard_name": {
      "type": "PATTERN",
      "value": "_[_0-9a-z]*"
    },
    "_name": {
      "type": "PATTERN",
      "value": "[_a-z][_0-9a-z]*"
    },
    "_upname": {
      "type": "PATTERN",
      "value": "[A-Z][0-9a-zA-Z]*"
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "\\r?\\n"
    },
    {
      "type": "PATTERN",
      "value": "\\s"
    },
    {
      "type": "SYMBOL",
      "name": "module_comment"
    },
    {
      "type": "SYMBOL",
      "name": "statement_comment"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    }
  ],
  "conflicts": [
    [
      "_maybe_record_expression",
      "_maybe_tuple_expression"
    ],
    [
      "_maybe_record_expression",
      "_maybe_tuple_expression",
      "remote_constructor_name"
    ],
    [
      "case_subjects"
    ],
    [
      "source_file"
    ],
    [
      "_constant_value",
      "_case_clause_guard_unit"
    ],
    [
      "integer"
    ]
  ],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "quoted_content"
    },
    {
      "type": "SYMBOL",
      "name": "doc_comment_content"
    }
  ],
  "inline": [],
  "supertypes": [],
  "reserved": {}
}