shrinking the size of sequences in a preference-order preserving fashion. Finally, note that it isn't strictly necessary to use an [`Extractor`]. Namely, an `Extractor` only uses public APIs of the [`Seq`] and [`Literal`] types, so it is possible to implement your own extractor. For example, for n-grams or "inner" literals (i.e., not prefix or suffix literals). The `Extractor` is mostly responsible for the case analysis over `Hir` expressions. Much of the "trickier" parts are how to combine literal sequences, and that is all implemented on [`Seq`].