A bidirectional correspondence between two types where values can
be represented in both ways, but doing a reverse transformation
only guarantees an equivalent output. There is an equivalence
relation a =~= b such that coapply(apply(x)) ~=~ x and
apply(coapply(y) =~= y.
a =~= b
coapply(apply(x)) ~=~ x
apply(coapply(y) =~= y