{
  "name": "nickel",
  "word": "keyword",
  "rules": {
    "term": {
      "type": "SYMBOL",
      "name": "uni_term"
    },
    "keyword": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "if|then|else|forall|in|let|rec|match|null|true|false|fun|import|merge|default|doc|force|optional|priority|not_exported"
      }
    },
    "num_literal": {
      "type": "PATTERN",
      "value": "([0-9]*\\.?[0-9]+([eE][+\\-]?[0-9]+)?)|0((b[01]+)|(o[0-7]+)|(x[0-9a-fA-F]+))"
    },
    "signed_num_literal": {
      "type": "PATTERN",
      "value": "-?(([0-9]*\\.?[0-9]+([eE][+\\-]?[0-9]+)?)|0((b[01]+)|(o[0-7]+)|(x[0-9a-fA-F]+)))"
    },
    "ident": {
      "type": "PATTERN",
      "value": "_*[a-zA-Z][_a-zA-Z0-9-']*"
    },
    "raw_enum_tag": {
      "type": "PATTERN",
      "value": "'_*[a-zA-Z][_a-zA-Z0-9-']*"
    },
    "annot_atom": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "FIELD",
              "name": "ty",
              "content": {
                "type": "SYMBOL",
                "name": "types"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "STRING",
              "value": "default"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "STRING",
              "value": "force"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "STRING",
              "value": "optional"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "STRING",
              "value": "priority"
            },
            {
              "type": "FIELD",
              "name": "priority",
              "content": {
                "type": "SYMBOL",
                "name": "signed_num_literal"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "STRING",
              "value": "doc"
            },
            {
              "type": "FIELD",
              "name": "doc",
              "content": {
                "type": "SYMBOL",
                "name": "static_string"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "STRING",
              "value": "rec"
            },
            {
              "type": "STRING",
              "value": "force"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "STRING",
              "value": "rec"
            },
            {
              "type": "STRING",
              "value": "default"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "STRING",
              "value": "not_exported"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": ":"
            },
            {
              "type": "FIELD",
              "name": "ty",
              "content": {
                "type": "SYMBOL",
                "name": "types"
              }
            }
          ]
        }
      ]
    },
    "annot": {
      "type": "FIELD",
      "name": "anns",
      "content": {
        "type": "REPEAT1",
        "content": {
          "type": "SYMBOL",
          "name": "annot_atom"
        }
      }
    },
    "types": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "infix_expr"
        },
        {
          "type": "SYMBOL",
          "name": "forall"
        }
      ]
    },
    "uni_term": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "infix_expr"
        },
        {
          "type": "SYMBOL",
          "name": "annotated_infix_expr"
        },
        {
          "type": "SYMBOL",
          "name": "forall"
        },
        {
          "type": "SYMBOL",
          "name": "let_expr"
        },
        {
          "type": "SYMBOL",
          "name": "fun_expr"
        },
        {
          "type": "SYMBOL",
          "name": "ite_expr"
        }
      ]
    },
    "let_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "binding",
          "content": {
            "type": "SYMBOL",
            "name": "let_in_block"
          }
        },
        {
          "type": "FIELD",
          "name": "t2",
          "content": {
            "type": "SYMBOL",
            "name": "term"
          }
        }
      ]
    },
    "let_binding": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "pat",
          "content": {
            "type": "SYMBOL",
            "name": "pattern"
          }
        },
        {
          "type": "FIELD",
          "name": "meta",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "annot"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "t1",
          "content": {
            "type": "SYMBOL",
            "name": "term"
          }
        }
      ]
    },
    "let_in_block": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "let"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "rec"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "bindings",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "let_binding"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ","
                            },
                            {
                              "type": "SYMBOL",
                              "name": "let_binding"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "in"
        }
      ]
    },
    "fun_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "fun"
        },
        {
          "type": "FIELD",
          "name": "pats",
          "content": {
            "type": "REPEAT1",
            "content": {
              "type": "SYMBOL",
              "name": "pattern_fun"
            }
          }
        },
        {
          "type": "STRING",
          "value": "=>"
        },
        {
          "type": "FIELD",
          "name": "t",
          "content": {
            "type": "SYMBOL",
            "name": "term"
          }
        }
      ]
    },
    "match_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "match"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "FIELD",
          "name": "cases",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "match_branch"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ","
                            },
                            {
                              "type": "SYMBOL",
                              "name": "match_branch"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "ite_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "FIELD",
          "name": "cond",
          "content": {
            "type": "SYMBOL",
            "name": "term"
          }
        },
        {
          "type": "STRING",
          "value": "then"
        },
        {
          "type": "FIELD",
          "name": "t1",
          "content": {
            "type": "SYMBOL",
            "name": "term"
          }
        },
        {
          "type": "STRING",
          "value": "else"
        },
        {
          "type": "FIELD",
          "name": "t2",
          "content": {
            "type": "SYMBOL",
            "name": "term"
          }
        }
      ]
    },
    "annotated_infix_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "t",
          "content": {
            "type": "SYMBOL",
            "name": "infix_expr"
          }
        },
        {
          "type": "FIELD",
          "name": "meta",
          "content": {
            "type": "SYMBOL",
            "name": "annot"
          }
        }
      ]
    },
    "forall": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "forall"
        },
        {
          "type": "FIELD",
          "name": "ids",
          "content": {
            "type": "REPEAT1",
            "content": {
              "type": "SYMBOL",
              "name": "ident"
            }
          }
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "FIELD",
          "name": "ty",
          "content": {
            "type": "SYMBOL",
            "name": "types"
          }
        }
      ]
    },
    "applicative": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "import"
            },
            {
              "type": "FIELD",
              "name": "s",
              "content": {
                "type": "SYMBOL",
                "name": "static_string"
              }
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "type_array"
        },
        {
          "type": "SYMBOL",
          "name": "enum_variant"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "t1",
              "content": {
                "type": "SYMBOL",
                "name": "applicative"
              }
            },
            {
              "type": "FIELD",
              "name": "t2",
              "content": {
                "type": "SYMBOL",
                "name": "record_operand"
              }
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "match_expr"
        },
        {
          "type": "SYMBOL",
          "name": "record_operand"
        }
      ]
    },
    "type_array": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "Array"
        },
        {
          "type": "SYMBOL",
          "name": "record_operand"
        }
      ]
    },
    "record_operand": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "atom"
        },
        {
          "type": "SYMBOL",
          "name": "record_operation_chain"
        }
      ]
    },
    "record_operation_chain": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "t",
              "content": {
                "type": "SYMBOL",
                "name": "record_operand"
              }
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "FIELD",
              "name": "id",
              "content": {
                "type": "SYMBOL",
                "name": "ident"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "t",
              "content": {
                "type": "SYMBOL",
                "name": "record_operand"
              }
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "FIELD",
              "name": "t_id",
              "content": {
                "type": "SYMBOL",
                "name": "str_chunks"
              }
            }
          ]
        }
      ]
    },
    "row_tail": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "ident"
        },
        {
          "type": "STRING",
          "value": "Dyn"
        }
      ]
    },
    "uni_record": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "FIELD",
          "name": "fields",
          "content": {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "record_field"
                },
                {
                  "type": "STRING",
                  "value": ","
                }
              ]
            }
          }
        },
        {
          "type": "FIELD",
          "name": "last",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "record_last_field"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "tail",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ";"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "row_tail"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "atom": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "curried_op"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "uni_term"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "num_literal"
        },
        {
          "type": "STRING",
          "value": "null"
        },
        {
          "type": "SYMBOL",
          "name": "bool"
        },
        {
          "type": "SYMBOL",
          "name": "str_chunks"
        },
        {
          "type": "SYMBOL",
          "name": "ident"
        },
        {
          "type": "SYMBOL",
          "name": "builtin"
        },
        {
          "type": "SYMBOL",
          "name": "uni_record"
        },
        {
          "type": "SYMBOL",
          "name": "enum_tag"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "["
            },
            {
              "type": "FIELD",
              "name": "terms",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "term"
                          },
                          {
                            "type": "REPEAT",
                            "content": {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": ","
                                },
                                {
                                  "type": "SYMBOL",
                                  "name": "term"
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              }
            },
            {
              "type": "STRING",
              "value": "]"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "type_atom"
        }
      ]
    },
    "record_field": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "path",
          "content": {
            "type": "SYMBOL",
            "name": "field_path"
          }
        },
        {
          "type": "FIELD",
          "name": "ann",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "annot"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "t",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "="
                  },
                  {
                    "type": "SYMBOL",
                    "name": "term"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        }
      ]
    },
    "record_last_field": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "record_field"
        },
        {
          "type": "STRING",
          "value": ".."
        }
      ]
    },
    "field_path": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "field_path_elem"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "."
              },
              {
                "type": "SYMBOL",
                "name": "field_path_elem"
              }
            ]
          }
        }
      ]
    },
    "field_path_elem": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "ident"
        },
        {
          "type": "SYMBOL",
          "name": "str_chunks"
        }
      ]
    },
    "last_field_pat": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "field_pattern"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": ".."
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "ident"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "last_elem_pat": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "pattern"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": ".."
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "ident"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "FIELD",
                  "name": "alias",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "ident"
                      },
                      {
                        "type": "STRING",
                        "value": "@"
                      }
                    ]
                  }
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "pat",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "record_pattern"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "array_pattern"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "constant_pattern"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "enum_pattern"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "ident"
                  },
                  {
                    "type": "STRING",
                    "value": "_"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "or_pattern"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "pattern_fun": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "FIELD",
                  "name": "alias",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "ident"
                      },
                      {
                        "type": "STRING",
                        "value": "@"
                      }
                    ]
                  }
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "FIELD",
              "name": "pat",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "record_pattern"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "array_pattern"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "constant_pattern"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "enum_pattern_parens"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "ident"
                  },
                  {
                    "type": "STRING",
                    "value": "_"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "or_pattern_parens"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "pattern_or_branch": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "record_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "array_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "constant_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "enum_pattern_parens"
        },
        {
          "type": "SYMBOL",
          "name": "ident"
        },
        {
          "type": "STRING",
          "value": "_"
        },
        {
          "type": "SYMBOL",
          "name": "or_pattern_parens"
        }
      ]
    },
    "constant_pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "signed_num_literal"
        },
        {
          "type": "SYMBOL",
          "name": "bool"
        },
        {
          "type": "SYMBOL",
          "name": "static_string"
        },
        {
          "type": "STRING",
          "value": "null"
        }
      ]
    },
    "record_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "FIELD",
          "name": "patterns",
          "content": {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "field_pattern"
                },
                {
                  "type": "STRING",
                  "value": ","
                }
              ]
            }
          }
        },
        {
          "type": "FIELD",
          "name": "last",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "last_field_pat"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "array_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "FIELD",
          "name": "patterns",
          "content": {
            "type": "REPEAT",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "pattern"
                },
                {
                  "type": "STRING",
                  "value": ","
                }
              ]
            }
          }
        },
        {
          "type": "FIELD",
          "name": "last",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "last_elem_pat"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "field_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "id",
          "content": {
            "type": "SYMBOL",
            "name": "ident"
          }
        },
        {
          "type": "FIELD",
          "name": "anns",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "annot"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "default",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "default_annot"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "pat",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "="
                  },
                  {
                    "type": "SYMBOL",
                    "name": "pattern"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        }
      ]
    },
    "enum_variant_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "tag",
          "content": {
            "type": "SYMBOL",
            "name": "enum_tag"
          }
        },
        {
          "type": "FIELD",
          "name": "pat",
          "content": {
            "type": "SYMBOL",
            "name": "pattern_fun"
          }
        }
      ]
    },
    "enum_pattern_unparens": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "enum_tag"
        },
        {
          "type": "SYMBOL",
          "name": "enum_variant_pattern"
        }
      ]
    },
    "enum_pattern_parens": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "enum_tag"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "enum_variant_pattern"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "enum_pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "enum_tag"
        },
        {
          "type": "SYMBOL",
          "name": "enum_variant_pattern"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "enum_variant_pattern"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "or_pattern_unparens": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "patterns",
          "content": {
            "type": "REPEAT1",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "pattern_or_branch"
                },
                {
                  "type": "STRING",
                  "value": "or"
                }
              ]
            }
          }
        },
        {
          "type": "FIELD",
          "name": "last",
          "content": {
            "type": "SYMBOL",
            "name": "pattern_or_branch"
          }
        }
      ]
    },
    "or_pattern_parens": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "or_pattern_unparens"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "or_pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "or_pattern_unparens"
        },
        {
          "type": "SYMBOL",
          "name": "or_pattern_parens"
        }
      ]
    },
    "default_annot": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "?"
        },
        {
          "type": "FIELD",
          "name": "t",
          "content": {
            "type": "SYMBOL",
            "name": "term"
          }
        }
      ]
    },
    "bool": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "true"
        },
        {
          "type": "STRING",
          "value": "false"
        }
      ]
    },
    "str_chunks": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "str_chunks_single"
        },
        {
          "type": "SYMBOL",
          "name": "str_chunks_multi"
        }
      ]
    },
    "str_chunks_single": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_str_start"
        },
        {
          "type": "FIELD",
          "name": "chunks",
          "content": {
            "type": "REPEAT",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "chunk_expr"
                },
                {
                  "type": "SYMBOL",
                  "name": "chunk_literal_single"
                }
              ]
            }
          }
        },
        {
          "type": "SYMBOL",
          "name": "_str_end"
        }
      ]
    },
    "str_chunks_multi": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "start",
          "content": {
            "type": "SYMBOL",
            "name": "multstr_start"
          }
        },
        {
          "type": "FIELD",
          "name": "chunks",
          "content": {
            "type": "REPEAT",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "chunk_expr"
                },
                {
                  "type": "SYMBOL",
                  "name": "chunk_literal_multi"
                }
              ]
            }
          }
        },
        {
          "type": "FIELD",
          "name": "end",
          "content": {
            "type": "SYMBOL",
            "name": "multstr_end"
          }
        }
      ]
    },
    "chunk_expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "start",
          "content": {
            "type": "SYMBOL",
            "name": "interpolation_start"
          }
        },
        {
          "type": "FIELD",
          "name": "t",
          "content": {
            "type": "SYMBOL",
            "name": "term"
          }
        },
        {
          "type": "FIELD",
          "name": "end",
          "content": {
            "type": "SYMBOL",
            "name": "interpolation_end"
          }
        }
      ]
    },
    "static_string": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_str_start"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SYMBOL",
                "name": "chunk_literal_single"
              }
            },
            {
              "type": "SYMBOL",
              "name": "_str_end"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "multstr_start"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SYMBOL",
                "name": "chunk_literal_multi"
              }
            },
            {
              "type": "SYMBOL",
              "name": "multstr_end"
            }
          ]
        }
      ]
    },
    "quoted_enum_tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "quoted_enum_tag_start"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "chunk_literal_single"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_str_end"
        }
      ]
    },
    "enum_tag": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "raw_enum_tag"
        },
        {
          "type": "SYMBOL",
          "name": "quoted_enum_tag"
        }
      ]
    },
    "enum_variant": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "tag",
            "content": {
              "type": "SYMBOL",
              "name": "enum_tag"
            }
          },
          {
            "type": "FIELD",
            "name": "arg",
            "content": {
              "type": "SYMBOL",
              "name": "record_operand"
            }
          }
        ]
      }
    },
    "enum": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "enum_tag"
        },
        {
          "type": "SYMBOL",
          "name": "enum_variant"
        }
      ]
    },
    "chunk_literal_single": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "str_esc_char"
        },
        {
          "type": "SYMBOL",
          "name": "str_literal"
        },
        {
          "type": "SYMBOL",
          "name": "percent"
        }
      ]
    },
    "chunk_literal_multi": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "str_esc_char"
        },
        {
          "type": "SYMBOL",
          "name": "mult_str_literal"
        },
        {
          "type": "SYMBOL",
          "name": "percent"
        },
        {
          "type": "SYMBOL",
          "name": "double_quote"
        }
      ]
    },
    "percent": {
      "type": "STRING",
      "value": "%"
    },
    "double_quote": {
      "type": "STRING",
      "value": "\""
    },
    "str_literal": {
      "type": "PATTERN",
      "value": "[^\"%\\\\]+"
    },
    "mult_str_literal": {
      "type": "PATTERN",
      "value": "[^\"%]+"
    },
    "str_esc_char": {
      "type": "PATTERN",
      "value": "\\\\."
    },
    "builtin": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "%"
        },
        {
          "type": "PATTERN",
          "value": "_*[a-zA-Z][a-zA-Z0-9./_'-]*"
        },
        {
          "type": "STRING",
          "value": "%"
        }
      ]
    },
    "pattern_guard": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "SYMBOL",
          "name": "term"
        }
      ]
    },
    "match_branch": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "pat",
          "content": {
            "type": "SYMBOL",
            "name": "pattern"
          }
        },
        {
          "type": "FIELD",
          "name": "guard",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "pattern_guard"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "=>"
        },
        {
          "type": "FIELD",
          "name": "body",
          "content": {
            "type": "SYMBOL",
            "name": "term"
          }
        }
      ]
    },
    "infix_b_op_2": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "++"
        },
        {
          "type": "STRING",
          "value": "@"
        }
      ]
    },
    "infix_b_op_3": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "*"
        },
        {
          "type": "STRING",
          "value": "/"
        },
        {
          "type": "STRING",
          "value": "%"
        }
      ]
    },
    "infix_b_op_4": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "+"
        },
        {
          "type": "STRING",
          "value": "-"
        }
      ]
    },
    "infix_u_op_5": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "!"
        }
      ]
    },
    "infix_b_op_6": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "&"
        },
        {
          "type": "STRING",
          "value": "|>"
        }
      ]
    },
    "infix_b_op_7": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "<"
        },
        {
          "type": "STRING",
          "value": "<="
        },
        {
          "type": "STRING",
          "value": ">"
        },
        {
          "type": "STRING",
          "value": ">="
        }
      ]
    },
    "infix_b_op_8": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "=="
        },
        {
          "type": "STRING",
          "value": "!="
        }
      ]
    },
    "infix_lazy_b_op_9": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "&&"
        }
      ]
    },
    "infix_lazy_b_op_10": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "||"
        }
      ]
    },
    "infix_b_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "infix_b_op_2"
        },
        {
          "type": "SYMBOL",
          "name": "infix_b_op_3"
        },
        {
          "type": "SYMBOL",
          "name": "infix_b_op_4"
        },
        {
          "type": "SYMBOL",
          "name": "infix_b_op_6"
        },
        {
          "type": "SYMBOL",
          "name": "infix_b_op_7"
        },
        {
          "type": "SYMBOL",
          "name": "infix_b_op_8"
        }
      ]
    },
    "infix_u_op_or_lazy_b_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "infix_u_op_5"
        },
        {
          "type": "SYMBOL",
          "name": "infix_lazy_b_op_9"
        },
        {
          "type": "SYMBOL",
          "name": "infix_lazy_b_op_10"
        }
      ]
    },
    "infix_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "infix_b_op"
        },
        {
          "type": "SYMBOL",
          "name": "infix_u_op_or_lazy_b_op"
        }
      ]
    },
    "curried_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "infix_op"
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "infix_expr": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC_LEFT",
          "value": 0,
          "content": {
            "type": "SYMBOL",
            "name": "applicative"
          }
        },
        {
          "type": "PREC",
          "value": -1,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "STRING",
                  "value": "-"
                }
              },
              {
                "type": "FIELD",
                "name": "t",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": -2,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "t1",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_b_op_2"
                }
              },
              {
                "type": "FIELD",
                "name": "t2",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": -3,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "t1",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_b_op_3"
                }
              },
              {
                "type": "FIELD",
                "name": "t2",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": -4,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "t1",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_b_op_4"
                }
              },
              {
                "type": "FIELD",
                "name": "t2",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": -5,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_u_op_5"
                }
              },
              {
                "type": "FIELD",
                "name": "t",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": -6,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "t1",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_b_op_6"
                }
              },
              {
                "type": "FIELD",
                "name": "t2",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": -7,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "t1",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_b_op_7"
                }
              },
              {
                "type": "FIELD",
                "name": "t2",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": -8,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "t1",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_b_op_8"
                }
              },
              {
                "type": "FIELD",
                "name": "t2",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": -9,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "t1",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_lazy_b_op_9"
                }
              },
              {
                "type": "FIELD",
                "name": "t2",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_LEFT",
          "value": -10,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "t1",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_lazy_b_op_10"
                }
              },
              {
                "type": "FIELD",
                "name": "t2",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        },
        {
          "type": "PREC_RIGHT",
          "value": -11,
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "t1",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              },
              {
                "type": "FIELD",
                "name": "op",
                "content": {
                  "type": "STRING",
                  "value": "->"
                }
              },
              {
                "type": "FIELD",
                "name": "t2",
                "content": {
                  "type": "SYMBOL",
                  "name": "infix_expr"
                }
              }
            ]
          }
        }
      ]
    },
    "type_builtin": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "Dyn"
        },
        {
          "type": "STRING",
          "value": "Number"
        },
        {
          "type": "STRING",
          "value": "Bool"
        },
        {
          "type": "STRING",
          "value": "String"
        }
      ]
    },
    "type_atom": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_builtin"
        },
        {
          "type": "STRING",
          "value": "_"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "[|"
            },
            {
              "type": "FIELD",
              "name": "rows",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "enum"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ","
                            },
                            {
                              "type": "SYMBOL",
                              "name": "enum"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            },
            {
              "type": "FIELD",
              "name": "tail",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ";"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "ident"
                      }
                    ]
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            },
            {
              "type": "STRING",
              "value": "|]"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "{"
            },
            {
              "type": "STRING",
              "value": "_"
            },
            {
              "type": "STRING",
              "value": ":"
            },
            {
              "type": "FIELD",
              "name": "types",
              "content": {
                "type": "SYMBOL",
                "name": "types"
              }
            },
            {
              "type": "STRING",
              "value": "}"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "{"
            },
            {
              "type": "STRING",
              "value": "_"
            },
            {
              "type": "STRING",
              "value": "|"
            },
            {
              "type": "FIELD",
              "name": "types",
              "content": {
                "type": "SYMBOL",
                "name": "types"
              }
            },
            {
              "type": "STRING",
              "value": "}"
            }
          ]
        }
      ]
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "\\s"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    }
  ],
  "conflicts": [],
  "precedences": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "multstr_start"
    },
    {
      "type": "SYMBOL",
      "name": "multstr_end"
    },
    {
      "type": "SYMBOL",
      "name": "_str_start"
    },
    {
      "type": "SYMBOL",
      "name": "_str_end"
    },
    {
      "type": "SYMBOL",
      "name": "interpolation_start"
    },
    {
      "type": "SYMBOL",
      "name": "interpolation_end"
    },
    {
      "type": "SYMBOL",
      "name": "quoted_enum_tag_start"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    }
  ],
  "inline": [],
  "supertypes": []
}
