<commit_before># `FH\Eqs`

Equality comparers.

## Static methods

<dl>
<dt><code>make&lt;T>((function(T, T): bool) $eq): Eq&lt;T></code></dt>
<dd>Return an equality comparer from a function.</dd>

<dt><code>intEq(): Eq&lt;int></code></dt>
<dd><!-- TODO: document --></dd>

<dt><code>stringEq(): Eq&lt;string></code></dt>
<dd><!-- TODO: document --></dd>

<dt><code>arrayEq&lt;T>(Eq&lt;T> $elementEq): Eq&lt;array&lt;T>></code></dt>
<dd><!-- TODO: document --></dd>

<dt><code>vectorEq&lt;T>(Eq&lt;T> $elementEq): Eq&lt;ImmVector&lt;T>></code></dt>
<dd><!-- TODO: document --></dd>
</dl><commit_msg>Document Eqs::contramap<commit_after># `FH\Eqs`

Equality comparers.

## Static methods

<dl>
<dt><code>make&lt;T>((function(T, T): bool) $eq): Eq&lt;T></code></dt>
<dd>Return an equality comparer from a function.</dd>

<dt><code>contramap&lt;TI, TO>(Eq&lt;TO> $eq, (function(TI): TO) $f): Eq&lt;TI></code></dt>
<dd>Return a new equality comparer that first transforms its input.</dd>

<dt><code>intEq(): Eq&lt;int></code></dt>
<dd><!-- TODO: document --></dd>

<dt><code>stringEq(): Eq&lt;string></code></dt>
<dd><!-- TODO: document --></dd>

<dt><code>arrayEq&lt;T>(Eq&lt;T> $elementEq): Eq&lt;array&lt;T>></code></dt>
<dd><!-- TODO: document --></dd>

<dt><code>vectorEq&lt;T>(Eq&lt;T> $elementEq): Eq&lt;ImmVector&lt;T>></code></dt>
<dd><!-- TODO: document --></dd>
</dl>
{'fraction_non_alphanumeric': 0.29475982532751094, 'fraction_numerical': 0.0, 'mean_word_length': 5.875, 'pattern_counts': {'":': 0, '<': 81, '<?xml version=': 0, '>': 108, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3774093', 'n_tokens_mistral': 581, 'n_tokens_neox': 572, 'n_words': 109}