Did I really commit that?
More adventures in lexing.
-description is lazy.
Parsers can be named.
Describe combinators with their names.
Compactions of parsers get incremented names.
Merge pull request #49 from robrix/naming

Naming
HMREmpty does not subclass HMRParserCombinator.

This means it doesn’t incur the laziness/memoization penalties.
Add a terminal combinator.
Empty is a terminal combinator.
Null is a terminal combinator.
Predicates are terminal combinators.
Description, not describe, for terminals.
Merge pull request #53 from robrix/cheaper-terminals

Cheaper terminals
Combinators can be cyclic or not.
Compute cyclicality. Cylicity. Cyclism. Cyclones. Cyclopes.
Merge pull request #54 from robrix/cyclicity

Cyclicity
Compact unchanged alternations to self.
Compact unchanged concatenations to self.
Compact unchanged reductions to self.