The parser permute perm parses a permutation of parser described
by perm. For example, suppose we want to parse a permutation of:
an optional string of a's, the character b and an optional c.
This can be described by:

The parser permute perm parses a permutation of parser described
by perm. For example, suppose we want to parse a permutation of:
an optional string of a's, the character b and an optional c.
This can be described by:

Forward permutation specified by an index mapping. The result array is
initialised with the given defaults and any further values that are permuted
into the result array are added to the current value using the given
combination function.

The combination function must be associative and commutative. Elements
that are mapped to the magic value ignore by the permutation function are
dropped.

The parser permute perm parses a permutation of parser described
by perm. For example, suppose we want to parse a permutation of:
an optional string of a's, the character b and an optional c.
This can be described by:

The parser permute perm parses a permutation of parser described
by perm. For example, suppose we want to parse a permutation of:
an optional string of a's, the character b and an optional c.
This can be described by:

The parser permute perm parses a permutation of parser described
by perm. For example, suppose we want to parse a permutation of:
an optional string of a's, the character b and an optional c.
This can be described by:

The parser permute perm parses a permutation of parsers
described by perm. For example, suppose we want to parse a
permutation of: an optional string of a's, the character b and
an optional c. This can be described by:

The immutable permutation data type.
Internally, a permutation of size n is stored as an
0-based array of nInts. The permutation represents a reordering of
the integers 0, ..., (n-1). The permutation sents the value p[i] to
i.