{ "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", "name": "knot", "word": "lower_identifier", "rules": { "source_file": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "module_declaration" }, { "type": "SYMBOL", "name": "_newline" } ] }, { "type": "BLANK" } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_declaration" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_declaration" } ] } } ] }, { "type": "BLANK" } ] } ] }, "module_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "module" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "upper_identifier" } } ] }, "_declaration": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "import_declaration" }, { "type": "SYMBOL", "name": "export_declaration" }, { "type": "SYMBOL", "name": "_declaration_body" } ] }, "_declaration_body": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "data_declaration" }, { "type": "SYMBOL", "name": "type_alias_declaration" }, { "type": "SYMBOL", "name": "source_declaration" }, { "type": "SYMBOL", "name": "view_declaration" }, { "type": "SYMBOL", "name": "derived_declaration" }, { "type": "SYMBOL", "name": "fun_declaration" }, { "type": "SYMBOL", "name": "trait_declaration" }, { "type": "SYMBOL", "name": "impl_declaration" }, { "type": "SYMBOL", "name": "migrate_declaration" }, { "type": "SYMBOL", "name": "route_declaration" }, { "type": "SYMBOL", "name": "route_composite_declaration" }, { "type": "SYMBOL", "name": "subset_constraint" } ] }, "import_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "import" }, { "type": "FIELD", "name": "path", "content": { "type": "SYMBOL", "name": "import_path" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "import_item" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "import_item" } ] } } ] }, { "type": "STRING", "value": ")" } ] }, { "type": "BLANK" } ] } ] }, "import_path": { "type": "SEQ", "members": [ { "type": "STRING", "value": "." }, { "type": "STRING", "value": "/" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "lower_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "/" }, { "type": "SYMBOL", "name": "lower_identifier" } ] } } ] } ] }, "import_item": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "lower_identifier" }, { "type": "SYMBOL", "name": "upper_identifier" } ] }, "export_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "export" }, { "type": "SYMBOL", "name": "_declaration_body" } ] }, "data_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "data" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "upper_identifier" } }, { "type": "FIELD", "name": "params", "content": { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "lower_identifier" } } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_indent" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "constructor_def" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "constructor_def" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "deriving_clause" } ] }, { "type": "BLANK" } ] }, { "type": "SYMBOL", "name": "_dedent" } ] }, { "type": "SEQ", "members": [ { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "constructor_def" } }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "deriving_clause" }, { "type": "BLANK" } ] } ] } ] } ] }, "constructor_def": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "STRING", "value": "=" }, { "type": "STRING", "value": "|" } ] }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "upper_identifier" } }, { "type": "FIELD", "name": "fields", "content": { "type": "SYMBOL", "name": "record_type_body" } } ] }, "deriving_clause": { "type": "SEQ", "members": [ { "type": "STRING", "value": "deriving" }, { "type": "STRING", "value": "(" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "upper_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "upper_identifier" } ] } } ] }, { "type": "STRING", "value": ")" } ] }, "type_alias_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "type" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "upper_identifier" } }, { "type": "FIELD", "name": "params", "content": { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "lower_identifier" } } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type" } } ] }, "source_declaration": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "source_ref" }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "with" }, { "type": "STRING", "value": "history" } ] }, { "type": "BLANK" } ] } ] }, "view_declaration": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "source_ref" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_block_body" } } ] }, "derived_declaration": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "derived_ref" }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_block_body" } } ] }, "fun_declaration": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "lower_identifier" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "type_scheme" } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_block_body" } } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "type_scheme" } } ] } ] } ] }, "trait_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "trait" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "supertrait" } }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "upper_identifier" } }, { "type": "FIELD", "name": "params", "content": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_trait_param" } } }, { "type": "STRING", "value": "where" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_trait_item" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_trait_item" } ] } } ] }, { "type": "SYMBOL", "name": "_dedent" } ] }, "supertrait": { "type": "PREC_DYNAMIC", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "upper_identifier" }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_type_atom" } }, { "type": "STRING", "value": "=>" } ] } }, "_trait_param": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "lower_identifier" }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "lower_identifier" }, { "type": "STRING", "value": ":" }, { "type": "SYMBOL", "name": "_type" }, { "type": "STRING", "value": ")" } ] } ] }, "_trait_item": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "trait_method" }, { "type": "SYMBOL", "name": "trait_associated_type" }, { "type": "SYMBOL", "name": "trait_default_body" } ] }, "trait_method": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "lower_identifier" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "type_scheme" } } ] }, { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_pattern_atom" } }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "_expression" } ] } ] } ] } }, "trait_associated_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "type" }, { "type": "SYMBOL", "name": "upper_identifier" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "lower_identifier" } } ] }, "trait_default_body": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "lower_identifier" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_pattern_atom" } }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "_expression" } ] }, "impl_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "impl" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "constraint" }, { "type": "STRING", "value": "=>" } ] } }, { "type": "FIELD", "name": "trait", "content": { "type": "SYMBOL", "name": "upper_identifier" } }, { "type": "FIELD", "name": "args", "content": { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_type_atom" } } }, { "type": "STRING", "value": "where" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_impl_item" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_impl_item" } ] } } ] }, { "type": "SYMBOL", "name": "_dedent" } ] }, "_impl_item": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "impl_method" }, { "type": "SYMBOL", "name": "impl_associated_type" } ] }, "impl_method": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "lower_identifier" } }, { "type": "FIELD", "name": "params", "content": { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_pattern_atom" } } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_block_body" } } ] }, "impl_associated_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "type" }, { "type": "SYMBOL", "name": "upper_identifier" }, { "type": "REPEAT", "content": { "type": "SYMBOL", "name": "_type_atom" } }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "_type" } ] }, "migrate_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "migrate" }, { "type": "FIELD", "name": "relation", "content": { "type": "SYMBOL", "name": "source_ref" } }, { "type": "STRING", "value": "from" }, { "type": "FIELD", "name": "from", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "STRING", "value": "to" }, { "type": "FIELD", "name": "to", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "STRING", "value": "using" }, { "type": "FIELD", "name": "using", "content": { "type": "SYMBOL", "name": "_expression" } } ] }, "route_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "route" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "upper_identifier" } }, { "type": "STRING", "value": "where" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_route_item" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_route_item" } ] } } ] }, { "type": "SYMBOL", "name": "_dedent" } ] }, "route_composite_declaration": { "type": "SEQ", "members": [ { "type": "STRING", "value": "route" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "upper_identifier" } }, { "type": "STRING", "value": "=" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "upper_identifier" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "upper_identifier" } ] } } ] } ] }, "_route_item": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "route_entry" }, { "type": "SYMBOL", "name": "route_path_group" } ] }, "route_path_group": { "type": "SEQ", "members": [ { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_route_path_segment" } }, { "type": "SYMBOL", "name": "_indent" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_route_item" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_route_item" } ] } } ] }, { "type": "SYMBOL", "name": "_dedent" } ] }, "route_entry": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "method", "content": { "type": "SYMBOL", "name": "http_method" } }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_route_path_segment" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "record_type_body" } }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "?" }, { "type": "FIELD", "name": "query", "content": { "type": "SYMBOL", "name": "record_type_body" } } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "headers" }, { "type": "SYMBOL", "name": "record_type_body" } ] } ] } }, { "type": "STRING", "value": "->" }, { "type": "FIELD", "name": "response", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "headers" }, { "type": "SYMBOL", "name": "record_type_body" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "constructor", "content": { "type": "SYMBOL", "name": "upper_identifier" } } ] } }, "_route_path_segment": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "/" }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "lower_identifier" } } ] }, { "type": "SEQ", "members": [ { "type": "STRING", "value": "/" }, { "type": "IMMEDIATE_TOKEN", "content": { "type": "STRING", "value": "{" } }, { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "lower_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type" } }, { "type": "STRING", "value": "}" } ] }, { "type": "STRING", "value": "/" } ] }, "http_method": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "GET" }, { "type": "STRING", "value": "POST" }, { "type": "STRING", "value": "PUT" }, { "type": "STRING", "value": "DELETE" }, { "type": "STRING", "value": "PATCH" } ] }, "subset_constraint": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_constraint_path" }, { "type": "STRING", "value": "<=" }, { "type": "SYMBOL", "name": "_constraint_path" } ] }, "_constraint_path": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "source_ref" }, { "type": "STRING", "value": "." }, { "type": "SYMBOL", "name": "lower_identifier" } ] }, { "type": "SYMBOL", "name": "source_ref" } ] }, "type_scheme": { "type": "SEQ", "members": [ { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "constraint" }, { "type": "STRING", "value": "=>" } ] } }, { "type": "SYMBOL", "name": "_type" } ] }, "constraint": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "upper_identifier" }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_type_atom" } } ] }, "_type": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "function_type" }, { "type": "SYMBOL", "name": "refined_type" }, { "type": "SYMBOL", "name": "_type_app" } ] }, "function_type": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "param", "content": { "type": "SYMBOL", "name": "refined_type" } }, { "type": "STRING", "value": "->" }, { "type": "FIELD", "name": "result", "content": { "type": "SYMBOL", "name": "_type" } } ] } }, "refined_type": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "base", "content": { "type": "SYMBOL", "name": "_type_app" } }, { "type": "STRING", "value": "where" }, { "type": "FIELD", "name": "predicate", "content": { "type": "SYMBOL", "name": "_expression" } } ] }, { "type": "SYMBOL", "name": "_type_app" } ] }, "_type_app": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "type_application" }, { "type": "SYMBOL", "name": "_type_atom" } ] }, "type_application": { "type": "PREC_LEFT", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "named_type" }, { "type": "SYMBOL", "name": "type_application" } ] }, { "type": "SYMBOL", "name": "_type_atom" } ] } }, "_type_atom": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "named_type" }, { "type": "SYMBOL", "name": "type_variable" }, { "type": "SYMBOL", "name": "record_type" }, { "type": "SYMBOL", "name": "relation_type" }, { "type": "SYMBOL", "name": "variant_type" }, { "type": "SYMBOL", "name": "type_hole" }, { "type": "SYMBOL", "name": "parenthesized_type" } ] }, "named_type": { "type": "SYMBOL", "name": "upper_identifier" }, "type_variable": { "type": "SYMBOL", "name": "lower_identifier" }, "record_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_field" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type_field" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "lower_identifier" } ] }, { "type": "BLANK" } ] } ] }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "effect" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "effect" } ] } } ] } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "effect": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "lower_identifier" }, { "type": "SYMBOL", "name": "source_ref" } ] }, { "type": "SYMBOL", "name": "lower_identifier" } ] }, "record_type_body": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "type_field" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "type_field" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "type_field": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "lower_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "type", "content": { "type": "SYMBOL", "name": "_type" } } ] }, "relation_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_type" }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" } ] }, "variant_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "<" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "variant_constructor" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "variant_constructor" } ] } } ] }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "STRING", "value": "|" }, { "type": "SYMBOL", "name": "lower_identifier" } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": ">" } ] }, "variant_constructor": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "upper_identifier" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "record_type_body" }, { "type": "BLANK" } ] } ] }, "type_hole": { "type": "STRING", "value": "_" }, "parenthesized_type": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_type" }, { "type": "STRING", "value": ")" } ] }, "_block_body": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_indent" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "SYMBOL", "name": "_dedent" } ] } ] }, "_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "lambda_expression" }, { "type": "SYMBOL", "name": "if_expression" }, { "type": "SYMBOL", "name": "case_expression" }, { "type": "SYMBOL", "name": "do_expression" }, { "type": "SYMBOL", "name": "set_expression" }, { "type": "SYMBOL", "name": "replace_set_expression" }, { "type": "SYMBOL", "name": "yield_expression" }, { "type": "SYMBOL", "name": "atomic_expression" }, { "type": "SYMBOL", "name": "refine_expression" }, { "type": "SYMBOL", "name": "let_in_expression" }, { "type": "SYMBOL", "name": "_binary_expression" } ] }, "lambda_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\\" }, { "type": "REPEAT1", "content": { "type": "SYMBOL", "name": "_pattern_atom" } }, { "type": "STRING", "value": "->" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "if_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "if" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": "then" }, { "type": "FIELD", "name": "then", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": "else" }, { "type": "FIELD", "name": "else", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "case_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "case" }, { "type": "FIELD", "name": "scrutinee", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": "of" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "case_arm" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "case_arm" } ] } } ] }, { "type": "SYMBOL", "name": "_dedent" } ] } }, "case_arm": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "pattern", "content": { "type": "SYMBOL", "name": "_pattern" } }, { "type": "STRING", "value": "->" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "do_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "do" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_statement" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_statement" } ] } } ] }, { "type": "SYMBOL", "name": "_dedent" } ] }, "_statement": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "bind_statement" }, { "type": "SYMBOL", "name": "let_statement" }, { "type": "SYMBOL", "name": "where_statement" }, { "type": "SYMBOL", "name": "_expression" } ] }, "bind_statement": { "type": "PREC_DYNAMIC", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "pattern", "content": { "type": "SYMBOL", "name": "_bind_pattern" } }, { "type": "STRING", "value": "<-" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "_bind_pattern": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "constructor_pattern" }, { "type": "SYMBOL", "name": "variable_pattern" }, { "type": "SYMBOL", "name": "wildcard_pattern" }, { "type": "SYMBOL", "name": "record_pattern" }, { "type": "SYMBOL", "name": "list_pattern" }, { "type": "SYMBOL", "name": "parenthesized_pattern" } ] }, "let_statement": { "type": "SEQ", "members": [ { "type": "STRING", "value": "let" }, { "type": "FIELD", "name": "pattern", "content": { "type": "SYMBOL", "name": "_pattern" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] }, "where_statement": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "where" }, { "type": "FIELD", "name": "condition", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "set_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "set" }, { "type": "FIELD", "name": "target", "content": { "type": "SYMBOL", "name": "source_ref" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "replace_set_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "replace" }, { "type": "STRING", "value": "set" }, { "type": "FIELD", "name": "target", "content": { "type": "SYMBOL", "name": "source_ref" } }, { "type": "STRING", "value": "=" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "yield_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "yield" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "atomic_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "atomic" }, { "type": "FIELD", "name": "body", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "refine_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "refine" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] } }, "let_in_expression": { "type": "PREC_RIGHT", "value": 0, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "let" }, { "type": "SYMBOL", "name": "_pattern" }, { "type": "STRING", "value": "=" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": "in" }, { "type": "SYMBOL", "name": "_expression" } ] } }, "_binary_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "pipe_expression" }, { "type": "SYMBOL", "name": "or_expression" }, { "type": "SYMBOL", "name": "and_expression" }, { "type": "SYMBOL", "name": "equality_expression" }, { "type": "SYMBOL", "name": "comparison_expression" }, { "type": "SYMBOL", "name": "concat_expression" }, { "type": "SYMBOL", "name": "add_expression" }, { "type": "SYMBOL", "name": "mul_expression" }, { "type": "SYMBOL", "name": "_unary_expression" } ] }, "pipe_expression": { "type": "PREC_LEFT", "value": 1, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_binary_expression" }, { "type": "STRING", "value": "|>" }, { "type": "SYMBOL", "name": "_binary_expression" } ] } }, "or_expression": { "type": "PREC_LEFT", "value": 3, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_binary_expression" }, { "type": "STRING", "value": "||" }, { "type": "SYMBOL", "name": "_binary_expression" } ] } }, "and_expression": { "type": "PREC_LEFT", "value": 5, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_binary_expression" }, { "type": "STRING", "value": "&&" }, { "type": "SYMBOL", "name": "_binary_expression" } ] } }, "equality_expression": { "type": "PREC_LEFT", "value": 7, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_binary_expression" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "==" }, { "type": "STRING", "value": "!=" } ] }, { "type": "SYMBOL", "name": "_binary_expression" } ] } }, "comparison_expression": { "type": "PREC_LEFT", "value": 9, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_binary_expression" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "<" }, { "type": "STRING", "value": ">" }, { "type": "STRING", "value": "<=" }, { "type": "STRING", "value": ">=" } ] }, { "type": "SYMBOL", "name": "_binary_expression" } ] } }, "concat_expression": { "type": "PREC_RIGHT", "value": 11, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_binary_expression" }, { "type": "STRING", "value": "++" }, { "type": "SYMBOL", "name": "_binary_expression" } ] } }, "add_expression": { "type": "PREC_LEFT", "value": 13, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_binary_expression" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "+" }, { "type": "STRING", "value": "-" } ] }, { "type": "SYMBOL", "name": "_binary_expression" } ] } }, "mul_expression": { "type": "PREC_LEFT", "value": 15, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_binary_expression" }, { "type": "CHOICE", "members": [ { "type": "STRING", "value": "*" }, { "type": "STRING", "value": "/" } ] }, { "type": "SYMBOL", "name": "_binary_expression" } ] } }, "_unary_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "negation_expression" }, { "type": "SYMBOL", "name": "not_expression" }, { "type": "SYMBOL", "name": "_application_expression" } ] }, "negation_expression": { "type": "PREC", "value": 17, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "-" }, { "type": "SYMBOL", "name": "_application_expression" } ] } }, "not_expression": { "type": "PREC", "value": 17, "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "not" }, { "type": "SYMBOL", "name": "_application_expression" } ] } }, "_application_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "application_expression" }, { "type": "SYMBOL", "name": "_postfix_expression" } ] }, "application_expression": { "type": "PREC_LEFT", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_application_expression" }, { "type": "SYMBOL", "name": "_postfix_expression" } ] } }, "_postfix_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "field_access_expression" }, { "type": "SYMBOL", "name": "temporal_expression" }, { "type": "SYMBOL", "name": "_atom_expression" } ] }, "field_access_expression": { "type": "PREC_LEFT", "value": 19, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_postfix_expression" }, { "type": "STRING", "value": "." }, { "type": "SYMBOL", "name": "lower_identifier" } ] } }, "temporal_expression": { "type": "PREC_LEFT", "value": 19, "content": { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_postfix_expression" }, { "type": "STRING", "value": "@" }, { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": ")" } ] } }, "_atom_expression": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "_literal" }, { "type": "SYMBOL", "name": "variable_expression" }, { "type": "SYMBOL", "name": "constructor_expression" }, { "type": "SYMBOL", "name": "source_ref" }, { "type": "SYMBOL", "name": "derived_ref" }, { "type": "SYMBOL", "name": "record_expression" }, { "type": "SYMBOL", "name": "record_update_expression" }, { "type": "SYMBOL", "name": "list_expression" }, { "type": "SYMBOL", "name": "parenthesized_expression" } ] }, "variable_expression": { "type": "SYMBOL", "name": "lower_identifier" }, "constructor_expression": { "type": "SYMBOL", "name": "upper_identifier" }, "source_ref": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "*" }, { "type": "PATTERN", "value": "[a-z_][a-zA-Z0-9_']*" } ] } }, "derived_ref": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "&" }, { "type": "PATTERN", "value": "[a-z_][a-zA-Z0-9_']*" } ] } }, "record_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "record_field" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "record_field" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "record_field": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "lower_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] }, "record_update_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "FIELD", "name": "base", "content": { "type": "SYMBOL", "name": "_expression" } }, { "type": "STRING", "value": "|" }, { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "update_field" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "update_field" } ] } } ] }, { "type": "STRING", "value": "}" } ] }, "update_field": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "lower_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "value", "content": { "type": "SYMBOL", "name": "_expression" } } ] }, "list_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_expression" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_expression" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" } ] }, "parenthesized_expression": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_expression" }, { "type": "STRING", "value": ")" } ] }, "_pattern": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "constructor_pattern" }, { "type": "SYMBOL", "name": "_pattern_atom" } ] }, "constructor_pattern": { "type": "PREC", "value": 18, "content": { "type": "SEQ", "members": [ { "type": "FIELD", "name": "constructor", "content": { "type": "SYMBOL", "name": "upper_identifier" } }, { "type": "FIELD", "name": "payload", "content": { "type": "SYMBOL", "name": "_pattern_atom" } } ] } }, "_pattern_atom": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "variable_pattern" }, { "type": "SYMBOL", "name": "wildcard_pattern" }, { "type": "SYMBOL", "name": "literal_pattern" }, { "type": "SYMBOL", "name": "record_pattern" }, { "type": "SYMBOL", "name": "list_pattern" }, { "type": "SYMBOL", "name": "parenthesized_pattern" } ] }, "variable_pattern": { "type": "SYMBOL", "name": "lower_identifier" }, "wildcard_pattern": { "type": "STRING", "value": "_" }, "literal_pattern": { "type": "SYMBOL", "name": "_literal" }, "record_pattern": { "type": "SEQ", "members": [ { "type": "STRING", "value": "{" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "field_pattern" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "field_pattern" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "}" } ] }, "field_pattern": { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "FIELD", "name": "name", "content": { "type": "SYMBOL", "name": "lower_identifier" } }, { "type": "STRING", "value": ":" }, { "type": "FIELD", "name": "pattern", "content": { "type": "SYMBOL", "name": "_pattern" } } ] }, { "type": "SYMBOL", "name": "lower_identifier" } ] }, "list_pattern": { "type": "SEQ", "members": [ { "type": "STRING", "value": "[" }, { "type": "CHOICE", "members": [ { "type": "SEQ", "members": [ { "type": "SYMBOL", "name": "_pattern" }, { "type": "REPEAT", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "," }, { "type": "SYMBOL", "name": "_pattern" } ] } } ] }, { "type": "BLANK" } ] }, { "type": "STRING", "value": "]" } ] }, "parenthesized_pattern": { "type": "SEQ", "members": [ { "type": "STRING", "value": "(" }, { "type": "SYMBOL", "name": "_pattern" }, { "type": "STRING", "value": ")" } ] }, "_literal": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "integer_literal" }, { "type": "SYMBOL", "name": "float_literal" }, { "type": "SYMBOL", "name": "string_literal" }, { "type": "SYMBOL", "name": "boolean_literal" }, { "type": "SYMBOL", "name": "bytes_literal" } ] }, "integer_literal": { "type": "PATTERN", "value": "[0-9][0-9_]*" }, "float_literal": { "type": "PATTERN", "value": "[0-9][0-9_]*\\.[0-9][0-9_]*" }, "string_literal": { "type": "SEQ", "members": [ { "type": "STRING", "value": "\"" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "escape_sequence" }, { "type": "SYMBOL", "name": "string_content" } ] } }, { "type": "STRING", "value": "\"" } ] }, "boolean_literal": { "type": "CHOICE", "members": [ { "type": "STRING", "value": "true" }, { "type": "STRING", "value": "false" } ] }, "bytes_literal": { "type": "SEQ", "members": [ { "type": "STRING", "value": "b\"" }, { "type": "REPEAT", "content": { "type": "CHOICE", "members": [ { "type": "SYMBOL", "name": "escape_sequence" }, { "type": "SYMBOL", "name": "string_content" } ] } }, { "type": "STRING", "value": "\"" } ] }, "escape_sequence": { "type": "IMMEDIATE_TOKEN", "content": { "type": "PREC", "value": 1, "content": { "type": "PATTERN", "value": "\\\\([\\\\\\\"ntr]|x[0-9a-fA-F]{2})" } } }, "string_content": { "type": "IMMEDIATE_TOKEN", "content": { "type": "PREC", "value": 0, "content": { "type": "PATTERN", "value": "[^\"\\\\]+" } } }, "lower_identifier": { "type": "PATTERN", "value": "[a-z_][a-zA-Z0-9_']*" }, "upper_identifier": { "type": "PATTERN", "value": "[A-Z][a-zA-Z0-9_']*" }, "comment": { "type": "TOKEN", "content": { "type": "SEQ", "members": [ { "type": "STRING", "value": "--" }, { "type": "PATTERN", "value": ".*" } ] } } }, "extras": [ { "type": "PATTERN", "value": "[ \\t\\r]" }, { "type": "SYMBOL", "name": "comment" }, { "type": "SYMBOL", "name": "_line_cont" } ], "conflicts": [ [ "constraint", "named_type" ], [ "variable_pattern", "variable_expression" ], [ "record_pattern", "record_expression" ], [ "list_pattern", "list_expression" ], [ "literal_pattern", "_atom_expression" ], [ "field_pattern", "variable_expression" ], [ "_trait_param", "type_variable" ], [ "trait_method", "trait_default_body" ] ], "precedences": [], "externals": [ { "type": "SYMBOL", "name": "_newline" }, { "type": "SYMBOL", "name": "_indent" }, { "type": "SYMBOL", "name": "_dedent" }, { "type": "SYMBOL", "name": "_line_cont" } ], "inline": [], "supertypes": [], "reserved": {} }