[
  {
    "type": "SetN",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "atom",
          "named": true
        }
      ]
    }
  },
  {
    "type": "abstract",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "atom",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "PropN",
          "named": true
        },
        {
          "type": "SetN",
          "named": true
        },
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "literal",
          "named": true
        },
        {
          "type": "qid",
          "named": true
        },
        {
          "type": "record_assignments",
          "named": true
        }
      ]
    }
  },
  {
    "type": "attribute",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "literal",
          "named": true
        },
        {
          "type": "qid",
          "named": true
        }
      ]
    }
  },
  {
    "type": "attributes",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "attribute",
          "named": true
        }
      ]
    }
  },
  {
    "type": "bid",
    "named": true,
    "fields": {}
  },
  {
    "type": "catchall_pragma",
    "named": true,
    "fields": {}
  },
  {
    "type": "data",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_name",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        },
        {
          "type": "untyped_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "data_name",
    "named": true,
    "fields": {}
  },
  {
    "type": "data_signature",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "data_name",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        },
        {
          "type": "untyped_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "do",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "do_where",
          "named": true
        },
        {
          "type": "stmt",
          "named": true
        }
      ]
    }
  },
  {
    "type": "do_where",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "lambda_clause",
          "named": true
        },
        {
          "type": "lambda_clause_absurd",
          "named": true
        }
      ]
    }
  },
  {
    "type": "expr",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "attributes",
          "named": true
        },
        {
          "type": "do",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "lambda",
          "named": true
        },
        {
          "type": "let",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "field_assignment",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "field_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "fields",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "signature",
          "named": true
        }
      ]
    }
  },
  {
    "type": "forall",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        },
        {
          "type": "untyped_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "function",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "attributes",
          "named": true
        },
        {
          "type": "lhs",
          "named": true
        },
        {
          "type": "rhs",
          "named": true
        },
        {
          "type": "where",
          "named": true
        }
      ]
    }
  },
  {
    "type": "function_name",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "do",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "lambda",
          "named": true
        },
        {
          "type": "let",
          "named": true
        }
      ]
    }
  },
  {
    "type": "generalize",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "signature",
          "named": true
        }
      ]
    }
  },
  {
    "type": "hole_name",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "bid",
          "named": true
        },
        {
          "type": "id",
          "named": true
        }
      ]
    }
  },
  {
    "type": "hole_names",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "hole_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "import",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "module_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "import_directive",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "id",
          "named": true
        },
        {
          "type": "renaming",
          "named": true
        }
      ]
    }
  },
  {
    "type": "infix",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "bid",
          "named": true
        },
        {
          "type": "integer",
          "named": true
        }
      ]
    }
  },
  {
    "type": "instance",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "integer",
    "named": true,
    "fields": {}
  },
  {
    "type": "lambda",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "lambda_clause",
          "named": true
        },
        {
          "type": "lambda_clause_absurd",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        },
        {
          "type": "untyped_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "lambda_clause",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "catchall_pragma",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        }
      ]
    }
  },
  {
    "type": "lambda_clause_absurd",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "catchall_pragma",
          "named": true
        },
        {
          "type": "do",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "lambda",
          "named": true
        },
        {
          "type": "let",
          "named": true
        }
      ]
    }
  },
  {
    "type": "let",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "lhs",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "do",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "function_name",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "lambda",
          "named": true
        },
        {
          "type": "let",
          "named": true
        },
        {
          "type": "rewrite_equations",
          "named": true
        },
        {
          "type": "with_expressions",
          "named": true
        }
      ]
    }
  },
  {
    "type": "literal",
    "named": true,
    "fields": {}
  },
  {
    "type": "macro",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "module",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "module_name",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        },
        {
          "type": "untyped_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "module_application",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "module_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "module_assignment",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "import_directive",
          "named": true
        },
        {
          "type": "module_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "module_macro",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "import_directive",
          "named": true
        },
        {
          "type": "module_application",
          "named": true
        },
        {
          "type": "module_name",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        },
        {
          "type": "untyped_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "module_name",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": false,
      "types": [
        {
          "type": "qid",
          "named": true
        }
      ]
    }
  },
  {
    "type": "mutual",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "open",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "import_directive",
          "named": true
        },
        {
          "type": "module_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "pattern",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        },
        {
          "type": "untyped_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "postulate",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "primitive",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "type_signature",
          "named": true
        }
      ]
    }
  },
  {
    "type": "private",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "record_declarations_block",
          "named": true
        },
        {
          "type": "record_name",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        },
        {
          "type": "untyped_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_assignments",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "PropN",
          "named": true
        },
        {
          "type": "SetN",
          "named": true
        },
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "field_assignment",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "literal",
          "named": true
        },
        {
          "type": "module_assignment",
          "named": true
        },
        {
          "type": "qid",
          "named": true
        },
        {
          "type": "record_assignments",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_constructor",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "id",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_constructor_instance",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "record_constructor",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_declarations_block",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_constructor",
          "named": true
        },
        {
          "type": "record_constructor_instance",
          "named": true
        },
        {
          "type": "record_eta",
          "named": true
        },
        {
          "type": "record_induction",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_eta",
    "named": true,
    "fields": {}
  },
  {
    "type": "record_induction",
    "named": true,
    "fields": {}
  },
  {
    "type": "record_name",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "PropN",
          "named": true
        },
        {
          "type": "SetN",
          "named": true
        },
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "literal",
          "named": true
        },
        {
          "type": "qid",
          "named": true
        },
        {
          "type": "record_assignments",
          "named": true
        }
      ]
    }
  },
  {
    "type": "record_signature",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "record_name",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        },
        {
          "type": "untyped_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "renaming",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "id",
          "named": true
        }
      ]
    }
  },
  {
    "type": "rewrite_equations",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "do",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "lambda",
          "named": true
        },
        {
          "type": "let",
          "named": true
        }
      ]
    }
  },
  {
    "type": "rhs",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "expr",
          "named": true
        }
      ]
    }
  },
  {
    "type": "signature",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "attribute",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "field_name",
          "named": true
        },
        {
          "type": "signature",
          "named": true
        }
      ]
    }
  },
  {
    "type": "source_file",
    "named": true,
    "root": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "stmt",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "attributes",
          "named": true
        },
        {
          "type": "do",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "lambda",
          "named": true
        },
        {
          "type": "let",
          "named": true
        },
        {
          "type": "typed_binding",
          "named": true
        }
      ]
    }
  },
  {
    "type": "syntax",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "hole_names",
          "named": true
        },
        {
          "type": "id",
          "named": true
        }
      ]
    }
  },
  {
    "type": "type_signature",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "field_name",
          "named": true
        }
      ]
    }
  },
  {
    "type": "typed_binding",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "attributes",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "do",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "lambda",
          "named": true
        },
        {
          "type": "let",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "qid",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "unquote_decl",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": true,
      "types": [
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "id",
          "named": true
        }
      ]
    }
  },
  {
    "type": "untyped_binding",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "atom",
          "named": true
        },
        {
          "type": "attributes",
          "named": true
        },
        {
          "type": "bid",
          "named": true
        },
        {
          "type": "do",
          "named": true
        },
        {
          "type": "expr",
          "named": true
        },
        {
          "type": "forall",
          "named": true
        },
        {
          "type": "id",
          "named": true
        },
        {
          "type": "lambda",
          "named": true
        },
        {
          "type": "let",
          "named": true
        },
        {
          "type": "qid",
          "named": true
        }
      ]
    }
  },
  {
    "type": "where",
    "named": true,
    "fields": {},
    "children": {
      "multiple": true,
      "required": false,
      "types": [
        {
          "type": "abstract",
          "named": true
        },
        {
          "type": "bid",
          "named": true
        },
        {
          "type": "data",
          "named": true
        },
        {
          "type": "data_signature",
          "named": true
        },
        {
          "type": "fields",
          "named": true
        },
        {
          "type": "function",
          "named": true
        },
        {
          "type": "generalize",
          "named": true
        },
        {
          "type": "import",
          "named": true
        },
        {
          "type": "infix",
          "named": true
        },
        {
          "type": "instance",
          "named": true
        },
        {
          "type": "macro",
          "named": true
        },
        {
          "type": "module",
          "named": true
        },
        {
          "type": "module_macro",
          "named": true
        },
        {
          "type": "mutual",
          "named": true
        },
        {
          "type": "open",
          "named": true
        },
        {
          "type": "pattern",
          "named": true
        },
        {
          "type": "postulate",
          "named": true
        },
        {
          "type": "pragma",
          "named": true
        },
        {
          "type": "primitive",
          "named": true
        },
        {
          "type": "private",
          "named": true
        },
        {
          "type": "record",
          "named": true
        },
        {
          "type": "record_signature",
          "named": true
        },
        {
          "type": "syntax",
          "named": true
        },
        {
          "type": "unquote_decl",
          "named": true
        }
      ]
    }
  },
  {
    "type": "with_expressions",
    "named": true,
    "fields": {},
    "children": {
      "multiple": false,
      "required": true,
      "types": [
        {
          "type": "expr",
          "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
  },
  {
    "type": ":",
    "named": false
  },
  {
    "type": ";",
    "named": false
  },
  {
    "type": "=",
    "named": false
  },
  {
    "type": "@",
    "named": false
  },
  {
    "type": "CATCHALL",
    "named": false
  },
  {
    "type": "Prop",
    "named": false
  },
  {
    "type": "PropN",
    "named": true
  },
  {
    "type": "Set",
    "named": false
  },
  {
    "type": "\\",
    "named": false
  },
  {
    "type": "_",
    "named": false
  },
  {
    "type": "abstract",
    "named": false
  },
  {
    "type": "bid",
    "named": false
  },
  {
    "type": "codata",
    "named": false
  },
  {
    "type": "coinductive",
    "named": false
  },
  {
    "type": "comment",
    "named": true,
    "extra": true
  },
  {
    "type": "constructor",
    "named": false
  },
  {
    "type": "data",
    "named": false
  },
  {
    "type": "data_name",
    "named": false
  },
  {
    "type": "do",
    "named": false
  },
  {
    "type": "eta-equality",
    "named": false
  },
  {
    "type": "field",
    "named": false
  },
  {
    "type": "field_name",
    "named": true
  },
  {
    "type": "forall",
    "named": false
  },
  {
    "type": "hiding",
    "named": false
  },
  {
    "type": "id",
    "named": true
  },
  {
    "type": "import",
    "named": false
  },
  {
    "type": "in",
    "named": false
  },
  {
    "type": "inductive",
    "named": false
  },
  {
    "type": "infix",
    "named": false
  },
  {
    "type": "infixl",
    "named": false
  },
  {
    "type": "infixr",
    "named": false
  },
  {
    "type": "instance",
    "named": false
  },
  {
    "type": "let",
    "named": false
  },
  {
    "type": "macro",
    "named": false
  },
  {
    "type": "module",
    "named": false
  },
  {
    "type": "mutual",
    "named": false
  },
  {
    "type": "no-eta-equality",
    "named": false
  },
  {
    "type": "open",
    "named": false
  },
  {
    "type": "overlap",
    "named": false
  },
  {
    "type": "pattern",
    "named": false
  },
  {
    "type": "postulate",
    "named": false
  },
  {
    "type": "pragma",
    "named": true,
    "extra": true
  },
  {
    "type": "primitive",
    "named": false
  },
  {
    "type": "private",
    "named": false
  },
  {
    "type": "public",
    "named": false
  },
  {
    "type": "qid",
    "named": true
  },
  {
    "type": "quote",
    "named": false
  },
  {
    "type": "quoteContext",
    "named": false
  },
  {
    "type": "quoteGoal",
    "named": false
  },
  {
    "type": "quoteTerm",
    "named": false
  },
  {
    "type": "record",
    "named": false
  },
  {
    "type": "renaming",
    "named": false
  },
  {
    "type": "rewrite",
    "named": false
  },
  {
    "type": "syntax",
    "named": false
  },
  {
    "type": "tactic",
    "named": false
  },
  {
    "type": "to",
    "named": false
  },
  {
    "type": "unquote",
    "named": false
  },
  {
    "type": "unquoteDecl",
    "named": false
  },
  {
    "type": "unquoteDef",
    "named": false
  },
  {
    "type": "using",
    "named": false
  },
  {
    "type": "variable",
    "named": false
  },
  {
    "type": "where",
    "named": false
  },
  {
    "type": "with",
    "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
  }
]