123456789101112131415161718192021222324252627282930313233343536open!ImportmoduletypeS=sigtypeasttypetvalcreate_list:astlist->tlist(** Add to hash state via [hash_fold_int] to signify what clause we're in. [None] for
inherited polymorphic variant clauses, since their observers will have salt for
concrete tags. *)valsalt:t->intoption(** location of the clause's definition *)vallocation:t->location(** weight of the clause relative to other clauses in the generator distribution, or
[None] if the clause should be excluded from the distribution *)valweight:t->expressionoption(** types of the clause's arguments *)valcore_type_list:t->core_typelist(** constructing a pattern to match the clause *)valpattern:t->loc:location->patternlist->pattern(** constructing an expression to create an instance of the clause *)valexpression:t->loc:location->core_type->expressionlist->expressionendmoduletypeClause_syntax=sigmoduletypeS=SmoduleVariant:Swithtypeast=constructor_declarationmodulePolymorphic_variant:Swithtypeast=row_fieldend