extensible-parser-specifications
Unstable, and has seemingly unsolvable problems with module boundaries. This package works like seq-no-order by Alexander Knauth, but adds reusable (within the same module) clauses and global constraints like "a must occur before b" or "a mutually exclusive with c".