[
  {
    "type": "alt",
    "named": true,
    "fields": {
      "exp": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "::",
            "named": false
          },
          {
            "type": "captured_type_operator",
            "named": true
          },
          {
            "type": "exp_ado",
            "named": true
          },
          {
            "type": "exp_apply",
            "named": true
          },
          {
            "type": "exp_array",
            "named": true
          },
          {
            "type": "exp_case",
            "named": true
          },
          {
            "type": "exp_do",
            "named": true
          },
          {
            "type": "exp_if",
            "named": true
          },
          {
            "type": "exp_infix",
            "named": true
          },
          {
            "type": "exp_lambda",
            "named": true
          },
          {
            "type": "exp_let_in",
            "named": true
          },
          {
            "type": "exp_literal",
            "named": true
          },
          {
            "type": "exp_name",
            "named": true
          },
          {
            "type": "exp_negation",
            "named": true
          },
          {
            "type": "exp_parens",
            "named": true
          },
          {
            "type": "exp_record_access",
            "named": true
          },
          {
            "type": "exp_section_left",
            "named": true
          },
          {
            "type": "exp_section_right",
            "named": true
          },
          {
            "type": "exp_type_application",
            "named": true
          },
          {
            "type": "forall",
            "named": true
          },
          {
            "type": "hole",
            "named": true
          },
          {
            "type": "record_accessor",
            "named": true
          },
          {
            "type": "record_literal",
            "named": true
          },
          {
            "type": "record_type_literal",
            "named": true
          },
          {
            "type": "record_update",
            "named": true
          },
          {
            "type": "row_type",
            "named": true
          },
          {
            "type": "type_apply",
            "named": true
          },
          {
            "type": "type_infix",
            "named": true
          },
          {
            "type": "type_literal",
            "named": true
          },
          {
            "type": "type_name",
            "named": true
          },
          {
            "type": "type_parens",
            "named": true
          },
          {
            "type": "type_wildcard",
            "named": true
          },
          {
            "type": "∷",
            "named": false
          }
        ]
      },
      "pat": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "pat_apply",
            "named": true
          },
          {
            "type": "pat_array",
            "named": true
          },
          {
            "type": "pat_as",
            "named": true
          },
          {
            "type": "pat_infix",
            "named": true
          },
          {
            "type": "pat_literal",
            "named": true
          },
          {
            "type": "pat_name",
            "named": true
          },
          {
            "type": "pat_negation",
            "named": true
          },
          {
            "type": "pat_parens",
            "named": true
          },
          {
            "type": "pat_record",
            "named": true
          },
          {
            "type": "pat_wildcard",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "declarations",
          "named": true
        },
        {
          "type": "gdpat",
          "named": true
        },
        {
          "type": "where",
          "named": true
        }
      ]
    }
  },
  {
    "type": "alts",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "alt",
          "named": true
        }
      ]
    }
  },
  {
    "type": "annotated_type_variable",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "bind_pattern",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "pat_apply",
          "named": true
        },
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_infix",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_negation",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_typed",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "captured_type_operator",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "qualified_operator",
          "named": true
        }
      ]
    }
  },
  {
    "type": "class_body",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "function",
          "named": true
        },
        {
          "type": "operator_declaration",
          "named": true
        },
        {
          "type": "signature",
          "named": true
        },
        {
          "type": "where",
          "named": true
        }
      ]
    }
  },
  {
    "type": "class_declaration",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "class_body",
          "named": true
        },
        {
          "type": "class_head",
          "named": true
        },
        {
          "type": "kind_declaration",
          "named": true
        }
      ]
    }
  },
  {
    "type": "class_head",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "annotated_type_variable",
          "named": true
        },
        {
          "type": "class_name",
          "named": true
        },
        {
          "type": "constraints",
          "named": true
        },
        {
          "type": "fundeps",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "class_import",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "type_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "class_instance",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "function",
          "named": true
        },
        {
          "type": "instance_head",
          "named": true
        },
        {
          "type": "instance_name",
          "named": true
        },
        {
          "type": "signature",
          "named": true
        },
        {
          "type": "where",
          "named": true
        }
      ]
    }
  },
  {
    "type": "class_name",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "qualified_type",
          "named": true
        },
        {
          "type": "type",
          "named": true
        }
      ]
    }
  },
  {
    "type": "constraint",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "class_name",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "constraints",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "constraint",
          "named": true
        }
      ]
    }
  },
  {
    "type": "constructor",
    "named": true,
    "fields": {}
  },
  {
    "type": "data",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "type",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "annotated_type_variable",
          "named": true
        },
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "constructor",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_signature",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "declarations",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "function",
          "named": true
        },
        {
          "type": "operator_declaration",
          "named": true
        },
        {
          "type": "signature",
          "named": true
        }
      ]
    }
  },
  {
    "type": "derive_declaration",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "constraints",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "instance_name",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "equation",
    "named": true,
    "fields": {
      "lhs": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "pat_apply",
            "named": true
          },
          {
            "type": "pat_array",
            "named": true
          },
          {
            "type": "pat_as",
            "named": true
          },
          {
            "type": "pat_infix",
            "named": true
          },
          {
            "type": "pat_literal",
            "named": true
          },
          {
            "type": "pat_name",
            "named": true
          },
          {
            "type": "pat_negation",
            "named": true
          },
          {
            "type": "pat_parens",
            "named": true
          },
          {
            "type": "pat_record",
            "named": true
          },
          {
            "type": "pat_wildcard",
            "named": true
          }
        ]
      },
      "rhs": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "::",
            "named": false
          },
          {
            "type": "captured_type_operator",
            "named": true
          },
          {
            "type": "exp_ado",
            "named": true
          },
          {
            "type": "exp_apply",
            "named": true
          },
          {
            "type": "exp_array",
            "named": true
          },
          {
            "type": "exp_case",
            "named": true
          },
          {
            "type": "exp_do",
            "named": true
          },
          {
            "type": "exp_if",
            "named": true
          },
          {
            "type": "exp_infix",
            "named": true
          },
          {
            "type": "exp_lambda",
            "named": true
          },
          {
            "type": "exp_let_in",
            "named": true
          },
          {
            "type": "exp_literal",
            "named": true
          },
          {
            "type": "exp_name",
            "named": true
          },
          {
            "type": "exp_negation",
            "named": true
          },
          {
            "type": "exp_parens",
            "named": true
          },
          {
            "type": "exp_record_access",
            "named": true
          },
          {
            "type": "exp_section_left",
            "named": true
          },
          {
            "type": "exp_section_right",
            "named": true
          },
          {
            "type": "exp_type_application",
            "named": true
          },
          {
            "type": "forall",
            "named": true
          },
          {
            "type": "hole",
            "named": true
          },
          {
            "type": "pat_apply",
            "named": true
          },
          {
            "type": "pat_array",
            "named": true
          },
          {
            "type": "pat_as",
            "named": true
          },
          {
            "type": "pat_infix",
            "named": true
          },
          {
            "type": "pat_literal",
            "named": true
          },
          {
            "type": "pat_name",
            "named": true
          },
          {
            "type": "pat_negation",
            "named": true
          },
          {
            "type": "pat_parens",
            "named": true
          },
          {
            "type": "pat_record",
            "named": true
          },
          {
            "type": "pat_wildcard",
            "named": true
          },
          {
            "type": "record_accessor",
            "named": true
          },
          {
            "type": "record_literal",
            "named": true
          },
          {
            "type": "record_type_literal",
            "named": true
          },
          {
            "type": "record_update",
            "named": true
          },
          {
            "type": "row_type",
            "named": true
          },
          {
            "type": "type_apply",
            "named": true
          },
          {
            "type": "type_infix",
            "named": true
          },
          {
            "type": "type_literal",
            "named": true
          },
          {
            "type": "type_name",
            "named": true
          },
          {
            "type": "type_parens",
            "named": true
          },
          {
            "type": "type_wildcard",
            "named": true
          },
          {
            "type": "∷",
            "named": false
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "declarations",
          "named": true
        },
        {
          "type": "guard_equation",
          "named": true
        },
        {
          "type": "pat_apply",
          "named": true
        },
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_infix",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_negation",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        },
        {
          "type": "where",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_ado",
    "named": true,
    "fields": {
      "in": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "::",
            "named": false
          },
          {
            "type": ";",
            "named": false
          },
          {
            "type": "captured_type_operator",
            "named": true
          },
          {
            "type": "exp_ado",
            "named": true
          },
          {
            "type": "exp_apply",
            "named": true
          },
          {
            "type": "exp_array",
            "named": true
          },
          {
            "type": "exp_case",
            "named": true
          },
          {
            "type": "exp_do",
            "named": true
          },
          {
            "type": "exp_if",
            "named": true
          },
          {
            "type": "exp_infix",
            "named": true
          },
          {
            "type": "exp_lambda",
            "named": true
          },
          {
            "type": "exp_let_in",
            "named": true
          },
          {
            "type": "exp_literal",
            "named": true
          },
          {
            "type": "exp_name",
            "named": true
          },
          {
            "type": "exp_negation",
            "named": true
          },
          {
            "type": "exp_parens",
            "named": true
          },
          {
            "type": "exp_record_access",
            "named": true
          },
          {
            "type": "exp_section_left",
            "named": true
          },
          {
            "type": "exp_section_right",
            "named": true
          },
          {
            "type": "exp_type_application",
            "named": true
          },
          {
            "type": "forall",
            "named": true
          },
          {
            "type": "hole",
            "named": true
          },
          {
            "type": "record_accessor",
            "named": true
          },
          {
            "type": "record_literal",
            "named": true
          },
          {
            "type": "record_type_literal",
            "named": true
          },
          {
            "type": "record_update",
            "named": true
          },
          {
            "type": "row_type",
            "named": true
          },
          {
            "type": "type_apply",
            "named": true
          },
          {
            "type": "type_infix",
            "named": true
          },
          {
            "type": "type_literal",
            "named": true
          },
          {
            "type": "type_name",
            "named": true
          },
          {
            "type": "type_parens",
            "named": true
          },
          {
            "type": "type_wildcard",
            "named": true
          },
          {
            "type": "∷",
            "named": false
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "module",
          "named": true
        },
        {
          "type": "statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_apply",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_array",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_case",
    "named": true,
    "fields": {
      "condition": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "::",
            "named": false
          },
          {
            "type": "captured_type_operator",
            "named": true
          },
          {
            "type": "exp_ado",
            "named": true
          },
          {
            "type": "exp_apply",
            "named": true
          },
          {
            "type": "exp_array",
            "named": true
          },
          {
            "type": "exp_case",
            "named": true
          },
          {
            "type": "exp_do",
            "named": true
          },
          {
            "type": "exp_if",
            "named": true
          },
          {
            "type": "exp_infix",
            "named": true
          },
          {
            "type": "exp_lambda",
            "named": true
          },
          {
            "type": "exp_let_in",
            "named": true
          },
          {
            "type": "exp_literal",
            "named": true
          },
          {
            "type": "exp_name",
            "named": true
          },
          {
            "type": "exp_negation",
            "named": true
          },
          {
            "type": "exp_parens",
            "named": true
          },
          {
            "type": "exp_record_access",
            "named": true
          },
          {
            "type": "exp_section_left",
            "named": true
          },
          {
            "type": "exp_section_right",
            "named": true
          },
          {
            "type": "exp_type_application",
            "named": true
          },
          {
            "type": "forall",
            "named": true
          },
          {
            "type": "hole",
            "named": true
          },
          {
            "type": "record_accessor",
            "named": true
          },
          {
            "type": "record_literal",
            "named": true
          },
          {
            "type": "record_type_literal",
            "named": true
          },
          {
            "type": "record_update",
            "named": true
          },
          {
            "type": "row_type",
            "named": true
          },
          {
            "type": "type_apply",
            "named": true
          },
          {
            "type": "type_infix",
            "named": true
          },
          {
            "type": "type_literal",
            "named": true
          },
          {
            "type": "type_name",
            "named": true
          },
          {
            "type": "type_parens",
            "named": true
          },
          {
            "type": "type_wildcard",
            "named": true
          },
          {
            "type": "wildcard",
            "named": true
          },
          {
            "type": "∷",
            "named": false
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "alts",
          "named": true
        },
        {
          "type": "comma",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_do",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "module",
          "named": true
        },
        {
          "type": "statement",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_if",
    "named": true,
    "fields": {
      "else": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "::",
            "named": false
          },
          {
            "type": "captured_type_operator",
            "named": true
          },
          {
            "type": "exp_ado",
            "named": true
          },
          {
            "type": "exp_apply",
            "named": true
          },
          {
            "type": "exp_array",
            "named": true
          },
          {
            "type": "exp_case",
            "named": true
          },
          {
            "type": "exp_do",
            "named": true
          },
          {
            "type": "exp_if",
            "named": true
          },
          {
            "type": "exp_infix",
            "named": true
          },
          {
            "type": "exp_lambda",
            "named": true
          },
          {
            "type": "exp_let_in",
            "named": true
          },
          {
            "type": "exp_literal",
            "named": true
          },
          {
            "type": "exp_name",
            "named": true
          },
          {
            "type": "exp_negation",
            "named": true
          },
          {
            "type": "exp_parens",
            "named": true
          },
          {
            "type": "exp_record_access",
            "named": true
          },
          {
            "type": "exp_section_left",
            "named": true
          },
          {
            "type": "exp_section_right",
            "named": true
          },
          {
            "type": "exp_type_application",
            "named": true
          },
          {
            "type": "forall",
            "named": true
          },
          {
            "type": "hole",
            "named": true
          },
          {
            "type": "record_accessor",
            "named": true
          },
          {
            "type": "record_literal",
            "named": true
          },
          {
            "type": "record_type_literal",
            "named": true
          },
          {
            "type": "record_update",
            "named": true
          },
          {
            "type": "row_type",
            "named": true
          },
          {
            "type": "type_apply",
            "named": true
          },
          {
            "type": "type_infix",
            "named": true
          },
          {
            "type": "type_literal",
            "named": true
          },
          {
            "type": "type_name",
            "named": true
          },
          {
            "type": "type_parens",
            "named": true
          },
          {
            "type": "type_wildcard",
            "named": true
          },
          {
            "type": "wildcard",
            "named": true
          },
          {
            "type": "∷",
            "named": false
          }
        ]
      },
      "if": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "::",
            "named": false
          },
          {
            "type": "captured_type_operator",
            "named": true
          },
          {
            "type": "exp_ado",
            "named": true
          },
          {
            "type": "exp_apply",
            "named": true
          },
          {
            "type": "exp_array",
            "named": true
          },
          {
            "type": "exp_case",
            "named": true
          },
          {
            "type": "exp_do",
            "named": true
          },
          {
            "type": "exp_if",
            "named": true
          },
          {
            "type": "exp_infix",
            "named": true
          },
          {
            "type": "exp_lambda",
            "named": true
          },
          {
            "type": "exp_let_in",
            "named": true
          },
          {
            "type": "exp_literal",
            "named": true
          },
          {
            "type": "exp_name",
            "named": true
          },
          {
            "type": "exp_negation",
            "named": true
          },
          {
            "type": "exp_parens",
            "named": true
          },
          {
            "type": "exp_record_access",
            "named": true
          },
          {
            "type": "exp_section_left",
            "named": true
          },
          {
            "type": "exp_section_right",
            "named": true
          },
          {
            "type": "exp_type_application",
            "named": true
          },
          {
            "type": "forall",
            "named": true
          },
          {
            "type": "hole",
            "named": true
          },
          {
            "type": "record_accessor",
            "named": true
          },
          {
            "type": "record_literal",
            "named": true
          },
          {
            "type": "record_type_literal",
            "named": true
          },
          {
            "type": "record_update",
            "named": true
          },
          {
            "type": "row_type",
            "named": true
          },
          {
            "type": "type_apply",
            "named": true
          },
          {
            "type": "type_infix",
            "named": true
          },
          {
            "type": "type_literal",
            "named": true
          },
          {
            "type": "type_name",
            "named": true
          },
          {
            "type": "type_parens",
            "named": true
          },
          {
            "type": "type_wildcard",
            "named": true
          },
          {
            "type": "wildcard",
            "named": true
          },
          {
            "type": "∷",
            "named": false
          }
        ]
      },
      "then": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "::",
            "named": false
          },
          {
            "type": "captured_type_operator",
            "named": true
          },
          {
            "type": "exp_ado",
            "named": true
          },
          {
            "type": "exp_apply",
            "named": true
          },
          {
            "type": "exp_array",
            "named": true
          },
          {
            "type": "exp_case",
            "named": true
          },
          {
            "type": "exp_do",
            "named": true
          },
          {
            "type": "exp_if",
            "named": true
          },
          {
            "type": "exp_infix",
            "named": true
          },
          {
            "type": "exp_lambda",
            "named": true
          },
          {
            "type": "exp_let_in",
            "named": true
          },
          {
            "type": "exp_literal",
            "named": true
          },
          {
            "type": "exp_name",
            "named": true
          },
          {
            "type": "exp_negation",
            "named": true
          },
          {
            "type": "exp_parens",
            "named": true
          },
          {
            "type": "exp_record_access",
            "named": true
          },
          {
            "type": "exp_section_left",
            "named": true
          },
          {
            "type": "exp_section_right",
            "named": true
          },
          {
            "type": "exp_type_application",
            "named": true
          },
          {
            "type": "forall",
            "named": true
          },
          {
            "type": "hole",
            "named": true
          },
          {
            "type": "record_accessor",
            "named": true
          },
          {
            "type": "record_literal",
            "named": true
          },
          {
            "type": "record_type_literal",
            "named": true
          },
          {
            "type": "record_update",
            "named": true
          },
          {
            "type": "row_type",
            "named": true
          },
          {
            "type": "type_apply",
            "named": true
          },
          {
            "type": "type_infix",
            "named": true
          },
          {
            "type": "type_literal",
            "named": true
          },
          {
            "type": "type_name",
            "named": true
          },
          {
            "type": "type_parens",
            "named": true
          },
          {
            "type": "type_wildcard",
            "named": true
          },
          {
            "type": "wildcard",
            "named": true
          },
          {
            "type": "∷",
            "named": false
          }
        ]
      }
    }
  },
  {
    "type": "exp_infix",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_ticked",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "qualified_operator",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_lambda",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_let_in",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "declarations",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_literal",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "char",
          "named": true
        },
        {
          "type": "integer",
          "named": true
        },
        {
          "type": "number",
          "named": true
        },
        {
          "type": "string",
          "named": true
        },
        {
          "type": "triple_quote_string",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_name",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "constructor",
          "named": true
        },
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "qualified_constructor",
          "named": true
        },
        {
          "type": "qualified_operator",
          "named": true
        },
        {
          "type": "qualified_variable",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_negation",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_parens",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_record_access",
    "named": true,
    "fields": {
      "field": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "string",
            "named": true
          },
          {
            "type": "triple_quote_string",
            "named": true
          },
          {
            "type": "variable",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "qualified_variable",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_section_left",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_ticked",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "qualified_operator",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_section_right",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_ticked",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "qualified_operator",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_ticked",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exp_type_application",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "export",
    "named": true,
    "fields": {
      "module": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "qualified_module",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "class_name",
          "named": true
        },
        {
          "type": "export_names",
          "named": true
        },
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "qualified_operator",
          "named": true
        },
        {
          "type": "qualified_type",
          "named": true
        },
        {
          "type": "qualified_type_operator",
          "named": true
        },
        {
          "type": "qualified_variable",
          "named": true
        },
        {
          "type": "type",
          "named": true
        },
        {
          "type": "type_operator",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "export_names",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "all_names",
          "named": true
        },
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "constructor",
          "named": true
        },
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "exports",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "export",
          "named": true
        }
      ]
    }
  },
  {
    "type": "field_name",
    "named": true,
    "fields": {}
  },
  {
    "type": "field_pun",
    "named": true,
    "fields": {}
  },
  {
    "type": "field_value",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "field_wildcard",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "forall",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "annotated_type_variable",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "foreign_import",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "(",
            "named": false
          },
          {
            "type": ")",
            "named": false
          },
          {
            "type": "operator",
            "named": true
          },
          {
            "type": "variable",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "function",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "(",
            "named": false
          },
          {
            "type": ")",
            "named": false
          },
          {
            "type": "operator",
            "named": true
          },
          {
            "type": "variable",
            "named": true
          }
        ]
      },
      "pattern": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "pat_apply",
            "named": true
          },
          {
            "type": "pat_array",
            "named": true
          },
          {
            "type": "pat_as",
            "named": true
          },
          {
            "type": "pat_infix",
            "named": true
          },
          {
            "type": "pat_literal",
            "named": true
          },
          {
            "type": "pat_name",
            "named": true
          },
          {
            "type": "pat_negation",
            "named": true
          },
          {
            "type": "pat_parens",
            "named": true
          },
          {
            "type": "pat_record",
            "named": true
          },
          {
            "type": "pat_typed",
            "named": true
          },
          {
            "type": "pat_wildcard",
            "named": true
          }
        ]
      },
      "patterns": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "patterns",
            "named": true
          }
        ]
      },
      "rhs": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "::",
            "named": false
          },
          {
            "type": "captured_type_operator",
            "named": true
          },
          {
            "type": "exp_ado",
            "named": true
          },
          {
            "type": "exp_apply",
            "named": true
          },
          {
            "type": "exp_array",
            "named": true
          },
          {
            "type": "exp_case",
            "named": true
          },
          {
            "type": "exp_do",
            "named": true
          },
          {
            "type": "exp_if",
            "named": true
          },
          {
            "type": "exp_infix",
            "named": true
          },
          {
            "type": "exp_lambda",
            "named": true
          },
          {
            "type": "exp_let_in",
            "named": true
          },
          {
            "type": "exp_literal",
            "named": true
          },
          {
            "type": "exp_name",
            "named": true
          },
          {
            "type": "exp_negation",
            "named": true
          },
          {
            "type": "exp_parens",
            "named": true
          },
          {
            "type": "exp_record_access",
            "named": true
          },
          {
            "type": "exp_section_left",
            "named": true
          },
          {
            "type": "exp_section_right",
            "named": true
          },
          {
            "type": "exp_type_application",
            "named": true
          },
          {
            "type": "forall",
            "named": true
          },
          {
            "type": "hole",
            "named": true
          },
          {
            "type": "record_accessor",
            "named": true
          },
          {
            "type": "record_literal",
            "named": true
          },
          {
            "type": "record_type_literal",
            "named": true
          },
          {
            "type": "record_update",
            "named": true
          },
          {
            "type": "row_type",
            "named": true
          },
          {
            "type": "type_apply",
            "named": true
          },
          {
            "type": "type_infix",
            "named": true
          },
          {
            "type": "type_literal",
            "named": true
          },
          {
            "type": "type_name",
            "named": true
          },
          {
            "type": "type_parens",
            "named": true
          },
          {
            "type": "type_wildcard",
            "named": true
          },
          {
            "type": "∷",
            "named": false
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "declarations",
          "named": true
        },
        {
          "type": "guard_equation",
          "named": true
        },
        {
          "type": "where",
          "named": true
        }
      ]
    }
  },
  {
    "type": "fundep",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "type_variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "fundeps",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "fundep",
          "named": true
        }
      ]
    }
  },
  {
    "type": "gdpat",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "guards",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "guard",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "pattern_guard",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        }
      ]
    }
  },
  {
    "type": "guard_equation",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "guards",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "guards",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "guard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "import",
    "named": true,
    "fields": {
      "import_rename": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "as",
            "named": false
          },
          {
            "type": "module",
            "named": true
          }
        ]
      },
      "imports": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "import_list",
            "named": true
          }
        ]
      },
      "module": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "qualified_module",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "import_con_names",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "all_names",
          "named": true
        },
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "constructor",
          "named": true
        },
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "import_item",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "class_import",
          "named": true
        },
        {
          "type": "type_import",
          "named": true
        },
        {
          "type": "type_operator_import",
          "named": true
        },
        {
          "type": "var_import",
          "named": true
        }
      ]
    }
  },
  {
    "type": "import_list",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "import_item",
          "named": true
        }
      ]
    }
  },
  {
    "type": "instance_head",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "class_name",
          "named": true
        },
        {
          "type": "constraints",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "integer",
    "named": true,
    "fields": {}
  },
  {
    "type": "kind_declaration",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "type",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "annotated_type_variable",
          "named": true
        },
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "class_name",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "kind_signature",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "kind_signature",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "kind_value_declaration",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "type",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "annotated_type_variable",
          "named": true
        },
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "let",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "declarations",
          "named": true
        }
      ]
    }
  },
  {
    "type": "module",
    "named": true,
    "fields": {}
  },
  {
    "type": "newtype",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "type",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "annotated_type_variable",
          "named": true
        },
        {
          "type": "newtype_constructor",
          "named": true
        },
        {
          "type": "type_signature",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "newtype_constructor",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "constructor",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "operator",
    "named": true,
    "fields": {}
  },
  {
    "type": "operator_declaration",
    "named": true,
    "fields": {
      "precedence": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "integer",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "qualified_type",
          "named": true
        },
        {
          "type": "qualified_variable",
          "named": true
        },
        {
          "type": "type",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_apply",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_array",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "pat_apply",
          "named": true
        },
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_infix",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_negation",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_typed",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_as",
    "named": true,
    "fields": {
      "pat": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "pat_array",
            "named": true
          },
          {
            "type": "pat_as",
            "named": true
          },
          {
            "type": "pat_literal",
            "named": true
          },
          {
            "type": "pat_name",
            "named": true
          },
          {
            "type": "pat_parens",
            "named": true
          },
          {
            "type": "pat_record",
            "named": true
          },
          {
            "type": "pat_wildcard",
            "named": true
          }
        ]
      },
      "var": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "variable",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "pat_field",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "field_name",
          "named": true
        },
        {
          "type": "pat_apply",
          "named": true
        },
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_infix",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_negation",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_typed",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_fields",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "pat_field",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_infix",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "pat_apply",
          "named": true
        },
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_infix",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_negation",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        },
        {
          "type": "qualified_operator",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_literal",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "char",
          "named": true
        },
        {
          "type": "integer",
          "named": true
        },
        {
          "type": "number",
          "named": true
        },
        {
          "type": "string",
          "named": true
        },
        {
          "type": "triple_quote_string",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_name",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "constructor",
          "named": true
        },
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "qualified_constructor",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_negation",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_parens",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "pat_apply",
          "named": true
        },
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_infix",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_negation",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_typed",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_record",
    "named": true,
    "fields": {
      "fields": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "pat_fields",
            "named": true
          }
        ]
      }
    }
  },
  {
    "type": "pat_typed",
    "named": true,
    "fields": {
      "pattern": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "pat_apply",
            "named": true
          },
          {
            "type": "pat_array",
            "named": true
          },
          {
            "type": "pat_as",
            "named": true
          },
          {
            "type": "pat_infix",
            "named": true
          },
          {
            "type": "pat_literal",
            "named": true
          },
          {
            "type": "pat_name",
            "named": true
          },
          {
            "type": "pat_negation",
            "named": true
          },
          {
            "type": "pat_parens",
            "named": true
          },
          {
            "type": "pat_record",
            "named": true
          },
          {
            "type": "pat_wildcard",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pat_wildcard",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "pat_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pattern_guard",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "pat_apply",
          "named": true
        },
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_infix",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_negation",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pattern_synonym",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "equation",
          "named": true
        },
        {
          "type": "signature",
          "named": true
        }
      ]
    }
  },
  {
    "type": "patterns",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "pat_array",
          "named": true
        },
        {
          "type": "pat_as",
          "named": true
        },
        {
          "type": "pat_literal",
          "named": true
        },
        {
          "type": "pat_name",
          "named": true
        },
        {
          "type": "pat_parens",
          "named": true
        },
        {
          "type": "pat_record",
          "named": true
        },
        {
          "type": "pat_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "purescript",
    "named": true,
    "root": true,
    "fields": {
      "exports": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "exports",
            "named": true
          }
        ]
      },
      "name": {
        "multiple": false,
        "required": false,
        "types": [
          {
            "type": "qualified_module",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "class_declaration",
          "named": true
        },
        {
          "type": "class_instance",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "derive_declaration",
          "named": true
        },
        {
          "type": "empty_file",
          "named": true
        },
        {
          "type": "foreign_import",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "kind_declaration",
          "named": true
        },
        {
          "type": "kind_value_declaration",
          "named": true
        },
        {
          "type": "newtype",
          "named": true
        },
        {
          "type": "operator_declaration",
          "named": true
        },
        {
          "type": "pattern_synonym",
          "named": true
        },
        {
          "type": "signature",
          "named": true
        },
        {
          "type": "type_alias",
          "named": true
        },
        {
          "type": "type_role_declaration",
          "named": true
        },
        {
          "type": "where",
          "named": true
        }
      ]
    }
  },
  {
    "type": "qualified_constructor",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "constructor",
          "named": true
        },
        {
          "type": "module",
          "named": true
        }
      ]
    }
  },
  {
    "type": "qualified_module",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "module",
          "named": true
        }
      ]
    }
  },
  {
    "type": "qualified_operator",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "module",
          "named": true
        },
        {
          "type": "operator",
          "named": true
        }
      ]
    }
  },
  {
    "type": "qualified_type",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "module",
          "named": true
        },
        {
          "type": "type",
          "named": true
        }
      ]
    }
  },
  {
    "type": "qualified_type_operator",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "module",
          "named": true
        },
        {
          "type": "type_operator",
          "named": true
        }
      ]
    }
  },
  {
    "type": "qualified_variable",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "module",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_accessor",
    "named": true,
    "fields": {
      "field": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "string",
            "named": true
          },
          {
            "type": "triple_quote_string",
            "named": true
          },
          {
            "type": "variable",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_field",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "field_name",
          "named": true
        },
        {
          "type": "field_pun",
          "named": true
        },
        {
          "type": "field_value",
          "named": true
        },
        {
          "type": "field_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_literal",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "record_field",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_type_literal",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_field",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_update",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_let_in",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "field_name",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "qualified_variable",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        },
        {
          "type": "wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "row_field",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "field_name",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "row_type",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "comma",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_field",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "signature",
    "named": true,
    "fields": {
      "name": {
        "multiple": true,
        "required": false,
        "types": [
          {
            "type": "(",
            "named": false
          },
          {
            "type": ")",
            "named": false
          },
          {
            "type": "operator",
            "named": true
          },
          {
            "type": "variable",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "constructor",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "statement",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "bind_pattern",
          "named": true
        },
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "exp_ado",
          "named": true
        },
        {
          "type": "exp_apply",
          "named": true
        },
        {
          "type": "exp_array",
          "named": true
        },
        {
          "type": "exp_case",
          "named": true
        },
        {
          "type": "exp_do",
          "named": true
        },
        {
          "type": "exp_if",
          "named": true
        },
        {
          "type": "exp_infix",
          "named": true
        },
        {
          "type": "exp_lambda",
          "named": true
        },
        {
          "type": "exp_literal",
          "named": true
        },
        {
          "type": "exp_name",
          "named": true
        },
        {
          "type": "exp_negation",
          "named": true
        },
        {
          "type": "exp_parens",
          "named": true
        },
        {
          "type": "exp_record_access",
          "named": true
        },
        {
          "type": "exp_section_left",
          "named": true
        },
        {
          "type": "exp_section_right",
          "named": true
        },
        {
          "type": "exp_type_application",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "let",
          "named": true
        },
        {
          "type": "record_accessor",
          "named": true
        },
        {
          "type": "record_literal",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "record_update",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type",
    "named": true,
    "fields": {}
  },
  {
    "type": "type_alias",
    "named": true,
    "fields": {
      "name": {
        "multiple": false,
        "required": true,
        "types": [
          {
            "type": "type",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "annotated_type_variable",
          "named": true
        },
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_signature",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_apply",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_import",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "import_con_names",
          "named": true
        },
        {
          "type": "type",
          "named": true
        },
        {
          "type": "type_operator",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_infix",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "qualified_type_operator",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_operator",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_literal",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "integer",
          "named": true
        },
        {
          "type": "string",
          "named": true
        },
        {
          "type": "triple_quote_string",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_name",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "annotated_type_variable",
          "named": true
        },
        {
          "type": "qualified_type",
          "named": true
        },
        {
          "type": "type",
          "named": true
        },
        {
          "type": "type_variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_operator",
    "named": true,
    "fields": {}
  },
  {
    "type": "type_operator_import",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "operator",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_parens",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_role",
    "named": true,
    "fields": {}
  },
  {
    "type": "type_role_declaration",
    "named": true,
    "fields": {
      "role": {
        "multiple": true,
        "required": true,
        "types": [
          {
            "type": "type_role",
            "named": true
          }
        ]
      }
    },
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "type",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_signature",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "captured_type_operator",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "hole",
          "named": true
        },
        {
          "type": "record_type_literal",
          "named": true
        },
        {
          "type": "row_type",
          "named": true
        },
        {
          "type": "type",
          "named": true
        },
        {
          "type": "type_apply",
          "named": true
        },
        {
          "type": "type_infix",
          "named": true
        },
        {
          "type": "type_literal",
          "named": true
        },
        {
          "type": "type_name",
          "named": true
        },
        {
          "type": "type_parens",
          "named": true
        },
        {
          "type": "type_wildcard",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_variable",
    "named": true,
    "fields": {}
  },
  {
    "type": "type_wildcard",
    "named": true,
    "fields": {}
  },
  {
    "type": "var_import",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "operator",
          "named": true
        },
        {
          "type": "variable",
          "named": true
        }
      ]
    }
  },
  {
    "type": "variable",
    "named": true,
    "fields": {}
  },
  {
    "type": "wildcard",
    "named": true,
    "fields": {}
  },
  {
    "type": "(",
    "named": false
  },
  {
    "type": ")",
    "named": false
  },
  {
    "type": "-",
    "named": false
  },
  {
    "type": "->",
    "named": false
  },
  {
    "type": ".",
    "named": false
  },
  {
    "type": ":",
    "named": false
  },
  {
    "type": "::",
    "named": false
  },
  {
    "type": ";",
    "named": false
  },
  {
    "type": "<-",
    "named": false
  },
  {
    "type": "<=",
    "named": false
  },
  {
    "type": "=",
    "named": false
  },
  {
    "type": "=>",
    "named": false
  },
  {
    "type": "@",
    "named": false
  },
  {
    "type": "[",
    "named": false
  },
  {
    "type": "\\",
    "named": false
  },
  {
    "type": "]",
    "named": false
  },
  {
    "type": "_",
    "named": false
  },
  {
    "type": "`",
    "named": false
  },
  {
    "type": "ado",
    "named": false
  },
  {
    "type": "all_names",
    "named": true
  },
  {
    "type": "as",
    "named": false
  },
  {
    "type": "case",
    "named": false
  },
  {
    "type": "char",
    "named": true
  },
  {
    "type": "class",
    "named": false
  },
  {
    "type": "comma",
    "named": true
  },
  {
    "type": "comment",
    "named": true,
    "extra": true
  },
  {
    "type": "data",
    "named": false
  },
  {
    "type": "derive",
    "named": false
  },
  {
    "type": "do",
    "named": false
  },
  {
    "type": "else",
    "named": false
  },
  {
    "type": "empty_file",
    "named": true
  },
  {
    "type": "forall",
    "named": false
  },
  {
    "type": "foreign",
    "named": false
  },
  {
    "type": "hiding",
    "named": false
  },
  {
    "type": "hole",
    "named": true
  },
  {
    "type": "if",
    "named": false
  },
  {
    "type": "import",
    "named": false
  },
  {
    "type": "in",
    "named": false
  },
  {
    "type": "infix",
    "named": false
  },
  {
    "type": "infixl",
    "named": false
  },
  {
    "type": "infixr",
    "named": false
  },
  {
    "type": "instance",
    "named": false
  },
  {
    "type": "instance_name",
    "named": true
  },
  {
    "type": "let",
    "named": false
  },
  {
    "type": "module",
    "named": false
  },
  {
    "type": "newtype",
    "named": false
  },
  {
    "type": "nominal",
    "named": false
  },
  {
    "type": "number",
    "named": true
  },
  {
    "type": "of",
    "named": false
  },
  {
    "type": "pattern",
    "named": false
  },
  {
    "type": "phantom",
    "named": false
  },
  {
    "type": "representational",
    "named": false
  },
  {
    "type": "role",
    "named": false
  },
  {
    "type": "string",
    "named": true
  },
  {
    "type": "then",
    "named": false
  },
  {
    "type": "triple_quote_string",
    "named": true
  },
  {
    "type": "type",
    "named": false
  },
  {
    "type": "where",
    "named": true
  },
  {
    "type": "{",
    "named": false
  },
  {
    "type": "|",
    "named": false
  },
  {
    "type": "}",
    "named": false
  },
  {
    "type": "←",
    "named": false
  },
  {
    "type": "→",
    "named": false
  },
  {
    "type": "⇐",
    "named": false
  },
  {
    "type": "⇒",
    "named": false
  },
  {
    "type": "∀",
    "named": false
  },
  {
    "type": "∷",
    "named": false
  }
]