{
  "name": "dtn",
  "word": "_identifier_without_operators",
  "rules": {
    "program": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "FIELD",
            "name": "import",
            "content": {
              "type": "SYMBOL",
              "name": "import"
            }
          }
        },
        {
          "type": "FIELD",
          "name": "declaration",
          "content": {
            "type": "SYMBOL",
            "name": "declaration"
          }
        }
      ]
    },
    "comment": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "#"
          },
          {
            "type": "PATTERN",
            "value": ".*"
          }
        ]
      }
    },
    "declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "declare"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "raw_string"
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_newline"
            },
            {
              "type": "SYMBOL",
              "name": "_indent"
            },
            {
              "type": "REPEAT1",
              "content": {
                "type": "FIELD",
                "name": "member",
                "content": {
                  "type": "SYMBOL",
                  "name": "declaration_member"
                }
              }
            },
            {
              "type": "SYMBOL",
              "name": "_dedent"
            }
          ]
        }
      ]
    },
    "declaration_member": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            },
            "named": true,
            "value": "identifier_pattern_name"
          }
        },
        {
          "type": "STRING",
          "value": "::"
        },
        {
          "type": "FIELD",
          "name": "type",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        }
      ]
    },
    "import": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "import"
        },
        {
          "type": "SYMBOL",
          "name": "_import_body"
        }
      ]
    },
    "_import_body": {
      "type": "PREC_LEFT",
      "value": 17,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "FIELD",
                "name": "import",
                "content": {
                  "type": "SYMBOL",
                  "name": "import_type"
                }
              },
              {
                "type": "REPEAT",
                "content": {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ","
                    },
                    {
                      "type": "FIELD",
                      "name": "import",
                      "content": {
                        "type": "SYMBOL",
                        "name": "import_type"
                      }
                    }
                  ]
                }
              }
            ]
          },
          {
            "type": "STRING",
            "value": "}"
          },
          {
            "type": "STRING",
            "value": "from"
          },
          {
            "type": "FIELD",
            "name": "source",
            "content": {
              "type": "SYMBOL",
              "name": "raw_string"
            }
          }
        ]
      }
    },
    "import_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "name",
                  "content": {
                    "type": "SYMBOL",
                    "name": "type"
                  }
                },
                {
                  "type": "STRING",
                  "value": "as"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "as",
          "content": {
            "type": "SYMBOL",
            "name": "type"
          }
        }
      ]
    },
    "_identifier_without_operators": {
      "type": "PATTERN",
      "value": "_?[a-z][a-z0-9_]*(\\?|!)?"
    },
    "_operator": {
      "type": "PATTERN",
      "value": "(==|[!@$%^&*|<>~*\\\\\\-+/.])[!@$%^&*|<>~*\\\\\\-+/.=?]*"
    },
    "identifier": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_identifier_without_operators"
        }
      ]
    },
    "type_variable_declaration": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "identifier"
              },
              "named": true,
              "value": "type_variable_declaration_name"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "<:"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "FIELD",
                        "name": "constraint",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_type"
                        }
                      },
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": "("
                          },
                          {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "FIELD",
                                "name": "constraint",
                                "content": {
                                  "type": "SYMBOL",
                                  "name": "_type"
                                }
                              },
                              {
                                "type": "REPEAT1",
                                "content": {
                                  "type": "SEQ",
                                  "members": [
                                    {
                                      "type": "STRING",
                                      "value": ";"
                                    },
                                    {
                                      "type": "FIELD",
                                      "name": "constraint",
                                      "content": {
                                        "type": "SYMBOL",
                                        "name": "_type"
                                      }
                                    }
                                  ]
                                }
                              }
                            ]
                          },
                          {
                            "type": "STRING",
                            "value": ")"
                          }
                        ]
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "_type": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "parametric_type"
          },
          {
            "type": "SYMBOL",
            "name": "curried_type"
          },
          {
            "type": "SYMBOL",
            "name": "intersection_type"
          },
          {
            "type": "SYMBOL",
            "name": "union_type"
          },
          {
            "type": "SYMBOL",
            "name": "subtraction_type"
          },
          {
            "type": "SYMBOL",
            "name": "conditional_type"
          },
          {
            "type": "SYMBOL",
            "name": "struct_type"
          },
          {
            "type": "SYMBOL",
            "name": "map_type"
          },
          {
            "type": "SYMBOL",
            "name": "tuple_type"
          },
          {
            "type": "SYMBOL",
            "name": "list_type"
          },
          {
            "type": "SYMBOL",
            "name": "tagged_type"
          },
          {
            "type": "SYMBOL",
            "name": "keyof"
          },
          {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            },
            "named": true,
            "value": "type_variable"
          },
          {
            "type": "SYMBOL",
            "name": "type_group"
          }
        ]
      }
    },
    "parametric_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "type"
            }
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "<"
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "FIELD",
                        "name": "argument",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_type"
                        }
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ","
                            },
                            {
                              "type": "FIELD",
                              "name": "argument",
                              "content": {
                                "type": "SYMBOL",
                                "name": "_type"
                              }
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "STRING",
                    "value": ">"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "curried_type": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "from",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          },
          {
            "type": "STRING",
            "value": "->"
          },
          {
            "type": "FIELD",
            "name": "to",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          }
        ]
      }
    },
    "intersection_type": {
      "type": "PREC_RIGHT",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "left",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          },
          {
            "type": "STRING",
            "value": "&"
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          }
        ]
      }
    },
    "union_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "left",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          },
          {
            "type": "STRING",
            "value": "|"
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          }
        ]
      }
    },
    "subtraction_type": {
      "type": "PREC_RIGHT",
      "value": -1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "FIELD",
            "name": "left",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "parametric_type"
                },
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "identifier"
                  },
                  "named": true,
                  "value": "type_variable"
                },
                {
                  "type": "SYMBOL",
                  "name": "union_type"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "\\"
          },
          {
            "type": "FIELD",
            "name": "right",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "parametric_type"
                },
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "identifier"
                  },
                  "named": true,
                  "value": "type_variable"
                },
                {
                  "type": "SYMBOL",
                  "name": "union_type"
                }
              ]
            }
          }
        ]
      }
    },
    "conditional_type": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "if"
          },
          {
            "type": "FIELD",
            "name": "type",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "<:"
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "FIELD",
                    "name": "constraint",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_type"
                    }
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": "("
                      },
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "FIELD",
                            "name": "constraint",
                            "content": {
                              "type": "SYMBOL",
                              "name": "_type"
                            }
                          },
                          {
                            "type": "REPEAT1",
                            "content": {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": ";"
                                },
                                {
                                  "type": "FIELD",
                                  "name": "constraint",
                                  "content": {
                                    "type": "SYMBOL",
                                    "name": "_type"
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      },
                      {
                        "type": "STRING",
                        "value": ")"
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            "type": "STRING",
            "value": "then"
          },
          {
            "type": "FIELD",
            "name": "consequence",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          },
          {
            "type": "STRING",
            "value": "else"
          },
          {
            "type": "FIELD",
            "name": "alternative",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          }
        ]
      }
    },
    "struct_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "member",
                  "content": {
                    "type": "SYMBOL",
                    "name": "member_type"
                  }
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "FIELD",
                        "name": "member",
                        "content": {
                          "type": "SYMBOL",
                          "name": "member_type"
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "member_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "key",
          "content": {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            },
            "named": true,
            "value": "shorthand_member_identifier"
          }
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        }
      ]
    },
    "map_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "FIELD",
                  "name": "property",
                  "content": {
                    "type": "ALIAS",
                    "content": {
                      "type": "SYMBOL",
                      "name": "identifier"
                    },
                    "named": true,
                    "value": "type_variable_declaration_name"
                  }
                },
                {
                  "type": "STRING",
                  "value": "in"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "key",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "FIELD",
          "name": "value",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "tuple_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "()"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "FIELD",
                      "name": "element",
                      "content": {
                        "type": "SYMBOL",
                        "name": "_type"
                      }
                    },
                    {
                      "type": "REPEAT1",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "FIELD",
                            "name": "element",
                            "content": {
                              "type": "SYMBOL",
                              "name": "_type"
                            }
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "list_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "FIELD",
          "name": "element",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "tagged_type": {
      "type": "PREC_RIGHT",
      "value": 17,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "<"
          },
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            }
          },
          {
            "type": "STRING",
            "value": ">"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "FIELD",
                "name": "type",
                "content": {
                  "type": "SYMBOL",
                  "name": "_type"
                }
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "keyof": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "keyof"
          },
          {
            "type": "FIELD",
            "name": "type",
            "content": {
              "type": "SYMBOL",
              "name": "_type"
            }
          }
        ]
      }
    },
    "type_group": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "FIELD",
          "name": "type",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "type": {
      "type": "PATTERN",
      "value": "[A-Z][a-zA-Z0-9]*"
    },
    "boolean": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "false"
        },
        {
          "type": "STRING",
          "value": "true"
        }
      ]
    },
    "_decimal": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "REPEAT1",
                "content": {
                  "type": "PATTERN",
                  "value": "_?[0-9]+"
                }
              },
              {
                "type": "STRING",
                "value": "."
              },
              {
                "type": "REPEAT1",
                "content": {
                  "type": "PATTERN",
                  "value": "_?[0-9]+"
                }
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "e-?"
                      },
                      {
                        "type": "REPEAT1",
                        "content": {
                          "type": "PATTERN",
                          "value": "_?[0-9]+"
                        }
                      }
                    ]
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "REPEAT1",
                "content": {
                  "type": "PATTERN",
                  "value": "_?[0-9]+"
                }
              },
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "PATTERN",
                    "value": "e-?"
                  },
                  {
                    "type": "REPEAT1",
                    "content": {
                      "type": "PATTERN",
                      "value": "_?[0-9]+"
                    }
                  }
                ]
              }
            ]
          }
        ]
      }
    },
    "_integer": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "0x"
              },
              {
                "type": "REPEAT1",
                "content": {
                  "type": "PATTERN",
                  "value": "_?[A-Fa-f0-9]+"
                }
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "0o"
              },
              {
                "type": "REPEAT1",
                "content": {
                  "type": "PATTERN",
                  "value": "_?[0-7]+"
                }
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "0b"
              },
              {
                "type": "REPEAT1",
                "content": {
                  "type": "PATTERN",
                  "value": "_?[0-1]+"
                }
              }
            ]
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "REPEAT1",
                "content": {
                  "type": "PATTERN",
                  "value": "_?[0-9]+"
                }
              }
            ]
          }
        ]
      }
    },
    "number": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_decimal"
        },
        {
          "type": "SYMBOL",
          "name": "_integer"
        }
      ]
    },
    "raw_string": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_string_start"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_string_content"
              }
            ]
          }
        },
        {
          "type": "SYMBOL",
          "name": "_string_end"
        }
      ]
    },
    "regex": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "r/"
        },
        {
          "type": "FIELD",
          "name": "pattern",
          "content": {
            "type": "SYMBOL",
            "name": "regex_pattern"
          }
        },
        {
          "type": "STRING",
          "value": "/"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "FIELD",
              "name": "flags",
              "content": {
                "type": "SYMBOL",
                "name": "regex_flags"
              }
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "regex_pattern": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "REPEAT1",
        "content": {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "["
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": "\\"
                          },
                          {
                            "type": "PATTERN",
                            "value": "."
                          }
                        ]
                      },
                      {
                        "type": "PATTERN",
                        "value": "[^\\]\\n\\\\]"
                      }
                    ]
                  }
                },
                {
                  "type": "STRING",
                  "value": "]"
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "\\"
                },
                {
                  "type": "PATTERN",
                  "value": "."
                }
              ]
            },
            {
              "type": "PATTERN",
              "value": "[^/\\\\\\[\\n]"
            }
          ]
        }
      }
    },
    "regex_flags": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "[a-z]+"
      }
    }
  },
  "extras": [
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "PATTERN",
      "value": "\\s+"
    }
  ],
  "conflicts": [],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "_newline"
    },
    {
      "type": "SYMBOL",
      "name": "_indent"
    },
    {
      "type": "SYMBOL",
      "name": "_dedent"
    },
    {
      "type": "SYMBOL",
      "name": "_string_start"
    },
    {
      "type": "SYMBOL",
      "name": "_string_content"
    },
    {
      "type": "SYMBOL",
      "name": "_string_end"
    }
  ],
  "inline": [],
  "supertypes": []
}

