By: Tom Sydney Kerckhove <syd@cs-syd.eu>
Stop the partial-function ban from reaching NonEmpty The ban on head, tail, init and last names NonEmpty as the replacement for three of the four, and then refused it: a bare name in an hlint functions rule matches every function of that name whatever module it came from, so Data.List.NonEmpty.head and its three siblings were reported as partial, with a message telling the writer to use the thing they had just used. hlint concatenates the allowances of every rule matching a use, and a rule with no allowance list at all allows everything, so a module-qualified entry beside each ban lifts it for exactly that module and leaves the ban broad everywhere else. Tried out against a fixture: head, Data.List.head and Data.Text.head are all still refused, and so is Data.List.NonEmpty.!!, which is as partial as indexing a list and is deliberately not among the four. HsNoSemigroupOnText was written around this: spanOfRun folded over the operands to reach the last one rather than asking for it. That fold is now the direct question again, and the comment justifying a constraint that no longer exists is gone with it. Also plans the walking that rule needed out of the rule: M5 is sixteen rules that want declarations and expressions, one traversal of the whole module each if nothing changes, and the three things this rule had to work out about reading an expression are things every one of them needs.
| Time to Start | Worker time | Duration | Time to finish | Idle | |
| Config | 14m10s | 0s | 0s | 14m11s | 14m10s |
| Eval | 14m15s | 15s | 15s | 14m31s | 4s |
| Build | 14m23s | 0s | - | - | 0s |
| Suite | 14m10s | 16s | - | - | 2h51m30s |