{
  "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
  "name": "purescript",
  "word": "_varid",
  "rules": {
    "purescript": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "empty_file"
        },
        {
          "type": "SYMBOL",
          "name": "_decl_module"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_topdecl"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "PREC_DYNAMIC",
                        "value": 1,
                        "content": {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ";"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_layout_semicolon"
                            }
                          ]
                        }
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_topdecl"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "STRING",
                      "value": ";"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_layout_semicolon"
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "_topdecl": {
      "type": "CHOICE",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "decl_type"
          },
          "named": true,
          "value": "type_alias"
        },
        {
          "type": "SYMBOL",
          "name": "type_role_declaration"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "decl_data"
          },
          "named": true,
          "value": "data"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "decl_newtype"
          },
          "named": true,
          "value": "newtype"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "decl_import"
          },
          "named": true,
          "value": "import"
        },
        {
          "type": "SYMBOL",
          "name": "class_declaration"
        },
        {
          "type": "SYMBOL",
          "name": "class_instance"
        },
        {
          "type": "SYMBOL",
          "name": "_decl_foreign"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "decl_derive"
          },
          "named": true,
          "value": "derive_declaration"
        },
        {
          "type": "SYMBOL",
          "name": "_decl"
        },
        {
          "type": "SYMBOL",
          "name": "kind_declaration"
        },
        {
          "type": "SYMBOL",
          "name": "kind_value_declaration"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "decl_pattern"
          },
          "named": true,
          "value": "pattern_synonym"
        }
      ]
    },
    "number": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "0"
              },
              {
                "type": "PATTERN",
                "value": "[1-9][0-9_]*"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "PATTERN",
                    "value": "\\.[0-9][0-9_]*"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "PATTERN",
                        "value": "e[+-]?[1-9_]+"
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  }
                ]
              },
              {
                "type": "PATTERN",
                "value": "e[+-]?[1-9_]+"
              }
            ]
          }
        ]
      }
    },
    "char": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "PATTERN",
            "value": "'[^']'"
          },
          {
            "type": "PATTERN",
            "value": "'\\\\[^ ]*'"
          }
        ]
      }
    },
    "string": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "\""
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "PATTERN",
                  "value": "[^\\\\\"\\n]"
                },
                {
                  "type": "PATTERN",
                  "value": "\\\\(\\^)?."
                },
                {
                  "type": "PATTERN",
                  "value": "\\\\\\n\\s*\\\\"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "\""
          }
        ]
      }
    },
    "triple_quote_string": {
      "type": "TOKEN",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "\"\"\""
          },
          {
            "type": "PATTERN",
            "value": "\"{0,2}([^\"]+\"{1,2})*[^\"]*"
          },
          {
            "type": "STRING",
            "value": "\"\"\""
          }
        ]
      }
    },
    "_integer_literal": {
      "type": "TOKEN",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "STRING",
            "value": "0"
          },
          {
            "type": "PATTERN",
            "value": "[1-9][0-9_]*"
          }
        ]
      }
    },
    "_hex_literal": {
      "type": "TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "0x[0-9a-fA-F_]+"
      }
    },
    "integer": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_integer_literal"
        },
        {
          "type": "SYMBOL",
          "name": "_hex_literal"
        }
      ]
    },
    "_stringly": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "triple_quote_string"
        },
        {
          "type": "SYMBOL",
          "name": "char"
        }
      ]
    },
    "_numeric": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "SYMBOL",
          "name": "number"
        }
      ]
    },
    "_literal": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_stringly"
        },
        {
          "type": "SYMBOL",
          "name": "_numeric"
        }
      ]
    },
    "_rcarrow": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "⇒"
        },
        {
          "type": "STRING",
          "value": "=>"
        }
      ]
    },
    "_lcarrow": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "⇐"
        },
        {
          "type": "STRING",
          "value": "<="
        }
      ]
    },
    "_arrow": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "→"
        },
        {
          "type": "STRING",
          "value": "->"
        }
      ]
    },
    "_larrow": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "←"
        },
        {
          "type": "STRING",
          "value": "<-"
        }
      ]
    },
    "_colon2": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "∷"
        },
        {
          "type": "STRING",
          "value": "::"
        }
      ]
    },
    "wildcard": {
      "type": "STRING",
      "value": "_"
    },
    "hole": {
      "type": "PATTERN",
      "value": "\\?[\\p{L}0-9_']+"
    },
    "_immediate_dot": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "STRING",
        "value": "."
      }
    },
    "_varid": {
      "type": "PATTERN",
      "value": "[\\p{Ll}_][\\p{L}0-9_']*"
    },
    "_immediate_varid": {
      "type": "IMMEDIATE_TOKEN",
      "content": {
        "type": "PATTERN",
        "value": "[\\p{Ll}_][\\p{L}0-9_']*"
      }
    },
    "variable": {
      "type": "SYMBOL",
      "name": "_varid"
    },
    "_immediate_variable": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_immediate_varid"
      },
      "named": true,
      "value": "variable"
    },
    "qualified_variable": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qualifying_module"
        },
        {
          "type": "SYMBOL",
          "name": "variable"
        }
      ]
    },
    "_qvarid": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "qualified_variable"
        },
        {
          "type": "SYMBOL",
          "name": "variable"
        }
      ]
    },
    "_operator": {
      "type": "PATTERN",
      "value": "(?:[:!#$%&*+./<=>?@\\\\^|~-]|\\p{S})+"
    },
    "operator": {
      "type": "SYMBOL",
      "name": "_operator"
    },
    "_minus": {
      "type": "ALIAS",
      "content": {
        "type": "STRING",
        "value": "-"
      },
      "named": true,
      "value": "operator"
    },
    "_operator_or_minus": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "operator"
        },
        {
          "type": "SYMBOL",
          "name": "_minus"
        }
      ]
    },
    "qualified_operator": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qualifying_module"
        },
        {
          "type": "SYMBOL",
          "name": "_operator_or_minus"
        }
      ]
    },
    "_q_op": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "qualified_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_operator_or_minus"
        }
      ]
    },
    "_q_op_nominus": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "qualified_operator"
        },
        {
          "type": "SYMBOL",
          "name": "operator"
        }
      ]
    },
    "_var": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "variable"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_operator_or_minus"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_qvar": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qvarid"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_q_op"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_conid": {
      "type": "PATTERN",
      "value": "[\\p{Lu}_][\\p{L}0-9_']*"
    },
    "constructor": {
      "type": "SYMBOL",
      "name": "_conid"
    },
    "qualified_constructor": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qualifying_module"
        },
        {
          "type": "SYMBOL",
          "name": "constructor"
        }
      ]
    },
    "_qconid": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "qualified_constructor"
        },
        {
          "type": "SYMBOL",
          "name": "constructor"
        }
      ]
    },
    "_con": {
      "type": "SYMBOL",
      "name": "constructor"
    },
    "_qcon": {
      "type": "SYMBOL",
      "name": "_qconid"
    },
    "_tyconid": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "constructor"
      },
      "named": true,
      "value": "type"
    },
    "qualified_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qualifying_module"
        },
        {
          "type": "SYMBOL",
          "name": "_tyconid"
        }
      ]
    },
    "_qtyconid": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "qualified_type"
        },
        {
          "type": "SYMBOL",
          "name": "_tyconid"
        }
      ]
    },
    "_type_operator": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_tyconsym"
      },
      "named": true,
      "value": "type_operator"
    },
    "qualified_type_operator": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qualifying_module"
        },
        {
          "type": "SYMBOL",
          "name": "type_operator"
        }
      ]
    },
    "_qualified_type_operator": {
      "type": "SYMBOL",
      "name": "qualified_type_operator"
    },
    "_qtyconsym": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qualified_type_operator"
        },
        {
          "type": "SYMBOL",
          "name": "_type_operator"
        }
      ]
    },
    "_simple_tycon": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_tyconid"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_type_operator"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_simple_qtyconop": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qtyconid"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_qtyconsym"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "tycon_arrow": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_arrow"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "type_literal": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "integer"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "triple_quote_string"
        }
      ]
    },
    "_qtycon": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qtyconid"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "_qtyconsym"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_gtycon": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qtycon"
        },
        {
          "type": "SYMBOL",
          "name": "tycon_arrow"
        }
      ]
    },
    "literal": {
      "type": "SYMBOL",
      "name": "_literal"
    },
    "_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_var"
        },
        {
          "type": "SYMBOL",
          "name": "_con"
        }
      ]
    },
    "_qname": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qvar"
        },
        {
          "type": "SYMBOL",
          "name": "_qcon"
        }
      ]
    },
    "_field_name_ty": {
      "type": "CHOICE",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "PREC_DYNAMIC",
            "value": 0,
            "content": {
              "type": "SYMBOL",
              "name": "type_variable"
            }
          },
          "named": true,
          "value": "field_name"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "string"
              },
              {
                "type": "SYMBOL",
                "name": "triple_quote_string"
              }
            ]
          },
          "named": true,
          "value": "field_name"
        }
      ]
    },
    "row_field": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_field_name_ty"
        },
        {
          "type": "SYMBOL",
          "name": "_colon2"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "_row_variable": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "|"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_type"
              },
              {
                "type": "SYMBOL",
                "name": "type_variable"
              }
            ]
          }
        ]
      }
    },
    "row_type": {
      "type": "PREC_DYNAMIC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "("
          },
          {
            "type": "SEQ",
            "members": [
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "row_field"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "SYMBOL",
                              "name": "comma"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "row_field"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              },
              {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_row_variable"
                  },
                  {
                    "type": "BLANK"
                  }
                ]
              }
            ]
          },
          {
            "type": "STRING",
            "value": ")"
          }
        ]
      }
    },
    "record_type_literal": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "row_field"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "comma"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "row_field"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_row_variable"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "_field_name": {
      "type": "ALIAS",
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "string"
          },
          {
            "type": "SYMBOL",
            "name": "triple_quote_string"
          },
          {
            "type": "SYMBOL",
            "name": "variable"
          }
        ]
      },
      "named": true,
      "value": "field_name"
    },
    "field_wildcard": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SYMBOL",
        "name": "wildcard"
      }
    },
    "record_field": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "variable"
            },
            "named": true,
            "value": "field_pun"
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_field_name"
            },
            {
              "type": "STRING",
              "value": ":"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "field_wildcard"
                },
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_exp"
                  },
                  "named": true,
                  "value": "field_value"
                }
              ]
            }
          ]
        }
      ]
    },
    "record_literal": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "record_field"
                  },
                  {
                    "type": "REPEAT",
                    "content": {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "comma"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "record_field"
                        }
                      ]
                    }
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "_record_field_update": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_field_name"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "wildcard"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_exp"
                    }
                  ]
                }
              ]
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "{"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "ALIAS",
                          "content": {
                            "type": "SYMBOL",
                            "name": "_record_field_update"
                          },
                          "named": true,
                          "value": "record_update"
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "SYMBOL",
                                "name": "comma"
                              },
                              {
                                "type": "ALIAS",
                                "content": {
                                  "type": "SYMBOL",
                                  "name": "_record_field_update"
                                },
                                "named": true,
                                "value": "record_update"
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "STRING",
                  "value": "}"
                }
              ]
            }
          ]
        }
      ]
    },
    "_record_update_lhs": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "wildcard"
        },
        {
          "type": "SYMBOL",
          "name": "hole"
        },
        {
          "type": "SYMBOL",
          "name": "_qvarid"
        },
        {
          "type": "SYMBOL",
          "name": "record_literal"
        },
        {
          "type": "SYMBOL",
          "name": "exp_record_access"
        },
        {
          "type": "SYMBOL",
          "name": "exp_parens"
        }
      ]
    },
    "record_update": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_record_update_lhs"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "{"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_record_field_update"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "comma"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_record_field_update"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": "}"
            }
          ]
        }
      ]
    },
    "type_variable": {
      "type": "SYMBOL",
      "name": "_varid"
    },
    "_visible_type_variable": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "@"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_immediate_varid"
          },
          "named": true,
          "value": "type_variable"
        }
      ]
    },
    "_tyvar_no_annotation": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_variable"
        },
        {
          "type": "SYMBOL",
          "name": "_visible_type_variable"
        }
      ]
    },
    "_tyvar_annotated": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_tyvar_no_annotation"
            },
            {
              "type": "SYMBOL",
              "name": "_type_annotation"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_tyvar": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_tyvar_no_annotation"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_tyvar_annotated"
          },
          "named": true,
          "value": "annotated_type_variable"
        }
      ]
    },
    "_forall_kw": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "forall"
        },
        {
          "type": "STRING",
          "value": "∀"
        }
      ]
    },
    "_quantifiers": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_forall_kw"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "_tyvar"
          }
        },
        {
          "type": "STRING",
          "value": "."
        }
      ]
    },
    "forall": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "REPEAT1",
        "content": {
          "type": "SYMBOL",
          "name": "_quantifiers"
        }
      }
    },
    "type_name": {
      "type": "PREC_DYNAMIC",
      "value": 0,
      "content": {
        "type": "CHOICE",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_tyvar"
          },
          {
            "type": "SYMBOL",
            "name": "_qtyconid"
          }
        ]
      }
    },
    "type_wildcard": {
      "type": "STRING",
      "value": "_"
    },
    "type_operator": {
      "type": "SYMBOL",
      "name": "_operator"
    },
    "_type_qoperator": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type_operator"
        },
        {
          "type": "SYMBOL",
          "name": "qualified_type_operator"
        }
      ]
    },
    "captured_type_operator": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_q_op"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "type_parens": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "forall"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "_type"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_type_annotation": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_colon2"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "forall"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "_fun_signature": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_varid"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "_atype": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "hole"
        },
        {
          "type": "SYMBOL",
          "name": "type_wildcard"
        },
        {
          "type": "SYMBOL",
          "name": "row_type"
        },
        {
          "type": "SYMBOL",
          "name": "record_type_literal"
        },
        {
          "type": "SYMBOL",
          "name": "type_name"
        },
        {
          "type": "SYMBOL",
          "name": "type_literal"
        },
        {
          "type": "SYMBOL",
          "name": "type_parens"
        },
        {
          "type": "SYMBOL",
          "name": "captured_type_operator"
        }
      ]
    },
    "type_apply": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_atype"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "_atype"
          }
        }
      ]
    },
    "_btype": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "forall"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_atype"
            },
            {
              "type": "SYMBOL",
              "name": "type_apply"
            }
          ]
        }
      ]
    },
    "type_infix": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_btype"
        },
        {
          "type": "SYMBOL",
          "name": "_type_qoperator"
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "forall"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_infix"
            },
            {
              "type": "SYMBOL",
              "name": "_btype"
            }
          ]
        }
      ]
    },
    "_simpletype": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_tyconid"
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_tyvar"
          }
        }
      ]
    },
    "_role": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "nominal"
        },
        {
          "type": "STRING",
          "value": "representational"
        },
        {
          "type": "STRING",
          "value": "phantom"
        }
      ]
    },
    "type_role_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "STRING",
          "value": "role"
        },
        {
          "type": "SYMBOL",
          "name": "_tyconid"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "FIELD",
            "name": "role",
            "content": {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_role"
              },
              "named": true,
              "value": "type_role"
            }
          }
        }
      ]
    },
    "_type_type_signature": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "SYMBOL",
          "name": "_tyconid"
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "decl_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_type_type_signature"
              },
              "named": true,
              "value": "type_signature"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "SYMBOL",
          "name": "_simpletype"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_type"
        }
      ]
    },
    "exp_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qvar"
        },
        {
          "type": "SYMBOL",
          "name": "_qcon"
        }
      ]
    },
    "exp_ticked": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "`"
        },
        {
          "type": "SYMBOL",
          "name": "_exp_infix"
        },
        {
          "type": "STRING",
          "value": "`"
        }
      ]
    },
    "exp_negation": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "SYMBOL",
          "name": "_aexp"
        }
      ]
    },
    "exp_parens": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_exp"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "exp_type_application": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "@"
        },
        {
          "type": "SYMBOL",
          "name": "_atype"
        }
      ]
    },
    "exp_array": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_exp"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "comma"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_exp"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "exp_section_left": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "wildcard"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_q_op"
            },
            {
              "type": "SYMBOL",
              "name": "exp_ticked"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_exp_infix"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "exp_section_right": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_exp_infix"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_q_op"
            },
            {
              "type": "SYMBOL",
              "name": "exp_ticked"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "wildcard"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_record_access_field": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_immediate_variable"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        },
        {
          "type": "SYMBOL",
          "name": "triple_quote_string"
        }
      ]
    },
    "record_accessor": {
      "type": "PREC_LEFT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "wildcard"
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_immediate_dot"
                },
                {
                  "type": "FIELD",
                  "name": "field",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_record_access_field"
                  }
                }
              ]
            }
          }
        ]
      }
    },
    "exp_record_access": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "hole"
              },
              {
                "type": "SYMBOL",
                "name": "record_literal"
              },
              {
                "type": "SYMBOL",
                "name": "exp_parens"
              },
              {
                "type": "SYMBOL",
                "name": "_qvarid"
              }
            ]
          },
          {
            "type": "REPEAT1",
            "content": {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_immediate_dot"
                },
                {
                  "type": "FIELD",
                  "name": "field",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_record_access_field"
                  }
                }
              ]
            }
          }
        ]
      }
    },
    "exp_if": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "FIELD",
          "name": "if",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "wildcard"
              },
              {
                "type": "SYMBOL",
                "name": "_exp"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "then"
        },
        {
          "type": "FIELD",
          "name": "then",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "wildcard"
              },
              {
                "type": "SYMBOL",
                "name": "_exp"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": "else"
        },
        {
          "type": "FIELD",
          "name": "else",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "wildcard"
              },
              {
                "type": "SYMBOL",
                "name": "_exp"
              }
            ]
          }
        }
      ]
    },
    "pattern_guard": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pat"
        },
        {
          "type": "SYMBOL",
          "name": "_larrow"
        },
        {
          "type": "SYMBOL",
          "name": "_exp_infix"
        }
      ]
    },
    "guard": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "pattern_guard"
        },
        {
          "type": "SYMBOL",
          "name": "_exp_infix"
        }
      ]
    },
    "guards": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "|"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "guard"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "comma"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "guard"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "gdpat": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "guards"
        },
        {
          "type": "SYMBOL",
          "name": "_arrow"
        },
        {
          "type": "SYMBOL",
          "name": "_exp"
        }
      ]
    },
    "_alt_variants": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_arrow"
            },
            {
              "type": "FIELD",
              "name": "exp",
              "content": {
                "type": "SYMBOL",
                "name": "_exp"
              }
            }
          ]
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "gdpat"
          }
        }
      ]
    },
    "alt": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "FIELD",
              "name": "pat",
              "content": {
                "type": "SYMBOL",
                "name": "_pat"
              }
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "comma"
                  },
                  {
                    "type": "FIELD",
                    "name": "pat",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_pat"
                    }
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_alt_variants"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "where"
                },
                {
                  "type": "SYMBOL",
                  "name": "declarations"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "alts": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_layout_start"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "alt"
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "PREC_DYNAMIC",
                                "value": 1,
                                "content": {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "STRING",
                                      "value": ";"
                                    },
                                    {
                                      "type": "SYMBOL",
                                      "name": "_layout_semicolon"
                                    }
                                  ]
                                }
                              },
                              {
                                "type": "SYMBOL",
                                "name": "alt"
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ";"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_layout_semicolon"
                            }
                          ]
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "_layout_end"
            }
          ]
        }
      ]
    },
    "_exp_case_slots": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "condition",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "wildcard"
              },
              {
                "type": "SYMBOL",
                "name": "_exp"
              }
            ]
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "comma"
              },
              {
                "type": "FIELD",
                "name": "condition",
                "content": {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "wildcard"
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_exp"
                    }
                  ]
                }
              }
            ]
          }
        }
      ]
    },
    "exp_case": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "case"
        },
        {
          "type": "SYMBOL",
          "name": "_exp_case_slots"
        },
        {
          "type": "STRING",
          "value": "of"
        },
        {
          "type": "SYMBOL",
          "name": "alts"
        }
      ]
    },
    "_let_decls": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_layout_start"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_decl"
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "PREC_DYNAMIC",
                                "value": 1,
                                "content": {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "STRING",
                                      "value": ";"
                                    },
                                    {
                                      "type": "SYMBOL",
                                      "name": "_layout_semicolon"
                                    }
                                  ]
                                }
                              },
                              {
                                "type": "SYMBOL",
                                "name": "_decl"
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ";"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_layout_semicolon"
                            }
                          ]
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "exp_let_in": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "let"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_let_decls"
          },
          "named": true,
          "value": "declarations"
        },
        {
          "type": "STRING",
          "value": "in"
        },
        {
          "type": "SYMBOL",
          "name": "_exp"
        }
      ]
    },
    "exp_lambda": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "\\"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "_apat"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_arrow"
        },
        {
          "type": "SYMBOL",
          "name": "_exp"
        }
      ]
    },
    "_statement_lexp": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "exp_if"
        },
        {
          "type": "SYMBOL",
          "name": "exp_case"
        },
        {
          "type": "SYMBOL",
          "name": "exp_negation"
        },
        {
          "type": "SYMBOL",
          "name": "exp_lambda"
        },
        {
          "type": "SYMBOL",
          "name": "_fexp"
        }
      ]
    },
    "__statement_exp_infix": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_statement_exp_infix"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_q_op"
            },
            {
              "type": "SYMBOL",
              "name": "exp_ticked"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_lexp"
        }
      ]
    },
    "_statement_exp_infix": {
      "type": "CHOICE",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "__statement_exp_infix"
          },
          "named": true,
          "value": "exp_infix"
        },
        {
          "type": "SYMBOL",
          "name": "_statement_lexp"
        }
      ]
    },
    "_statement_exp": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_statement_exp_infix"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_type_annotation"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "bind_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_typed_pat"
        },
        {
          "type": "SYMBOL",
          "name": "_larrow"
        },
        {
          "type": "SYMBOL",
          "name": "_exp"
        }
      ]
    },
    "let": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "let"
        },
        {
          "type": "SYMBOL",
          "name": "declarations"
        }
      ]
    },
    "statement": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_statement_exp"
        },
        {
          "type": "SYMBOL",
          "name": "bind_pattern"
        },
        {
          "type": "SYMBOL",
          "name": "let"
        }
      ]
    },
    "_do_kw": {
      "type": "STRING",
      "value": "do"
    },
    "_do": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "do"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_qualifying_module"
            },
            {
              "type": "SYMBOL",
              "name": "_do_kw"
            }
          ]
        }
      ]
    },
    "exp_do": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_do"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_layout_start"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "SYMBOL",
                              "name": "statement"
                            },
                            {
                              "type": "REPEAT",
                              "content": {
                                "type": "SEQ",
                                "members": [
                                  {
                                    "type": "PREC_DYNAMIC",
                                    "value": 1,
                                    "content": {
                                      "type": "CHOICE",
                                      "members": [
                                        {
                                          "type": "STRING",
                                          "value": ";"
                                        },
                                        {
                                          "type": "SYMBOL",
                                          "name": "_layout_semicolon"
                                        }
                                      ]
                                    }
                                  },
                                  {
                                    "type": "SYMBOL",
                                    "name": "statement"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": ";"
                                },
                                {
                                  "type": "SYMBOL",
                                  "name": "_layout_semicolon"
                                }
                              ]
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                },
                {
                  "type": "SYMBOL",
                  "name": "_layout_end"
                }
              ]
            }
          ]
        }
      ]
    },
    "_ado_kw": {
      "type": "STRING",
      "value": "ado"
    },
    "_ado": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "ado"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_qualifying_module"
            },
            {
              "type": "SYMBOL",
              "name": "_ado_kw"
            }
          ]
        }
      ]
    },
    "_ado_in": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "in"
        },
        {
          "type": "FIELD",
          "name": "in",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "_layout_start"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "SYMBOL",
                                "name": "_exp"
                              },
                              {
                                "type": "REPEAT",
                                "content": {
                                  "type": "SEQ",
                                  "members": [
                                    {
                                      "type": "PREC_DYNAMIC",
                                      "value": 1,
                                      "content": {
                                        "type": "CHOICE",
                                        "members": [
                                          {
                                            "type": "STRING",
                                            "value": ";"
                                          },
                                          {
                                            "type": "SYMBOL",
                                            "name": "_layout_semicolon"
                                          }
                                        ]
                                      }
                                    },
                                    {
                                      "type": "SYMBOL",
                                      "name": "_exp"
                                    }
                                  ]
                                }
                              }
                            ]
                          },
                          {
                            "type": "CHOICE",
                            "members": [
                              {
                                "type": "CHOICE",
                                "members": [
                                  {
                                    "type": "STRING",
                                    "value": ";"
                                  },
                                  {
                                    "type": "SYMBOL",
                                    "name": "_layout_semicolon"
                                  }
                                ]
                              },
                              {
                                "type": "BLANK"
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "type": "BLANK"
                      }
                    ]
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_layout_end"
                  }
                ]
              }
            ]
          }
        }
      ]
    },
    "exp_ado": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_ado"
        },
        {
          "type": "SYMBOL",
          "name": "_layout_start"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "statement"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "PREC_DYNAMIC",
                            "value": 1,
                            "content": {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "STRING",
                                  "value": ";"
                                },
                                {
                                  "type": "SYMBOL",
                                  "name": "_layout_semicolon"
                                }
                              ]
                            }
                          },
                          {
                            "type": "SYMBOL",
                            "name": "statement"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "STRING",
                          "value": ";"
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_layout_semicolon"
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_ado_in"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_layout_end"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_do_or_ado_block": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "exp_do"
        },
        {
          "type": "SYMBOL",
          "name": "exp_ado"
        }
      ]
    },
    "_aexp_projection": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "hole"
        },
        {
          "type": "SYMBOL",
          "name": "exp_name"
        },
        {
          "type": "SYMBOL",
          "name": "exp_parens"
        },
        {
          "type": "SYMBOL",
          "name": "exp_array"
        },
        {
          "type": "SYMBOL",
          "name": "record_literal"
        },
        {
          "type": "SYMBOL",
          "name": "record_update"
        },
        {
          "type": "SYMBOL",
          "name": "record_accessor"
        },
        {
          "type": "SYMBOL",
          "name": "exp_record_access"
        },
        {
          "type": "SYMBOL",
          "name": "exp_section_left"
        },
        {
          "type": "SYMBOL",
          "name": "exp_section_right"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "literal"
          },
          "named": true,
          "value": "exp_literal"
        }
      ]
    },
    "_aexp": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_aexp_projection"
        },
        {
          "type": "SYMBOL",
          "name": "exp_type_application"
        },
        {
          "type": "SYMBOL",
          "name": "_do_or_ado_block"
        }
      ]
    },
    "_exp_apply": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_aexp"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_aexp"
            },
            {
              "type": "SYMBOL",
              "name": "_exp_apply"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_aexp"
            },
            {
              "type": "SYMBOL",
              "name": "exp_lambda"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_aexp"
            },
            {
              "type": "SYMBOL",
              "name": "exp_if"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_aexp"
            },
            {
              "type": "SYMBOL",
              "name": "exp_case"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_aexp"
            },
            {
              "type": "SYMBOL",
              "name": "exp_let_in"
            }
          ]
        }
      ]
    },
    "_fexp": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_aexp"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_exp_apply"
          },
          "named": true,
          "value": "exp_apply"
        }
      ]
    },
    "_lexp": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "exp_if"
        },
        {
          "type": "SYMBOL",
          "name": "exp_case"
        },
        {
          "type": "SYMBOL",
          "name": "exp_negation"
        },
        {
          "type": "SYMBOL",
          "name": "exp_lambda"
        },
        {
          "type": "SYMBOL",
          "name": "_fexp"
        },
        {
          "type": "SYMBOL",
          "name": "exp_let_in"
        }
      ]
    },
    "exp_infix": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_exp_infix"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_q_op"
            },
            {
              "type": "SYMBOL",
              "name": "exp_ticked"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "_lexp"
        }
      ]
    },
    "_exp_infix": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "exp_infix"
        },
        {
          "type": "SYMBOL",
          "name": "_lexp"
        }
      ]
    },
    "_exp": {
      "type": "PREC_RIGHT",
      "value": 0,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_exp_infix"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_type_annotation"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        ]
      }
    },
    "pat_field": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_field_name"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": ":"
                },
                {
                  "type": "SYMBOL",
                  "name": "_typed_pat"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "pat_fields": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "pat_field"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "comma"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "pat_field"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "pat_name": {
      "type": "SYMBOL",
      "name": "_var"
    },
    "pat_as": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "var",
          "content": {
            "type": "SYMBOL",
            "name": "variable"
          }
        },
        {
          "type": "IMMEDIATE_TOKEN",
          "content": {
            "type": "STRING",
            "value": "@"
          }
        },
        {
          "type": "FIELD",
          "name": "pat",
          "content": {
            "type": "SYMBOL",
            "name": "_apat"
          }
        }
      ]
    },
    "_pat_constructor": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "_qcon"
      },
      "named": true,
      "value": "pat_name"
    },
    "pat_record": {
      "type": "FIELD",
      "name": "fields",
      "content": {
        "type": "SYMBOL",
        "name": "pat_fields"
      }
    },
    "pat_wildcard": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "wildcard"
      },
      "named": true,
      "value": "pat_wildcard"
    },
    "pat_parens": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "_typed_pat"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "pat_array": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_typed_pat"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "comma"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "_typed_pat"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "_apat": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "pat_name"
        },
        {
          "type": "SYMBOL",
          "name": "pat_as"
        },
        {
          "type": "SYMBOL",
          "name": "_pat_constructor"
        },
        {
          "type": "SYMBOL",
          "name": "pat_record"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "literal"
          },
          "named": true,
          "value": "pat_literal"
        },
        {
          "type": "SYMBOL",
          "name": "pat_wildcard"
        },
        {
          "type": "SYMBOL",
          "name": "pat_parens"
        },
        {
          "type": "SYMBOL",
          "name": "pat_array"
        }
      ]
    },
    "pat_negation": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "-"
        },
        {
          "type": "SYMBOL",
          "name": "_apat"
        }
      ]
    },
    "pat_apply": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pat_constructor"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "_apat"
          }
        }
      ]
    },
    "_lpat": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_apat"
        },
        {
          "type": "SYMBOL",
          "name": "pat_negation"
        },
        {
          "type": "SYMBOL",
          "name": "pat_apply"
        }
      ]
    },
    "pat_infix": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_lpat"
        },
        {
          "type": "SYMBOL",
          "name": "_q_op"
        },
        {
          "type": "SYMBOL",
          "name": "_pat"
        }
      ]
    },
    "_pat": {
      "type": "CHOICE",
      "members": [
        {
          "type": "PREC",
          "value": 2,
          "content": {
            "type": "SYMBOL",
            "name": "pat_infix"
          }
        },
        {
          "type": "PREC",
          "value": 1,
          "content": {
            "type": "SYMBOL",
            "name": "_lpat"
          }
        }
      ]
    },
    "pat_typed": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "pattern",
          "content": {
            "type": "SYMBOL",
            "name": "_pat"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "_typed_pat": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pat"
        },
        {
          "type": "SYMBOL",
          "name": "pat_typed"
        }
      ]
    },
    "_import_name": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_con"
        },
        {
          "type": "SYMBOL",
          "name": "_var"
        }
      ]
    },
    "import_con_names": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "STRING",
                    "value": ".."
                  },
                  "named": true,
                  "value": "all_names"
                },
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_import_name"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "comma"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_import_name"
                          }
                        ]
                      }
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "import_item": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "class_import"
        },
        {
          "type": "SYMBOL",
          "name": "type_operator_import"
        },
        {
          "type": "SYMBOL",
          "name": "type_import"
        },
        {
          "type": "SYMBOL",
          "name": "var_import"
        }
      ]
    },
    "class_import": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "class"
        },
        {
          "type": "SYMBOL",
          "name": "type_name"
        }
      ]
    },
    "type_operator_import": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SYMBOL",
              "name": "operator"
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "type_import": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_simple_tycon"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "import_con_names"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "var_import": {
      "type": "SYMBOL",
      "name": "_var"
    },
    "import_list": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "hiding"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "import_item"
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "SYMBOL",
                                "name": "comma"
                              },
                              {
                                "type": "SYMBOL",
                                "name": "import_item"
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "comma"
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "decl_import": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "import"
        },
        {
          "type": "FIELD",
          "name": "module",
          "content": {
            "type": "SYMBOL",
            "name": "qualified_module"
          }
        },
        {
          "type": "FIELD",
          "name": "imports",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "import_list"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "import_rename",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "as"
                  },
                  {
                    "type": "CHOICE",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "_modid"
                      },
                      {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "_qualifying_module"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_modid"
                          }
                        ]
                      }
                    ]
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          }
        }
      ]
    },
    "_modid": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "constructor"
      },
      "named": true,
      "value": "module"
    },
    "_qualifying_module": {
      "type": "REPEAT1",
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "SYMBOL",
            "name": "_modid"
          },
          {
            "type": "SYMBOL",
            "name": "_dot"
          }
        ]
      }
    },
    "qualified_module": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_modid"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_qualifying_module"
            },
            {
              "type": "SYMBOL",
              "name": "_modid"
            }
          ]
        }
      ]
    },
    "export_names": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "ALIAS",
                  "content": {
                    "type": "STRING",
                    "value": ".."
                  },
                  "named": true,
                  "value": "all_names"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_name"
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "SYMBOL",
                                "name": "comma"
                              },
                              {
                                "type": "SYMBOL",
                                "name": "_name"
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "export": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_qvar"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_qtycon"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "export_names"
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "type"
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "("
                },
                {
                  "type": "SYMBOL",
                  "name": "_q_op"
                },
                {
                  "type": "STRING",
                  "value": ")"
                }
              ]
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "class"
            },
            {
              "type": "SYMBOL",
              "name": "class_name"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "module"
            },
            {
              "type": "FIELD",
              "name": "module",
              "content": {
                "type": "SYMBOL",
                "name": "qualified_module"
              }
            }
          ]
        }
      ]
    },
    "exports": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "export"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "comma"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "export"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_decl_module": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "module"
        },
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "qualified_module"
          }
        },
        {
          "type": "FIELD",
          "name": "exports",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "exports"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "where"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_layout_start"
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "SEQ",
                                  "members": [
                                    {
                                      "type": "SYMBOL",
                                      "name": "_topdecl"
                                    },
                                    {
                                      "type": "REPEAT",
                                      "content": {
                                        "type": "SEQ",
                                        "members": [
                                          {
                                            "type": "PREC_DYNAMIC",
                                            "value": 1,
                                            "content": {
                                              "type": "CHOICE",
                                              "members": [
                                                {
                                                  "type": "STRING",
                                                  "value": ";"
                                                },
                                                {
                                                  "type": "SYMBOL",
                                                  "name": "_layout_semicolon"
                                                }
                                              ]
                                            }
                                          },
                                          {
                                            "type": "SYMBOL",
                                            "name": "_topdecl"
                                          }
                                        ]
                                      }
                                    }
                                  ]
                                },
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "CHOICE",
                                      "members": [
                                        {
                                          "type": "STRING",
                                          "value": ";"
                                        },
                                        {
                                          "type": "SYMBOL",
                                          "name": "_layout_semicolon"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "BLANK"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_layout_end"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        }
      ]
    },
    "_data_type_signature": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "data"
        },
        {
          "type": "SYMBOL",
          "name": "_tyconid"
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "decl_data": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_data_type_signature"
              },
              "named": true,
              "value": "type_signature"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "data"
        },
        {
          "type": "SYMBOL",
          "name": "_simpletype"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "constructor"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_type"
                  }
                }
              ]
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "|"
                  },
                  {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "constructor"
                      },
                      {
                        "type": "REPEAT",
                        "content": {
                          "type": "SYMBOL",
                          "name": "_type"
                        }
                      }
                    ]
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "newtype_constructor": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "constructor"
        },
        {
          "type": "SYMBOL",
          "name": "_atype"
        }
      ]
    },
    "_newtype_type_signature": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "newtype"
        },
        {
          "type": "SYMBOL",
          "name": "_tyconid"
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "decl_newtype": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_newtype_type_signature"
              },
              "named": true,
              "value": "type_signature"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "newtype"
        },
        {
          "type": "SYMBOL",
          "name": "_simpletype"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "newtype_constructor"
        }
      ]
    },
    "class_name": {
      "type": "SYMBOL",
      "name": "_qtyconid"
    },
    "constraint": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "class_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        }
      ]
    },
    "constraints": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "constraint"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "("
            },
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "constraint"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "SYMBOL",
                        "name": "comma"
                      },
                      {
                        "type": "SYMBOL",
                        "name": "constraint"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "STRING",
              "value": ")"
            }
          ]
        }
      ]
    },
    "_cdecl": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_gendecl"
        },
        {
          "type": "SYMBOL",
          "name": "function"
        }
      ]
    },
    "fundep": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "type_variable"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_arrow"
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "type_variable"
          }
        }
      ]
    },
    "fundeps": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "|"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "fundep"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "comma"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "fundep"
                  }
                ]
              }
            }
          ]
        }
      ]
    },
    "class_body": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "where"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_layout_start"
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "SYMBOL",
                                  "name": "_cdecl"
                                },
                                {
                                  "type": "REPEAT",
                                  "content": {
                                    "type": "SEQ",
                                    "members": [
                                      {
                                        "type": "PREC_DYNAMIC",
                                        "value": 1,
                                        "content": {
                                          "type": "CHOICE",
                                          "members": [
                                            {
                                              "type": "STRING",
                                              "value": ";"
                                            },
                                            {
                                              "type": "SYMBOL",
                                              "name": "_layout_semicolon"
                                            }
                                          ]
                                        }
                                      },
                                      {
                                        "type": "SYMBOL",
                                        "name": "_cdecl"
                                      }
                                    ]
                                  }
                                }
                              ]
                            },
                            {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "STRING",
                                      "value": ";"
                                    },
                                    {
                                      "type": "SYMBOL",
                                      "name": "_layout_semicolon"
                                    }
                                  ]
                                },
                                {
                                  "type": "BLANK"
                                }
                              ]
                            }
                          ]
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    },
                    {
                      "type": "SYMBOL",
                      "name": "_layout_end"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_class_kind_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "class"
        },
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_tyconid"
          },
          "named": true,
          "value": "class_name"
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "class_head": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "constraints"
                },
                {
                  "type": "SYMBOL",
                  "name": "_lcarrow"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "class_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_tyvar"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "fundeps"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "class_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_class_kind_declaration"
              },
              "named": true,
              "value": "kind_declaration"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "class"
        },
        {
          "type": "SYMBOL",
          "name": "class_head"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "class_body"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_idecl": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "function"
        },
        {
          "type": "SYMBOL",
          "name": "signature"
        }
      ]
    },
    "instance_head": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "constraints"
                },
                {
                  "type": "SYMBOL",
                  "name": "_rcarrow"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "class_name"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_type"
          }
        }
      ]
    },
    "_instance_name": {
      "type": "SEQ",
      "members": [
        {
          "type": "ALIAS",
          "content": {
            "type": "SYMBOL",
            "name": "_varid"
          },
          "named": true,
          "value": "instance_name"
        },
        {
          "type": "SYMBOL",
          "name": "_colon2"
        }
      ]
    },
    "class_instance": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "else"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "instance"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_instance_name"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "instance_head"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "where"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SEQ",
                          "members": [
                            {
                              "type": "SYMBOL",
                              "name": "_layout_start"
                            },
                            {
                              "type": "CHOICE",
                              "members": [
                                {
                                  "type": "SEQ",
                                  "members": [
                                    {
                                      "type": "SEQ",
                                      "members": [
                                        {
                                          "type": "SYMBOL",
                                          "name": "_idecl"
                                        },
                                        {
                                          "type": "REPEAT",
                                          "content": {
                                            "type": "SEQ",
                                            "members": [
                                              {
                                                "type": "PREC_DYNAMIC",
                                                "value": 1,
                                                "content": {
                                                  "type": "CHOICE",
                                                  "members": [
                                                    {
                                                      "type": "STRING",
                                                      "value": ";"
                                                    },
                                                    {
                                                      "type": "SYMBOL",
                                                      "name": "_layout_semicolon"
                                                    }
                                                  ]
                                                }
                                              },
                                              {
                                                "type": "SYMBOL",
                                                "name": "_idecl"
                                              }
                                            ]
                                          }
                                        }
                                      ]
                                    },
                                    {
                                      "type": "CHOICE",
                                      "members": [
                                        {
                                          "type": "CHOICE",
                                          "members": [
                                            {
                                              "type": "STRING",
                                              "value": ";"
                                            },
                                            {
                                              "type": "SYMBOL",
                                              "name": "_layout_semicolon"
                                            }
                                          ]
                                        },
                                        {
                                          "type": "BLANK"
                                        }
                                      ]
                                    }
                                  ]
                                },
                                {
                                  "type": "BLANK"
                                }
                              ]
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_layout_end"
                            }
                          ]
                        }
                      ]
                    },
                    {
                      "type": "BLANK"
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_funpat": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "pattern",
          "content": {
            "type": "SYMBOL",
            "name": "_typed_pat"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_funrhs"
        }
      ]
    },
    "_fun_name": {
      "type": "FIELD",
      "name": "name",
      "content": {
        "type": "SYMBOL",
        "name": "_var"
      }
    },
    "guard_equation": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "guards"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "_exp"
        }
      ]
    },
    "_fun_guards": {
      "type": "REPEAT1",
      "content": {
        "type": "SYMBOL",
        "name": "guard_equation"
      }
    },
    "_funrhs": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "STRING",
                  "value": "="
                },
                {
                  "type": "FIELD",
                  "name": "rhs",
                  "content": {
                    "type": "SYMBOL",
                    "name": "_exp"
                  }
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "_fun_guards"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "where"
                },
                {
                  "type": "SYMBOL",
                  "name": "declarations"
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "_fun_patterns": {
      "type": "REPEAT1",
      "content": {
        "type": "SYMBOL",
        "name": "_apat"
      }
    },
    "_funvar": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_fun_name"
        },
        {
          "type": "FIELD",
          "name": "patterns",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "ALIAS",
                "content": {
                  "type": "SYMBOL",
                  "name": "_fun_patterns"
                },
                "named": true,
                "value": "patterns"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        }
      ]
    },
    "_funlhs": {
      "type": "PREC_DYNAMIC",
      "value": 2,
      "content": {
        "type": "SYMBOL",
        "name": "_funvar"
      }
    },
    "function": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_funlhs"
        },
        {
          "type": "SYMBOL",
          "name": "_funrhs"
        }
      ]
    },
    "operator_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "infixl"
            },
            {
              "type": "STRING",
              "value": "infixr"
            },
            {
              "type": "STRING",
              "value": "infix"
            }
          ]
        },
        {
          "type": "FIELD",
          "name": "precedence",
          "content": {
            "type": "SYMBOL",
            "name": "integer"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "type"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_qtyconid"
            },
            {
              "type": "SYMBOL",
              "name": "_qvarid"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "as"
        },
        {
          "type": "SYMBOL",
          "name": "operator"
        }
      ]
    },
    "signature": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "name",
          "content": {
            "type": "SYMBOL",
            "name": "_var"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "_gendecl": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "signature"
        },
        {
          "type": "SYMBOL",
          "name": "operator_declaration"
        }
      ]
    },
    "_decl_fun": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "function"
        },
        {
          "type": "PREC_DYNAMIC",
          "value": 1,
          "content": {
            "type": "ALIAS",
            "content": {
              "type": "SYMBOL",
              "name": "_funpat"
            },
            "named": true,
            "value": "function"
          }
        }
      ]
    },
    "_decl": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_gendecl"
        },
        {
          "type": "SYMBOL",
          "name": "_decl_fun"
        }
      ]
    },
    "declarations": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_layout_start"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_decl"
                        },
                        {
                          "type": "REPEAT",
                          "content": {
                            "type": "SEQ",
                            "members": [
                              {
                                "type": "PREC_DYNAMIC",
                                "value": 1,
                                "content": {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "STRING",
                                      "value": ";"
                                    },
                                    {
                                      "type": "SYMBOL",
                                      "name": "_layout_semicolon"
                                    }
                                  ]
                                }
                              },
                              {
                                "type": "SYMBOL",
                                "name": "_decl"
                              }
                            ]
                          }
                        }
                      ]
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "STRING",
                              "value": ";"
                            },
                            {
                              "type": "SYMBOL",
                              "name": "_layout_semicolon"
                            }
                          ]
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "SYMBOL",
              "name": "_layout_end"
            }
          ]
        }
      ]
    },
    "decl_foreign_import": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "foreign"
        },
        {
          "type": "STRING",
          "value": "import"
        },
        {
          "type": "SYMBOL",
          "name": "_fun_name"
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "_decl_foreign": {
      "type": "ALIAS",
      "content": {
        "type": "SYMBOL",
        "name": "decl_foreign_import"
      },
      "named": true,
      "value": "foreign_import"
    },
    "_newkind_type_signature": {
      "type": "PREC_DYNAMIC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "data"
          },
          {
            "type": "SYMBOL",
            "name": "_tyconid"
          },
          {
            "type": "SYMBOL",
            "name": "_type_annotation"
          }
        ]
      }
    },
    "kind_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_newkind_type_signature"
              },
              "named": true,
              "value": "kind_signature"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "data"
        },
        {
          "type": "SYMBOL",
          "name": "_simpletype"
        }
      ]
    },
    "kind_value_declaration": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "foreign"
        },
        {
          "type": "STRING",
          "value": "import"
        },
        {
          "type": "STRING",
          "value": "data"
        },
        {
          "type": "SYMBOL",
          "name": "_simpletype"
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "decl_derive": {
      "type": "PREC",
      "value": 1,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "derive"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "STRING",
                "value": "newtype"
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "STRING",
            "value": "instance"
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "ALIAS",
                    "content": {
                      "type": "SYMBOL",
                      "name": "_varid"
                    },
                    "named": true,
                    "value": "instance_name"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_colon2"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "CHOICE",
            "members": [
              {
                "type": "SEQ",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "constraints"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "_rcarrow"
                  }
                ]
              },
              {
                "type": "BLANK"
              }
            ]
          },
          {
            "type": "SYMBOL",
            "name": "type_name"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "SYMBOL",
              "name": "_atype"
            }
          }
        ]
      }
    },
    "_pattern_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_con"
        },
        {
          "type": "SYMBOL",
          "name": "_type_annotation"
        }
      ]
    },
    "_pattern_equals": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "lhs",
          "content": {
            "type": "SYMBOL",
            "name": "_pat"
          }
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "FIELD",
          "name": "rhs",
          "content": {
            "type": "SYMBOL",
            "name": "_pat"
          }
        }
      ]
    },
    "_pattern_decl": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_pat"
        },
        {
          "type": "SYMBOL",
          "name": "_funrhs"
        }
      ]
    },
    "_pattern_arrow": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "lhs",
          "content": {
            "type": "SYMBOL",
            "name": "_pat"
          }
        },
        {
          "type": "SYMBOL",
          "name": "_larrow"
        },
        {
          "type": "FIELD",
          "name": "rhs",
          "content": {
            "type": "SYMBOL",
            "name": "_pat"
          }
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "where"
                },
                {
                  "type": "CHOICE",
                  "members": [
                    {
                      "type": "SEQ",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_layout_start"
                        },
                        {
                          "type": "CHOICE",
                          "members": [
                            {
                              "type": "SEQ",
                              "members": [
                                {
                                  "type": "SEQ",
                                  "members": [
                                    {
                                      "type": "SYMBOL",
                                      "name": "_pattern_decl"
                                    },
                                    {
                                      "type": "REPEAT",
                                      "content": {
                                        "type": "SEQ",
                                        "members": [
                                          {
                                            "type": "PREC_DYNAMIC",
                                            "value": 1,
                                            "content": {
                                              "type": "CHOICE",
                                              "members": [
                                                {
                                                  "type": "STRING",
                                                  "value": ";"
                                                },
                                                {
                                                  "type": "SYMBOL",
                                                  "name": "_layout_semicolon"
                                                }
                                              ]
                                            }
                                          },
                                          {
                                            "type": "SYMBOL",
                                            "name": "_pattern_decl"
                                          }
                                        ]
                                      }
                                    }
                                  ]
                                },
                                {
                                  "type": "CHOICE",
                                  "members": [
                                    {
                                      "type": "CHOICE",
                                      "members": [
                                        {
                                          "type": "STRING",
                                          "value": ";"
                                        },
                                        {
                                          "type": "SYMBOL",
                                          "name": "_layout_semicolon"
                                        }
                                      ]
                                    },
                                    {
                                      "type": "BLANK"
                                    }
                                  ]
                                }
                              ]
                            },
                            {
                              "type": "BLANK"
                            }
                          ]
                        },
                        {
                          "type": "SYMBOL",
                          "name": "_layout_end"
                        }
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "decl_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "pattern"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_pattern_type"
              },
              "named": true,
              "value": "signature"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_pattern_equals"
              },
              "named": true,
              "value": "equation"
            },
            {
              "type": "ALIAS",
              "content": {
                "type": "SYMBOL",
                "name": "_pattern_arrow"
              },
              "named": true,
              "value": "equation"
            }
          ]
        }
      ]
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "\\p{Zs}"
    },
    {
      "type": "PATTERN",
      "value": "\\n"
    },
    {
      "type": "PATTERN",
      "value": "\\r"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    }
  ],
  "conflicts": [
    [
      "_field_name_ty",
      "_tyvar_no_annotation"
    ],
    [
      "_record_update_lhs",
      "_aexp_projection"
    ],
    [
      "_record_update_lhs",
      "exp_name"
    ],
    [
      "_data_type_signature",
      "_newkind_type_signature"
    ],
    [
      "type_infix",
      "_type"
    ],
    [
      "exp_section_left",
      "pat_wildcard"
    ],
    [
      "exp_ticked"
    ],
    [
      "_fun_name",
      "pat_name"
    ],
    [
      "signature",
      "pat_name"
    ],
    [
      "exp_name",
      "_pat_constructor"
    ],
    [
      "exp_name",
      "pat_name"
    ],
    [
      "_aexp_projection",
      "_apat"
    ],
    [
      "pat_name",
      "_q_op"
    ],
    [
      "exp_array",
      "pat_array"
    ],
    [
      "_exp_apply",
      "_fexp"
    ],
    [
      "_exp_apply"
    ],
    [
      "pat_apply",
      "_apat"
    ],
    [
      "pat_apply"
    ],
    [
      "type_apply",
      "_btype"
    ],
    [
      "type_apply"
    ],
    [
      "type_name",
      "class_head"
    ],
    [
      "type_name",
      "class_name"
    ],
    [
      "operator",
      "type_operator"
    ],
    [
      "_type"
    ],
    [
      "_btype"
    ],
    [
      "exp_ado"
    ]
  ],
  "precedences": [
    [
      {
        "type": "STRING",
        "value": "infix-type"
      },
      {
        "type": "STRING",
        "value": "btype"
      }
    ],
    [
      {
        "type": "STRING",
        "value": "function-type"
      },
      {
        "type": "STRING",
        "value": "type"
      }
    ]
  ],
  "externals": [
    {
      "type": "SYMBOL",
      "name": "_layout_semicolon"
    },
    {
      "type": "SYMBOL",
      "name": "_layout_start"
    },
    {
      "type": "SYMBOL",
      "name": "_layout_end"
    },
    {
      "type": "SYMBOL",
      "name": "_dot"
    },
    {
      "type": "SYMBOL",
      "name": "where"
    },
    {
      "type": "SYMBOL",
      "name": "_tyconsym"
    },
    {
      "type": "SYMBOL",
      "name": "comment"
    },
    {
      "type": "SYMBOL",
      "name": "comma"
    },
    {
      "type": "STRING",
      "value": "@"
    },
    {
      "type": "STRING",
      "value": "="
    },
    {
      "type": "STRING",
      "value": "|"
    },
    {
      "type": "STRING",
      "value": "in"
    },
    {
      "type": "PATTERN",
      "value": "\\n"
    },
    {
      "type": "SYMBOL",
      "name": "empty_file"
    }
  ],
  "inline": [
    "_stringly",
    "_qvarid",
    "_var",
    "_qvar",
    "_tyvar",
    "_qconid",
    "_con",
    "_tyconid",
    "_qtyconid",
    "_qtyconsym",
    "_qtycon",
    "_gtycon",
    "_simple_tycon",
    "_simple_qtyconop",
    "_quantifiers",
    "_qualifying_module"
  ],
  "supertypes": [],
  "reserved": {}
}