82bd13d4

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

Exempt Show and Read instances that ignore what they are given

The ban exists because a written Show is a second serialisation that
drifts from the type it prints. An instance whose every method discards
all of its arguments cannot drift: what it produces does not depend on
the type at all. That is also the shape a secret takes when the point is
to keep it out of every log line, which the guide has always allowed, so
it is now the rule rather than a suppression at every such instance.

Recognised syntactically: every method the instance writes out has at
least one argument pattern and every one of them is a wildcard.
Constructor patterns are not enough, because `show Red = "red"` reads
the value while binding nothing, and an instance with no methods written
out says nothing about what its class defaults do with the value.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 1s 1s 1s 0s
Eval 1s 16s 16s 17s 0s
Build 9s 48s 18s 28s 0s
Suite 0s 1m06s 28s 28s 0s

Timeline

0s10s20s